2018-03-22 15:51:09 +01:00
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
|
2018-03-22 15:54:03 +01:00
|
|
|
use Test::More tests => 20;
|
2018-03-22 15:51:09 +01:00
|
|
|
|
|
|
|
use Crypt::Stream::RC4;
|
|
|
|
use Crypt::Stream::Sober128;
|
|
|
|
use Crypt::Stream::ChaCha;
|
2018-03-22 15:54:03 +01:00
|
|
|
use Crypt::Stream::Salsa20;
|
|
|
|
use Crypt::Stream::Sosemanuk;
|
|
|
|
use Crypt::Stream::Rabbit;
|
2018-03-22 15:51:09 +01:00
|
|
|
|
|
|
|
{
|
|
|
|
my $key = pack("H*", "0123456789abcdef");
|
|
|
|
my $pt = pack("H*", "0123456789abcdef");
|
|
|
|
my $ct = pack("H*", "75b7878099e0c596");
|
|
|
|
my $enc = Crypt::Stream::RC4->new($key)->crypt($pt);
|
|
|
|
my $dec = Crypt::Stream::RC4->new($key)->crypt($ct);
|
|
|
|
is(unpack("H*", $enc), unpack("H*", $ct), "Crypt::Stream::RC4 encrypt");
|
|
|
|
is(unpack("H*", $dec), unpack("H*", $pt), "Crypt::Stream::RC4 decrypt");
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
my $key = pack("H*", "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f");
|
|
|
|
my $iv = pack("H*", "000000000000004a00000000");
|
|
|
|
my $ct = pack("H*", "6E2E359A2568F98041BA0728DD0D6981E97E7AEC1D4360C20A27AFCCFD9FAE0BF91B65C5524733AB".
|
2018-03-22 15:54:03 +01:00
|
|
|
"8F593DABCD62B3571639D624E65152AB8F530C359F0861D807CA0DBF500D6A6156A38E088A22B65E".
|
|
|
|
"52BC514D16CCF806818CE91AB77937365AF90BBF74A35BE6B40B8EEDF2785E42874D");
|
2018-03-22 15:51:09 +01:00
|
|
|
my $pt = "Ladies and Gentlemen of the class of '99: If I could offer you only one tip for the future, sunscreen would be it.";
|
|
|
|
my $enc = Crypt::Stream::ChaCha->new($key, $iv, 1, 20)->crypt($pt);
|
|
|
|
my $dec = Crypt::Stream::ChaCha->new($key, $iv, 1, 20)->crypt($ct);
|
|
|
|
is(unpack("H*", $enc), unpack("H*", $ct), "Crypt::Stream::ChaCha encrypt");
|
|
|
|
is($dec, $pt, "Crypt::Stream::ChaCha decrypt");
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
my $key = pack("H*", "74657374206b65792031323862697473");
|
|
|
|
my $iv = pack("H*", "00000000");
|
|
|
|
my $ct = pack("H*", "43500ccf89919f1daa377495f4b458c240378bbb");
|
|
|
|
my $pt = pack("H*", "0000000000000000000000000000000000000000");
|
|
|
|
my $enc = Crypt::Stream::Sober128->new($key, $iv)->crypt($pt);
|
|
|
|
my $dec = Crypt::Stream::Sober128->new($key, $iv)->crypt($ct);
|
|
|
|
is(unpack("H*", $enc), unpack("H*", $ct), "Crypt::Stream::Sober128 encrypt");
|
|
|
|
is(unpack("H*", $dec), unpack("H*", $pt), "Crypt::Stream::Sober128 decrypt");
|
|
|
|
}
|
2018-03-22 15:54:03 +01:00
|
|
|
|
|
|
|
{
|
|
|
|
my $key = pack("H*", "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f");
|
|
|
|
my $iv = pack("H*", "000000000000004a");
|
|
|
|
my $ct = pack("H*", "CB68DCC5725E0EB8ADB47F526DCF821AD3E95D87EB4FAB3E92BE23CFF6C462CC1193527AC840DC43".
|
|
|
|
"772891D89A4AD56871EA7E5119B167C6FDAD7507F4A86DCE33326D570C62876EAE76210C4F3F8B77".
|
|
|
|
"C3EB7301C812FE432DE52C5A0665EA976F9C9D67EBB01A1657F4C67758BBAA2D2D12");
|
|
|
|
my $pt = "Ladies and Gentlemen of the class of '99: If I could offer you only one tip for the future, sunscreen would be it.";
|
|
|
|
my $enc = Crypt::Stream::Salsa20->new($key, $iv, 1, 20)->crypt($pt);
|
|
|
|
my $dec = Crypt::Stream::Salsa20->new($key, $iv, 1, 20)->crypt($ct);
|
|
|
|
is(unpack("H*", $enc), unpack("H*", $ct), "Crypt::Stream::Salsa encrypt");
|
|
|
|
is($dec, $pt, "Crypt::Stream::Salsa decrypt");
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
my $key = pack("H*", "74657374206b65792031323862697473");
|
|
|
|
my $iv = pack("H*", "11223344");
|
|
|
|
my $ct = pack("H*", "c57260e45b747f4223c2fb3b372c3c0f8091686e");
|
|
|
|
my $pt = pack("H*", "f31f8df318512fe05a6ee39aec075c2318071d27");
|
|
|
|
my $enc = Crypt::Stream::Sosemanuk->new($key, $iv)->crypt($pt);
|
|
|
|
my $dec = Crypt::Stream::Sosemanuk->new($key, $iv)->crypt($ct);
|
|
|
|
is(unpack("H*", $enc), unpack("H*", $ct), "Crypt::Stream::Sosemanuk encrypt");
|
|
|
|
is(unpack("H*", $dec), unpack("H*", $pt), "Crypt::Stream::Sosemanuk decrypt");
|
|
|
|
}
|
|
|
|
{
|
|
|
|
my $key = pack("H*", "74657374206b65792031323862697473");
|
|
|
|
my $ct = pack("H*", "366ded17432550a279ac18a1db2b602c98967549");
|
|
|
|
my $pt = pack("H*", "f31f8df318512fe05a6ee39aec075c2318071d27");
|
|
|
|
my $enc = Crypt::Stream::Sosemanuk->new($key, "")->crypt($pt);
|
|
|
|
my $dec = Crypt::Stream::Sosemanuk->new($key, "")->crypt($ct);
|
|
|
|
is(unpack("H*", $enc), unpack("H*", $ct), "Crypt::Stream::Sosemanuk encrypt (empty IV)");
|
|
|
|
is(unpack("H*", $dec), unpack("H*", $pt), "Crypt::Stream::Sosemanuk decrypt (empty IV)");
|
|
|
|
}
|
|
|
|
{
|
|
|
|
my $key = pack("H*", "74657374206b65792031323862697473");
|
|
|
|
my $ct = pack("H*", "366ded17432550a279ac18a1db2b602c98967549");
|
|
|
|
my $pt = pack("H*", "f31f8df318512fe05a6ee39aec075c2318071d27");
|
|
|
|
my $enc = Crypt::Stream::Sosemanuk->new($key)->crypt($pt);
|
|
|
|
my $dec = Crypt::Stream::Sosemanuk->new($key)->crypt($ct);
|
|
|
|
is(unpack("H*", $enc), unpack("H*", $ct), "Crypt::Stream::Sosemanuk encrypt (no IV)");
|
|
|
|
is(unpack("H*", $dec), unpack("H*", $pt), "Crypt::Stream::Sosemanuk decrypt (no IV)");
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
my $key = pack("H*", "74657374206b65792031323862697473");
|
|
|
|
my $iv = pack("H*", "1122334455");
|
|
|
|
my $ct = pack("H*", "91d4ba9044faa26e08db767d34b88d5cf4c884db");
|
|
|
|
my $pt = pack("H*", "0000000000000000000000000000000000000000");
|
|
|
|
my $enc = Crypt::Stream::Rabbit->new($key, $iv)->crypt($pt);
|
|
|
|
my $dec = Crypt::Stream::Rabbit->new($key, $iv)->crypt($ct);
|
|
|
|
is(unpack("H*", $enc), unpack("H*", $ct), "Crypt::Stream::Rabbit encrypt");
|
|
|
|
is(unpack("H*", $dec), unpack("H*", $pt), "Crypt::Stream::Rabbit decrypt");
|
|
|
|
}
|
|
|
|
{
|
|
|
|
my $key = pack("H*", "74657374206b65792031323862697473");
|
|
|
|
my $ct = pack("H*", "e8c99affb8ffb7541b6da2e06887994e800b70c9");
|
|
|
|
my $pt = pack("H*", "0000000000000000000000000000000000000000");
|
|
|
|
my $enc = Crypt::Stream::Rabbit->new($key)->crypt($pt);
|
|
|
|
my $dec = Crypt::Stream::Rabbit->new($key)->crypt($ct);
|
|
|
|
is(unpack("H*", $enc), unpack("H*", $ct), "Crypt::Stream::Rabbit encrypt (no IV)");
|
|
|
|
is(unpack("H*", $dec), unpack("H*", $pt), "Crypt::Stream::Rabbit decrypt (no IV)");
|
|
|
|
}
|
|
|
|
{
|
|
|
|
my $key = pack("H*", "74657374206b65792031323862697473");
|
|
|
|
my $ct = pack("H*", "442cf424c5da8d78000c6b874050260792ae8ce0");
|
|
|
|
my $pt = pack("H*", "0000000000000000000000000000000000000000");
|
|
|
|
my $enc = Crypt::Stream::Rabbit->new($key, "")->crypt($pt);
|
|
|
|
my $dec = Crypt::Stream::Rabbit->new($key, "")->crypt($ct);
|
|
|
|
is(unpack("H*", $enc), unpack("H*", $ct), "Crypt::Stream::Rabbit encrypt (empty IV)");
|
|
|
|
is(unpack("H*", $dec), unpack("H*", $pt), "Crypt::Stream::Rabbit decrypt (empty IV)");
|
|
|
|
}
|