libcryptx-perl/t/cipher_stream.t
2018-03-22 15:54:03 +01:00

117 lines
5.8 KiB
Perl

use strict;
use warnings;
use Test::More tests => 20;
use Crypt::Stream::RC4;
use Crypt::Stream::Sober128;
use Crypt::Stream::ChaCha;
use Crypt::Stream::Salsa20;
use Crypt::Stream::Sosemanuk;
use Crypt::Stream::Rabbit;
{
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".
"8F593DABCD62B3571639D624E65152AB8F530C359F0861D807CA0DBF500D6A6156A38E088A22B65E".
"52BC514D16CCF806818CE91AB77937365AF90BBF74A35BE6B40B8EEDF2785E42874D");
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");
}
{
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)");
}