-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy path10-selftest.t
123 lines (96 loc) · 3.19 KB
/
10-selftest.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# -*- Mode: Perl; -*-
use strict;
use Test;
use Crypt::OpenSSL::DSA;
BEGIN { plan tests => 36 }
my $message = "foo bar";
my $dsa = Crypt::OpenSSL::DSA->generate_parameters( 512, "fooooooooooooooooooo" );
$dsa->generate_key;
my $dsa_sig1 = $dsa->sign($message);
my $dsa_sig_obj1 = $dsa->do_sign($message);
my $bogus_sig = $dsa_sig1;
$bogus_sig =~ s!.a$!ba!;
$bogus_sig =~ s!.$!a!;
my $p = $dsa->get_p;
my $q = $dsa->get_q;
my $g = $dsa->get_g;
my $pub_key = $dsa->get_pub_key;
my $priv_key = $dsa->get_priv_key;
my $r = $dsa_sig_obj1->get_r;
my $s = $dsa_sig_obj1->get_s;
my $dsa_sig_obj2 = Crypt::OpenSSL::DSA::Signature->new();
$dsa_sig_obj2->set_r($r);
$dsa_sig_obj2->set_s($s);
my $dsa_sig_obj_bogus = Crypt::OpenSSL::DSA::Signature->new();
$dsa_sig_obj_bogus->set_r($s);
$dsa_sig_obj_bogus->set_s($r);
ok($dsa->verify($message, $dsa_sig1), 1);
ok($dsa->verify($message, $bogus_sig), 0);
ok($dsa->do_verify($message, $dsa_sig_obj1), 1);
ok($dsa->do_verify($message, $dsa_sig_obj2), 1);
ok($dsa->do_verify($message, $dsa_sig_obj_bogus), 0);
ok($dsa->write_params("dsa.param.pem"), 1);
ok($dsa->write_pub_key("dsa.pub.pem"), 1);
ok($dsa->write_priv_key("dsa.priv.pem"), 1);
my ($priv_key_str, $pub_key_str);
{
local($/) = undef;
open PRIV, "dsa.priv.pem";
$priv_key_str = <PRIV>;
close PRIV;
open PUB, "dsa.pub.pem";
$pub_key_str = <PUB>;
close PUB;
}
my $dsa2 = Crypt::OpenSSL::DSA->read_priv_key("dsa.priv.pem");
my $dsa_sig2 = $dsa2->sign($message);
my $dsa3 = Crypt::OpenSSL::DSA->read_pub_key("dsa.pub.pem");
my $dsa4 = Crypt::OpenSSL::DSA->read_priv_key_str($priv_key_str);
my $dsa5 = Crypt::OpenSSL::DSA->read_pub_key_str($pub_key_str);
my $dsa6 = Crypt::OpenSSL::DSA->new();
$dsa6->set_p($p);
$dsa6->set_q($q);
$dsa6->set_g($g);
$dsa6->set_pub_key($pub_key);
ok($dsa6->get_p,$p);
ok($dsa6->get_q,$q);
ok($dsa6->get_g,$g);
ok($dsa6->get_pub_key,$pub_key);
ok($dsa->verify($message, $dsa_sig2), 1);
ok($dsa2->verify($message, $dsa_sig2), 1);
ok($dsa2->verify($message, $dsa_sig1), 1);
ok($dsa3->verify($message, $dsa_sig1), 1);
ok($dsa3->verify($message, $dsa_sig2), 1);
ok($dsa4->verify($message, $dsa_sig2), 1);
ok($dsa4->verify($message, $dsa_sig1), 1);
ok($dsa5->verify($message, $dsa_sig1), 1);
ok($dsa5->verify($message, $dsa_sig2), 1);
ok($dsa6->verify($message, $dsa_sig1), 1);
ok($dsa6->verify($message, $dsa_sig2), 1);
$dsa6->set_priv_key($priv_key);
ok($dsa6->get_priv_key,$priv_key);
my $dsa_sig3 = $dsa6->sign($message);
ok($dsa->verify($message, $dsa_sig3), 1);
ok($dsa2->verify($message, $dsa_sig3), 1);
ok($dsa3->verify($message, $dsa_sig3), 1);
ok($dsa4->verify($message, $dsa_sig3), 1);
ok($dsa5->verify($message, $dsa_sig3), 1);
ok($dsa6->verify($message, $dsa_sig3), 1);
# Check setting private key before public key.
# This is not suppored by OpenSSL-1.1.0.
my $dsa7 = Crypt::OpenSSL::DSA->new();
$dsa7->set_p($p);
$dsa7->set_q($q);
$dsa7->set_g($g);
ok($dsa7->get_p,$p);
ok($dsa7->get_q,$q);
ok($dsa7->get_g,$g);
$dsa7->set_priv_key($priv_key);
ok($dsa7->get_priv_key,$priv_key);
my $dsa_sig4 = $dsa7->sign($message);
$dsa7->set_pub_key($pub_key);
ok($dsa7->get_pub_key,$pub_key);
ok($dsa7->verify($message, $dsa_sig4), 1);
unlink("dsa.param.pem");
unlink("dsa.priv.pem");
unlink("dsa.pub.pem");