ecc_set_key troubles
Karel Miko
5 years ago
27 | 27 |
|
28 | 28 |
len = inlen;
|
29 | 29 |
if ((err = der_decode_sequence_flexi(in, &len, &decoded_list)) == CRYPT_OK) {
|
|
30 |
err = CRYPT_ERROR;
|
30 | 31 |
l = decoded_list;
|
31 | 32 |
if (l->type == LTC_ASN1_SEQUENCE &&
|
32 | 33 |
l->child && l->child->type == LTC_ASN1_SEQUENCE) {
|
33 | |
err = CRYPT_ERROR;
|
34 | 34 |
l = l->child->child;
|
35 | 35 |
while (l) {
|
36 | 36 |
if (l->type == LTC_ASN1_SEQUENCE && l->data &&
|
23 | 23 |
a = key->dp.A;
|
24 | 24 |
b = key->dp.B;
|
25 | 25 |
|
26 | |
if (type == PK_PRIVATE && inlen <= (unsigned long)key->dp.size) {
|
|
26 |
if (type == PK_PRIVATE) {
|
27 | 27 |
/* load private key */
|
28 | 28 |
if ((err = mp_read_unsigned_bin(key->k, (unsigned char *)in, inlen)) != CRYPT_OK) {
|
29 | 29 |
goto error;
|
|
34 | 34 |
}
|
35 | 35 |
/* compute public key */
|
36 | 36 |
if ((err = ltc_mp.ecc_ptmul(key->k, &key->dp.base, &key->pubkey, a, prime, 1)) != CRYPT_OK) { goto error; }
|
37 | |
key->type = type;
|
38 | 37 |
}
|
39 | 38 |
else if (type == PK_PUBLIC) {
|
40 | 39 |
/* load public key */
|
41 | 40 |
if ((err = ltc_ecc_import_point(in, inlen, prime, a, b, key->pubkey.x, key->pubkey.y)) != CRYPT_OK) { goto error; }
|
42 | 41 |
if ((err = mp_set(key->pubkey.z, 1)) != CRYPT_OK) { goto error; }
|
43 | |
key->type = type;
|
44 | 42 |
}
|
45 | 43 |
else {
|
46 | 44 |
err = CRYPT_INVALID_PACKET;
|
|
52 | 50 |
goto error;
|
53 | 51 |
}
|
54 | 52 |
|
|
53 |
key->type = type;
|
55 | 54 |
return CRYPT_OK;
|
56 | 55 |
|
57 | 56 |
error:
|
0 | 0 |
use strict;
|
1 | 1 |
use warnings;
|
2 | 2 |
|
3 | |
use Test::More tests => 660;
|
|
3 |
use Test::More tests => 661;
|
4 | 4 |
use Crypt::PK::ECC;
|
5 | 5 |
|
6 | 6 |
my $data = [
|
|
87 | 87 |
ok( $ec_pub->verify_message(pack("H*", $h->{ECDSA_SHA1}), 'test-data', 'SHA1'), "$h->{PRI_FILE}/ECDSA_SHA1");
|
88 | 88 |
ok( $ec_pub->verify_message(pack("H*", $h->{ECDSA_SHA256}), 'test-data', 'SHA256'), "$h->{PRI_FILE}/ECDSA_SHA256");
|
89 | 89 |
}
|
|
90 |
|
|
91 |
### ecc_set_key bug
|
|
92 |
my $der = pack("H*", "3081be020101041500c78b055db0706fd86b5a15e14b9e51f0043d18f9a074307202010130200607".
|
|
93 |
"2a8648ce3d0101021500fffffffffffffffffffffffffffffffeffffac7330060401000401070429".
|
|
94 |
"043b4c382ce37aa192a4019e763036f4f5dd4d7ebb938cf935318fdced6bc28286531733c3f03c4f".
|
|
95 |
"ee02150100000000000000000001b8fa16dfab9aca16b6b3020101a12c032a00040ca9f03d79907c".
|
|
96 |
"97538177a3027970abefa351073a73120e1b5d2dab02dde37c118a44f8cb267b56");
|
|
97 |
my $pk = Crypt::PK::ECC->new(\$der);
|
|
98 |
ok($pk->is_private, "ecc_set_key bug");⏎
|