Crypt-HSM

 view release on metacpan or  search on metacpan

t/softhsm.t  view on Meta::CPAN

my %public_key_template = (
	token => 0,
	encrypt => 1,
	verify => 1,
	modulus_bits => 2048,
	public_exponent => 65537,
	label => 'test public key',
	id => 'abc',
);

my %private_key_template = (
	token => 0,
	sensitive => 1,
	extractable => 1,
	decrypt => 1,
	sign => 1,
	label => 'test private key',
	id => 'abc',
);

my ($public_key, $private_key) = $session->generate_keypair('rsa-pkcs-key-pair-gen', \%public_key_template, \%private_key_template);

note $public_key->id;
note $private_key->id;

my $plain_text = 'plain text';
{
my $encrypted_text = $session->encrypt('rsa_pkcs', $public_key, $plain_text);

my $decrypted_text = $session->decrypt('rsa-pkcs', $private_key, $encrypted_text);

is $decrypted_text, $plain_text, 'rsa-pkcs decrypted';
}

{
my $encrypted_text = $session->encrypt('rsa_pkcs_oaep', $public_key, $plain_text, 'sha1');

my $decrypted_text = $session->decrypt('rsa-pkcs-oaep', $private_key, $encrypted_text, 'sha1');

is $decrypted_text, $plain_text, 'rsa-oaep decrypted';
}

{
my $signature = $session->sign('sha256-rsa-pkcs', $private_key, $plain_text);

ok $session->verify('sha256-rsa-pkcs', $public_key, $plain_text, $signature), 'rsa-pkcs verified';
}

{
my $signature = $session->sign('sha256-rsa-pkcs-pss', $private_key, $plain_text);

ok $session->verify('sha256-rsa-pkcs-pss', $public_key, $plain_text, $signature), 'rsa-pss verified';
}

my $attributes = $public_key->get_attributes('modulus', 'public_exponent');

is length($attributes->{modulus}->to_bytes), 256, 'modulus is 2024 bits';
is $attributes->{public_exponent}, 65537, 'public exponent is 65537';

my $modulus = $public_key->get_attribute('modulus');

t/softhsm.t  view on Meta::CPAN

my $iv = "\0" x 16;
my $encoder = $session->open_encrypt('aes-cbc-pad', $aes_key, $iv);

my $tripled = $plain_text x 3;
my $ciphertext = $encoder->add_data($tripled);
$ciphertext .= $encoder->finalize;

is $session->decrypt('aes-cbc-pad', $aes_key, $ciphertext, $iv), $tripled, 'AES decrypts correctly';

{
	my $wrapped = $session->wrap_key('aes-key-wrap', $aes_key, $private_key);
	ok $wrapped;

	my $unwrapped = $session->unwrap_key('aes-key-wrap', $aes_key, $wrapped, { class => 'private-key', key_type => 'rsa', %private_key_template });
	ok $unwrapped;
}

$public_key->destroy_object;
$private_key->destroy_object;

done_testing;



( run in 0.823 second using v1.01-cache-2.11-cpan-437f7b0c052 )