2 | 2 |
use Test::More;
|
3 | 3 |
|
4 | 4 |
plan skip_all => "No JSON::* module installed" unless eval { require JSON::PP } || eval { require JSON::XS } || eval { require Cpanel::JSON::XS };
|
5 | |
plan tests => 90;
|
|
5 |
plan tests => 92;
|
6 | 6 |
|
7 | 7 |
use Crypt::PK::RSA;
|
8 | 8 |
use Crypt::PK::ECC;
|
|
38 | 38 |
size => 256,
|
39 | 39 |
type => 1,
|
40 | 40 |
};
|
|
41 |
|
|
42 |
my $RSA1_jwk_thumbprint_sha256 = 'NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs';
|
41 | 43 |
|
42 | 44 |
my $RSA2 = {
|
43 | 45 |
d => "",
|
|
76 | 78 |
ok(exists $jwkh->{n}, "RSA n test export_key_jwk as hash");
|
77 | 79 |
ok(exists $jwkh->{e}, "RSA e test export_key_jwk as hash");
|
78 | 80 |
ok(exists $jwkh->{p}, "RSA p test export_key_jwk as hash");
|
|
81 |
my $jwk_tp = $rsa->export_key_jwk_thumbprint('SHA256');
|
|
82 |
is($jwk_tp, $RSA1_jwk_thumbprint_sha256, 'export_key_jwk_thumbprint(SHA256)');
|
79 | 83 |
### jwk re-import private key
|
80 | 84 |
$rsa->import_key(\$jwk);
|
81 | 85 |
$kh = $rsa->key2hash;
|
|
88 | 92 |
is($kh->{dP}, $RSA1->{dP}, "RSA private dP test JWK1");
|
89 | 93 |
is($kh->{dQ}, $RSA1->{dQ}, "RSA private dQ test JWK1");
|
90 | 94 |
is($kh->{qP}, $RSA1->{qP}, "RSA private qP test JWK1");
|
|
95 |
$jwk_tp = $rsa->export_key_jwk_thumbprint('SHA256');
|
|
96 |
is($jwk_tp, $RSA1_jwk_thumbprint_sha256, 'export_key_jwk_thumbprint(SHA256)');
|
91 | 97 |
### jwk re-import public key
|
92 | 98 |
$rsa->import_key(\$jwkp);
|
93 | 99 |
$kh = $rsa->key2hash;
|
|
100 | 106 |
is($kh->{dP}, "", "RSA private dP test JWK2");
|
101 | 107 |
is($kh->{dQ}, "", "RSA private dQ test JWK2");
|
102 | 108 |
is($kh->{qP}, "", "RSA private qP test JWK2");
|
|
109 |
$jwk_tp = $rsa->export_key_jwk_thumbprint('SHA256');
|
|
110 |
is($jwk_tp, $RSA1_jwk_thumbprint_sha256, 'export_key_jwk_thumbprint(SHA256)');
|
103 | 111 |
}
|
104 | 112 |
|
105 | 113 |
{
|
|
147 | 155 |
size => 32,
|
148 | 156 |
type => 1,
|
149 | 157 |
};
|
|
158 |
|
|
159 |
my $ec1_jwk_thumbprint_sha256 = 'cn-I_WNMClehiVp51i_0VpOENW1upEerA8sEam5hn-s';
|
150 | 160 |
|
151 | 161 |
my $EC2 = {
|
152 | 162 |
curve_A => "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC",
|
|
186 | 196 |
ok(exists $jwkh->{x}, "ECC x test export_key_jwk as hash");
|
187 | 197 |
ok(exists $jwkh->{y}, "ECC y test export_key_jwk as hash");
|
188 | 198 |
ok(exists $jwkh->{d}, "ECC d test export_key_jwk as hash");
|
|
199 |
my $jwk_tp = $ec->export_key_jwk_thumbprint('SHA256');
|
|
200 |
is($jwk_tp, $ec1_jwk_thumbprint_sha256, 'export_key_jwk_thumbprint(SHA256)');
|
189 | 201 |
### jwk re-import private key
|
190 | 202 |
$ec->import_key(\$jwk);
|
191 | 203 |
$kh = $ec->key2hash;
|
|
194 | 206 |
is($kh->{k}, $EC1->{k}, "EC k test JWK1");
|
195 | 207 |
is($kh->{curve_name}, "secp256r1", "EC curve test JWK1");
|
196 | 208 |
ok($ec->is_private, "EC private test JWK1");
|
|
209 |
$jwk_tp = $ec->export_key_jwk_thumbprint('SHA256');
|
|
210 |
is($jwk_tp, $ec1_jwk_thumbprint_sha256, 'export_key_jwk_thumbprint(SHA256)');
|
197 | 211 |
### jwk re-import public key
|
198 | 212 |
$ec->import_key(\$jwkp);
|
199 | 213 |
$kh = $ec->key2hash;
|
|
202 | 216 |
is($kh->{k}, "", "EC k test JWK2");
|
203 | 217 |
is($kh->{curve_name}, "secp256r1", "EC curve test JWK2");
|
204 | 218 |
ok(!$ec->is_private, "EC !private test JWK2");
|
|
219 |
$jwk_tp = $ec->export_key_jwk_thumbprint('SHA256');
|
|
220 |
is($jwk_tp, $ec1_jwk_thumbprint_sha256, 'export_key_jwk_thumbprint(SHA256)');
|
205 | 221 |
}
|
206 | 222 |
|
207 | 223 |
{
|