Crypt-Nettle
view release on metacpan or search on metacpan
scalar(@{$digest_algos}) +
scalar(keys(%{$yarrow_generated_params})) +
(8*scalar(@{$digest_algos})*scalar(@{$test_data})*2));
my @reported_digests = sort(Crypt::Nettle::RSA::hashes_available());
my @digests = sort(@{$digest_algos});
while (@reported_digests) {
my $modea = shift(@digests);
my $modeb = shift(@reported_digests);
ok($modea eq $modeb);
}
ok(0 == scalar(@digests));
my $pubkey = Crypt::Nettle::RSA->new_public_key($n, $e);
my $privkey = Crypt::Nettle::RSA->new_private_key($d, $p, $q);
ok(defined($pubkey));
ok(defined($privkey));
ok($n eq $pubkey->key_params()->{'n'});
ok($e eq $pubkey->key_params()->{'e'});
ok($n eq $privkey->key_params()->{'n'});
ok($e eq $privkey->key_params()->{'e'});
ok($p eq $privkey->key_params()->{'p'});
ok($q eq $privkey->key_params()->{'q'});
# use a static seed to get replicable results for testing.
# obviously, do not do anything this stupid in production.
my $seed = 'x' x 32;
my $y = Crypt::Nettle::Yarrow->new();
$y->seed($seed);
my $key = Crypt::Nettle::RSA->generate_keypair($y, 1024);
my $params = $key->key_params();
for my $param (keys(%{$yarrow_generated_params})) {
ok($yarrow_generated_params->{$param} eq $params->{$param});
};
use Data::Dumper;
for my $data (@${test_data}) {
for my $algo (@{$digest_algos}) {
my $digest = Crypt::Nettle::Hash::hash_data($algo, $data);
for my $keypair (['generated', $key], ['stored', $privkey]) {
my ($keylabel, $curkey) = @{$keypair};
my $sig = $curkey->rsa_sign($algo, $data);
ok(defined($sig));
my $sig2 = $curkey->rsa_sign_digest($algo, $digest);
ok(defined($sig2));
ok($sig2 eq $sig);
my $ret = $curkey->rsa_verify($algo, $data, $sig);
ok(defined($ret));
warn Dumper({key => $keylabel, algo => $algo, sig => unpack('H*', $sig), data => $data})
if($ret != 1);
ok($ret == 1);
$ret = $curkey->rsa_verify_digest($algo, $digest, $sig);
ok(defined($ret) && ($ret == 1));
my $badsig = $sig ^ "\01"; # flip one bit
$ret = $curkey->rsa_verify($algo, $data, $badsig);
ok(defined($ret));
ok($ret == 0);
}
}
}
( run in 0.631 second using v1.01-cache-2.11-cpan-71847e10f99 )