Codebase list libcryptx-perl / db018d4
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
2 changed file(s) with 14 addition(s) and 2 deletion(s). Raw diff Collapse all Expand all
144144 }
145145 /* =====> curve_... */
146146 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);
148147 not_used = hv_store(rv_hash, "curve_prime", 11, newSVpv(self->key.dp->prime, strlen(self->key.dp->prime)), 0);
149148 not_used = hv_store(rv_hash, "curve_A", 7, newSVpv(self->key.dp->A, strlen(self->key.dp->A)), 0);
150149 not_used = hv_store(rv_hash, "curve_B", 7, newSVpv(self->key.dp->B, strlen(self->key.dp->B)), 0);
160159 not_used = hv_store(rv_hash, "curve_bits", 10, newSViv(mp_count_bits(&p_num)), 0);
161160 mp_clear(&p_num);
162161 }
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 }
163173 }
164174 /* =====> size */
165175 not_used = hv_store(rv_hash, "size", 4, newSViv(ecc_get_size(&self->key)), 0);
00 use strict;
11 use warnings;
2 use Test::More tests => 91;
2 use Test::More tests => 95;
33
44 use Crypt::PK::ECC qw(ecc_encrypt ecc_decrypt ecc_sign_message ecc_verify_message ecc_sign_hash ecc_verify_hash ecc_shared_secret);
55
127127 is($k->size, 32, "size $priv");
128128 is(uc($k->key2hash->{pub_x}), 'A01532A3C0900053DE60FBEFEFCCA58793301598D308B41E6F4E364E388C2711', "key2hash $priv");
129129 is(uc($k->curve2hash->{prime}), 'FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF', "curve2hash $priv");
130 is($k->key2hash->{curve_name}, "secp256r1", "EC curve_name is lowercase");
130131 }
131132
132133 for my $pub (qw/openssl_ec-short.pub.pem openssl_ec-short.pub.der/) {
135136 ok(!$k->is_private, "is_private $pub");
136137 is($k->size, 32, "$pub size");
137138 is(uc($k->key2hash->{pub_x}), 'A01532A3C0900053DE60FBEFEFCCA58793301598D308B41E6F4E364E388C2711', "key2hash $pub");
139 is($k->key2hash->{curve_name}, "secp256r1", "EC curve_name is lowercase");
138140 }