]> git.sesse.net Git - www-csrf/commitdiff
die() if the wrong amount of randomness comes in.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Tue, 12 Nov 2013 21:08:12 +0000 (22:08 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Tue, 12 Nov 2013 21:08:12 +0000 (22:08 +0100)
lib/WWW/CSRF.pm
t/01_generate.t

index 9197a6e8c8676294127456688b85aa1efc475298..77d8e797cb05b352fa5247878b48cddb99e6efc1 100644 (file)
@@ -20,8 +20,10 @@ sub generate_csrf_token {
        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);
        
index 3e97a6f9632eb4229904133b063a2081dce917f4..a2147de1e3948f107478dd66af0a00d76304f1b3 100644 (file)
@@ -1,4 +1,4 @@
-use Test::More tests => 5;
+use Test::More tests => 6;
 
 use WWW::CSRF qw(generate_csrf_token);
 
@@ -24,3 +24,9 @@ $random = pack('H*', '112233445566778899aabbccddeeff0011223340');
 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()");