tuning rabbit
Karel Miko
6 years ago
23 | 23 | if (!SvPOK(nonce)) croak("FATAL: nonce must be string/buffer scalar"); |
24 | 24 | iv = (unsigned char *)SvPVbyte(nonce, iv_len); |
25 | 25 | rv = rabbit_setiv(&RETVAL->state, iv, (unsigned long)iv_len); |
26 | } | |
27 | else { | |
28 | /* rv = rabbit_setiv(&RETVAL->state, NULL, 0); */ | |
29 | rv = CRYPT_OK; /* XXX-FIXME this is a hack - skip rabbit_setiv if undefined nonce */ | |
30 | } | |
31 | if (rv != CRYPT_OK) { | |
32 | Safefree(RETVAL); | |
33 | croak("FATAL: rabbit_setiv failed: %s", error_to_string(rv)); | |
26 | if (rv != CRYPT_OK) { | |
27 | Safefree(RETVAL); | |
28 | croak("FATAL: rabbit_setiv failed: %s", error_to_string(rv)); | |
29 | } | |
34 | 30 | } |
35 | 31 | |
36 | 32 | } |
0 | 0 | use strict; |
1 | 1 | use warnings; |
2 | 2 | |
3 | use Test::More tests => 16; | |
3 | use Test::More tests => 20; | |
4 | 4 | |
5 | 5 | use Crypt::Stream::RC4; |
6 | 6 | use Crypt::Stream::Sober128; |
87 | 87 | |
88 | 88 | { |
89 | 89 | my $key = pack("H*", "74657374206b65792031323862697473"); |
90 | my $iv = pack("H*", "00000000"); | |
91 | my $ct = pack("H*", "442cf424c5da8d78000c6b874050260792ae8ce0"); | |
90 | my $iv = pack("H*", "1122334455"); | |
91 | my $ct = pack("H*", "91d4ba9044faa26e08db767d34b88d5cf4c884db"); | |
92 | 92 | my $pt = pack("H*", "0000000000000000000000000000000000000000"); |
93 | 93 | my $enc = Crypt::Stream::Rabbit->new($key, $iv)->crypt($pt); |
94 | 94 | my $dec = Crypt::Stream::Rabbit->new($key, $iv)->crypt($ct); |
95 | 95 | is(unpack("H*", $enc), unpack("H*", $ct), "Crypt::Stream::Rabbit encrypt"); |
96 | 96 | is(unpack("H*", $dec), unpack("H*", $pt), "Crypt::Stream::Rabbit decrypt"); |
97 | 97 | } |
98 | { | |
99 | my $key = pack("H*", "74657374206b65792031323862697473"); | |
100 | my $ct = pack("H*", "e8c99affb8ffb7541b6da2e06887994e800b70c9"); | |
101 | my $pt = pack("H*", "0000000000000000000000000000000000000000"); | |
102 | my $enc = Crypt::Stream::Rabbit->new($key)->crypt($pt); | |
103 | my $dec = Crypt::Stream::Rabbit->new($key)->crypt($ct); | |
104 | is(unpack("H*", $enc), unpack("H*", $ct), "Crypt::Stream::Rabbit encrypt (no IV)"); | |
105 | is(unpack("H*", $dec), unpack("H*", $pt), "Crypt::Stream::Rabbit decrypt (no IV)"); | |
106 | } | |
107 | { | |
108 | my $key = pack("H*", "74657374206b65792031323862697473"); | |
109 | my $ct = pack("H*", "442cf424c5da8d78000c6b874050260792ae8ce0"); | |
110 | my $pt = pack("H*", "0000000000000000000000000000000000000000"); | |
111 | my $enc = Crypt::Stream::Rabbit->new($key, "")->crypt($pt); | |
112 | my $dec = Crypt::Stream::Rabbit->new($key, "")->crypt($ct); | |
113 | is(unpack("H*", $enc), unpack("H*", $ct), "Crypt::Stream::Rabbit encrypt (empty IV)"); | |
114 | is(unpack("H*", $dec), unpack("H*", $pt), "Crypt::Stream::Rabbit decrypt (empty IV)"); | |
115 | } |
0 | use strict; | |
1 | use warnings; | |
2 | ||
3 | use Test::More tests => 3; | |
4 | use Crypt::Stream::Rabbit; | |
5 | ||
6 | # https://metacpan.org/source/JCDUQUE/Crypt-Rabbit-1.0.0/t/02.t | |
7 | # https://metacpan.org/source/JCDUQUE/Crypt-Rabbit-1.0.0/t/03.t | |
8 | # https://metacpan.org/source/JCDUQUE/Crypt-Rabbit-1.0.0/t/04.t | |
9 | ||
10 | { | |
11 | my $key = pack "H32", 0; | |
12 | my $cipher = Crypt::Stream::Rabbit->new($key); | |
13 | my $ciphertext = pack "H64", "02f74a1c26456bf5ecd6a536f05457b1a78ac689476c697b390c9cc515d8e888"; | |
14 | my $plaintext = $cipher->crypt($ciphertext); | |
15 | my $answer = unpack "H*", $plaintext; | |
16 | is($answer, "0000000000000000000000000000000000000000000000000000000000000000"); | |
17 | } | |
18 | ||
19 | { | |
20 | my $key = pack "H32", "c21fcf3881cd5ee8628accb0a9890df8"; | |
21 | my $cipher = Crypt::Stream::Rabbit->new($key); | |
22 | my $plaintext = pack "H64", 0; | |
23 | my $ciphertext = $cipher->crypt($plaintext); | |
24 | my $answer = unpack "H*", $ciphertext; | |
25 | is($answer, "3d02e0c730559112b473b790dee018dfcd6d730ce54e19f0c35ec4790eb6c74a"); | |
26 | } | |
27 | ||
28 | { | |
29 | my $key = pack "H32", "1d272c6a2d8e3dfcac14056b78d633a0"; | |
30 | my $cipher = Crypt::Stream::Rabbit->new($key); | |
31 | my $plaintext = pack "H72", 0; | |
32 | my $ciphertext = $cipher->crypt($plaintext); | |
33 | my $answer = unpack "H*", $ciphertext; | |
34 | is($answer, "a3a97abb80393820b7e50c4abb53823dc4423799c2efc9ffb3a4125f1f4c99a8ae953e56"); | |
35 | } |