DBIx-Squirrel
view release on metacpan or search on metacpan
t/07-fernet.t view on Meta::CPAN
use strict;
use warnings;
use Test::More;
BEGIN {
use_ok('Crypt::CBC');
use_ok('Digest::SHA');
use_ok('MIME::Base64::URLSafe');
use_ok(
'DBIx::Squirrel::Crypt::Fernet',
qw/fernet_decrypt fernet_encrypt fernet_genkey fernet_verify Fernet/,
);
}
diag join(
', ',
"Testing DBIx::Squirrel::Crypt::Fernet $DBIx::Squirrel::Crypt::Fernet::VERSION",
"Perl $]", "$^X",
);
my( $expired_key, $expired_token ) = (
'cJ3Fw3ehXqef-Vqi-U8YDcJtz8Gv-ZHyxultoAGHi4c=',
'gAAAAABT8bVcdaked9SPOkuQ77KsfkcoG9GvuU4SVWuMa3ewrxpQdreLdCT6cc7rdqkavhyLgqZC41dW2vwZJAHLYllwBmjgdQ==',
);
# Yes, I know I can use subtests, but subtests create a few more issues
# on the CPANTS testing matrix. So, I'm keeping things simple by using
# lexical scopes for groups of related tests.
{
my $h = '* Testing object-oriented interface *';
note $_ for '', '*' x length($h), $h, '*' x length($h), '';
my( $key, $fernet, $message, $ttl, $verify, $encrypted_token, $decrypted_text );
$key = Fernet->generatekey();
is length($key), 44, "ok - got base64 key";
$fernet = Fernet($key);
isa_ok $fernet, 'DBIx::Squirrel::Crypt::Fernet';
is $fernet->to_string(), $key, "ok - to_string serialisation";
is "$fernet", $key, "ok - stringification";
$message = 'This is a test';
$encrypted_token = $fernet->encrypt($message);
ok length($encrypted_token) > 0, "ok - encrypt";
$verify = $fernet->verify($encrypted_token);
is $verify, !!1, "ok - verify";
$decrypted_text = $fernet->decrypt($encrypted_token);
is $decrypted_text, $message, "ok - decrypt";
( $fernet, $ttl ) = ( Fernet($expired_key), 10 );
$verify = $fernet->verify( $expired_token, $ttl );
is $verify, !!0, "ok - verify with ttl (expired)";
$decrypted_text = $fernet->decrypt( $expired_token, $ttl );
is $decrypted_text, undef, "ok - decrypt with ttl (expired)";
$fernet = Fernet($key);
$verify = $fernet->verify( $encrypted_token, $ttl );
is $verify, !!1, "ok - verify with ttl";
( run in 0.993 second using v1.01-cache-2.11-cpan-8dfa8b56332 )