1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
use Test::More;
use utf8;
use strict;
use warnings;
require_ok 'Pass::OTP';
# Based on the test vectors from RFC6238
my %seeds = (
sha1 => '3132333435363738393031323334353637383930',
sha256 => '3132333435363738393031323334353637383930'.
'313233343536373839303132',
sha512 => '3132333435363738393031323334353637383930'.
'3132333435363738393031323334353637383930'.
'3132333435363738393031323334353637383930'.
'31323334',
);
sub is_totp {
my %opts = (@_);
is(
Pass::OTP::otp(
secret => $seeds{lc $opts{algorithm}},
algorithm => $opts{algorithm},
now => $opts{now},
digits => 8,
type => 'totp'),
$opts{totp},
"Test vector with time (sec) $opts{now} on mode $opts{algorithm}"
);
}
is_totp(now => 59, algorithm => 'sha1', totp => '94287082');
is_totp(now => 59, algorithm => 'sha256', totp => '46119246');
is_totp(now => 59, algorithm => 'sha512', totp => '90693936');
is_totp(now => 1111111109, algorithm => 'sha1', totp => '07081804');
is_totp(now => 1111111109, algorithm => 'sha256', totp => '68084774');
is_totp(now => 1111111109, algorithm => 'sha512', totp => '25091201');
is_totp(now => 1111111111, algorithm => 'sha1', totp => '14050471');
is_totp(now => 1111111111, algorithm => 'sha256', totp => '67062674');
is_totp(now => 1111111111, algorithm => 'sha512', totp => '99943326');
is_totp(now => 1234567890, algorithm => 'sha1', totp => '89005924');
is_totp(now => 1234567890, algorithm => 'sha256', totp => '91819424');
is_totp(now => 1234567890, algorithm => 'sha512', totp => '93441116');
is_totp(now => 2000000000, algorithm => 'sha1', totp => '69279037');
is_totp(now => 2000000000, algorithm => 'sha256', totp => '90698825');
is_totp(now => 2000000000, algorithm => 'sha512', totp => '38618901');
is_totp(now => 20000000000, algorithm => 'sha1', totp => '65353130');
is_totp(now => 20000000000, algorithm => 'sha256', totp => '77737706');
is_totp(now => 20000000000, algorithm => 'sha512', totp => '47863826');
is_totp(now => 59, algorithm => 'SHA512', totp => '90693936');
done_testing(20);
|