Ensure Crypt::PK::ECC->key2hash()->{curve_name} is lowercase (#14)
Depending on how the ec key gets created or imported key2hash() either
returns the curve_name property either in lower- or uppercase.
The value is lowercase if the curve parameters are imported or set by
the user and uppercase if the name is directly returned from
libtomcrypt.
Since generate_key() expects the name in lowercase, we convert the value
to lowercase as well.
As a sideeffect this also avoids unneccessary curve parameter lookups in
Crypt::PK::ECC::_curve_name_lookup().
Manuel Mausz authored 7 years ago
karel-m committed 7 years ago
144 | 144 |
}
|
145 | 145 |
/* =====> curve_... */
|
146 | 146 |
if (self->key.dp) {
|
147 | |
not_used = hv_store(rv_hash, "curve_name", 10, newSVpv(self->key.dp->name, strlen(self->key.dp->name)), 0);
|
148 | 147 |
not_used = hv_store(rv_hash, "curve_prime", 11, newSVpv(self->key.dp->prime, strlen(self->key.dp->prime)), 0);
|
149 | 148 |
not_used = hv_store(rv_hash, "curve_A", 7, newSVpv(self->key.dp->A, strlen(self->key.dp->A)), 0);
|
150 | 149 |
not_used = hv_store(rv_hash, "curve_B", 7, newSVpv(self->key.dp->B, strlen(self->key.dp->B)), 0);
|
|
160 | 159 |
not_used = hv_store(rv_hash, "curve_bits", 10, newSViv(mp_count_bits(&p_num)), 0);
|
161 | 160 |
mp_clear(&p_num);
|
162 | 161 |
}
|
|
162 |
{
|
|
163 |
int i;
|
|
164 |
SV *name;
|
|
165 |
unsigned char *name_ptr;
|
|
166 |
STRLEN name_len;
|
|
167 |
|
|
168 |
name = newSVpv(self->key.dp->name, strlen(self->key.dp->name));
|
|
169 |
name_ptr = SvPV(name, name_len);
|
|
170 |
for (i=0; i<name_len && name_ptr[i]>0; i++) name_ptr[i] = toLOWER(name_ptr[i]);
|
|
171 |
not_used = hv_store(rv_hash, "curve_name", 10, name, 0);
|
|
172 |
}
|
163 | 173 |
}
|
164 | 174 |
/* =====> size */
|
165 | 175 |
not_used = hv_store(rv_hash, "size", 4, newSViv(ecc_get_size(&self->key)), 0);
|
0 | 0 |
use strict;
|
1 | 1 |
use warnings;
|
2 | |
use Test::More tests => 91;
|
|
2 |
use Test::More tests => 95;
|
3 | 3 |
|
4 | 4 |
use Crypt::PK::ECC qw(ecc_encrypt ecc_decrypt ecc_sign_message ecc_verify_message ecc_sign_hash ecc_verify_hash ecc_shared_secret);
|
5 | 5 |
|
|
127 | 127 |
is($k->size, 32, "size $priv");
|
128 | 128 |
is(uc($k->key2hash->{pub_x}), 'A01532A3C0900053DE60FBEFEFCCA58793301598D308B41E6F4E364E388C2711', "key2hash $priv");
|
129 | 129 |
is(uc($k->curve2hash->{prime}), 'FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF', "curve2hash $priv");
|
|
130 |
is($k->key2hash->{curve_name}, "secp256r1", "EC curve_name is lowercase");
|
130 | 131 |
}
|
131 | 132 |
|
132 | 133 |
for my $pub (qw/openssl_ec-short.pub.pem openssl_ec-short.pub.der/) {
|
|
135 | 136 |
ok(!$k->is_private, "is_private $pub");
|
136 | 137 |
is($k->size, 32, "$pub size");
|
137 | 138 |
is(uc($k->key2hash->{pub_x}), 'A01532A3C0900053DE60FBEFEFCCA58793301598D308B41E6F4E364E388C2711', "key2hash $pub");
|
|
139 |
is($k->key2hash->{curve_name}, "secp256r1", "EC curve_name is lowercase");
|
138 | 140 |
}
|