my @digest_bytes = _to_byte_array($digest);
# Mask the token to avoid the BREACH attack.
- if (!defined($random) || length($random) != length($digest)) {
+ if (!defined($random)) {
$random = Bytes::Random::Secure::random_bytes(scalar @digest_bytes);
+ } elsif (length($random) != length($digest)) {
+ die "Given randomness is of the wrong length (should be " . length($digest) . " bytes)";
}
my @random_bytes = _to_byte_array($random);
-use Test::More tests => 5;
+use Test::More tests => 6;
use WWW::CSRF qw(generate_csrf_token);
is(generate_csrf_token("id", "secret", { Random => $random, Time => 1234567890 }),
"5df5e9f17c929a45af5d33624ec052903599958b,112233445566778899aabbccddeeff0011223340,1234567890",
"bitflip in mask flips corresponding bit in token");
+
+$random = pack('H*', '112233445566778899aabbccddeeff00112233');
+eval {
+ my $ignored = generate_csrf_token("id", "secret", { Random => $random, Time => 1234567890 });
+};
+ok($@, "check that wrong amount of randomness causes die()");