#!/usr/bin/env perl use Test::More; use Math::BigInt try => 'GMP,Pari'; use strict; use warnings; no strict 'refs'; use lib '../lib'; our $module; BEGIN { our $module = 'Crypt::MagicSignatures::Key'; use_ok($module, qw/b64url_encode b64url_decode/); # 1 }; my $test_msg = 'This is a small message test.'; # test os2ip my $os2ip = *{"${module}::_os2ip"}->($test_msg); ok($os2ip eq '22756313778701413365784'. '01782410999343477943894'. '174703601131715860591662', 'os2ip'); # 2 # test i2osp my $i2osp = *{"${module}::_i2osp"}->($os2ip); ok($i2osp eq $test_msg, 'i2osp'); # 3 # test bitsize my $bitsize = *{"${module}::_bitsize"}->($os2ip); is(231, $bitsize, 'bitsize'); # 4 # test octet_len my $octet_len = *{"${module}::_octet_len"}->($os2ip); is(29, $octet_len, 'octet_len'); # 5 # test b64url_encode my $b64url_encode = b64url_encode($test_msg); $b64url_encode =~ s/[\s=]+$//; is($b64url_encode, 'VGhpcyBpcyBhIHNtYWxsIG1lc3NhZ2UgdGVzdC4', 'b64url_encode'); # 6 # test b64url_decode my $b64url_decode = b64url_decode($b64url_encode); ok($b64url_decode eq $test_msg, 'b64url_decode'); # 7 # test _hex_to_b64url my $hex2b64url = *{"${module}::_hex_to_b64url"}->($os2ip); $b64url_encode =~ s/[\s=]+$//; is($hex2b64url, b64url_encode($test_msg), '_hex_to_b64url'); # test _b64url_to_hex my $b64url2hex = *{"${module}::_b64url_to_hex"}->(b64url_encode($test_msg)); is($b64url2hex, $os2ip, '_b64url_to_hex'); # Todo: check extreme values for d, e, n, sign, verify done_testing; exit; # MaxMin tests # ################ $test_msg = ('abc' x 33 . 'def' x 33 . 'ghi' x 33 . 'jkl'); # test os2ip $os2ip = *{"${module}::_os2ip"}->($test_msg); ok($os2ip, 'os2ip'); # > 30_000 characters $os2ip = *{"${module}::_os2ip"}->($test_msg x 110); ok(!$os2ip, 'os2ip fail'); $os2ip = *{"${module}::_os2ip"}->(''); ok(!$os2ip, 'os2ip'); $os2ip = *{"${module}::_os2ip"}->('1'); is($os2ip, '49', 'os2ip'); $os2ip = *{"${module}::_os2ip"}->("\0"); is($os2ip, '0', 'os2ip'); # _os2ip fails with > 30_000 characters $os2ip = ('123' x 33 . '345' x 33 . '678' x 33 . '901'); # test i2osp $i2osp = *{"${module}::_i2osp"}->($os2ip); ok($i2osp, 'i2osp'); # 3 $i2osp = *{"${module}::_i2osp"}->($os2ip x 110); ok(!$i2osp, 'i2osp'); $i2osp = *{"${module}::_i2osp"}->(); ok($i2osp, 'i2osp'); $i2osp = *{"${module}::_i2osp"}->("a"); ok(!$i2osp, 'i2osp'); done_testing; __END__ # test bitsize my $bitsize = *{"${module}::_bitsize"}->($os2ip); is(231, $bitsize, 'bitsize'); # 4 # test octet_len my $octet_len = *{"${module}::_octet_len"}->($os2ip); is(29, $octet_len, 'octet_len'); # 5 # test b64url_encode my $b64url_encode = b64url_encode($test_msg); $b64url_encode =~ s/[\s=]+$//; is($b64url_encode, 'VGhpcyBpcyBhIHNtYWxsIG1lc3NhZ2UgdGVzdC4', 'b64url_encode'); # 6 # test b64url_decode my $b64url_decode = b64url_decode($b64url_encode); ok($b64url_decode eq $test_msg, 'b64url_decode'); # 7 # test _hex_to_b64url my $hex2b64url = *{"${module}::_hex_to_b64url"}->($os2ip); $b64url_encode =~ s/[\s=]+$//; is($hex2b64url, b64url_encode($test_msg), '_hex_to_b64url'); # test _b64url_to_hex my $b64url2hex = *{"${module}::_b64url_to_hex"}->(b64url_encode($test_msg)); is($b64url2hex, $os2ip, '_b64url_to_hex'); done_testing;