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

use strict;
use warnings;
use Test::More tests => 1;
use MIME::Base64;
use Crypt::OpenToken::KeyGenerator;

###############################################################################
# TEST: generating key from password
#
# Using data collected from the PHP implementation, verify that our Perl
# implementation generates the same results.
generate_key: {
    # test data, as produced by the PingId PHP Integration Kit for OpenToken
    my $keysize  = 16;
    my $password_base64 = 'a66C9MvM8eY4qJKyCXKW+19PWDeuc3th';
    my $expected_base64 = 'K85t+EVxhbr7r9qNCRFTQA==';

    my $password  = decode_base64($password_base64);
    my $generated = Crypt::OpenToken::KeyGenerator::generate(
        $password, $keysize,
    );
    my $generated_base64 = encode_base64($generated, '');
    is $generated_base64, $expected_base64,
        'Generated key matches other implementations';
}