The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use Test::More tests => 4;
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 = 'test string';

# https://salmon-protocol.googlecode.com/
#   svn/trunk/lib/python/magicsig_hjfreyer/magicsig_example.py
my $test_key =
    'RSA.'.
    'mVgY8RN6URBTstndvmUUPb4UZTdwvw'.
    'mddSKE5z_jvKUEK6yk1u3rrC9yN8k6'.
    'FilGj9K0eeUPe2hf4Pj-5CmHww==.'.
    'AQAB.'.
    'Lgy_yL3hsLBngkFdDw1Jy9TmSRMiH6'.
    'yihYetQ8jy-jZXdsZXd8V5ub3kuBHH'.
    'k4M39i3TduIkcrjcsiWQb77D8Q==';

my $mkey = Crypt::MagicSignatures::Key->new($test_key);

is($mkey->size, 512, 'Key size is correct');

my $sig = $mkey->sign($test_msg);

# From https://github.com/sivy/Salmon/blob/master/t/30-magic-algorithms.t
my $test_sig = 'mNpBIpTUOESnuQMlS8aWZ4hwdS'.
               'wWnMstrn0F3L9GHDXa238fN3Bx'.
               '3Rl0yvVESM_eZuocLsp9ubUrYD'.
               'u83821fQ==';

is($sig, $test_sig,  'Signature');       # 14

ok($mkey->verify($test_msg, $sig), 'Verification');