Skip to content

Commit 57bfd0c

Browse files
committed
Improve ecc_recover_key()
It is already nearly independent of `LTC_DER`, so simply `#ifdef` that code path instead of multiplying the APIs by the number of signature formats. Signed-off-by: Steffen Jaeckel <[email protected]>
1 parent dcddfe6 commit 57bfd0c

File tree

1 file changed

+12
-13
lines changed

1 file changed

+12
-13
lines changed

src/pk/ecc/ecc_recover_key.c

+12-13
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@
33

44
#include "tomcrypt_private.h"
55

6-
#if defined(LTC_MECC) && defined(LTC_DER)
7-
8-
#ifdef LTC_ECC_SHAMIR
6+
#if defined(LTC_MECC) && defined(LTC_ECC_SHAMIR)
97

108
/**
119
@file ecc_recover_key.c
@@ -67,14 +65,7 @@ int ecc_recover_key(const unsigned char *sig, unsigned long siglen,
6765
goto error;
6866
}
6967

70-
if (sigformat == LTC_ECCSIG_ANSIX962) {
71-
/* ANSI X9.62 format - ASN.1 encoded SEQUENCE{ INTEGER(r), INTEGER(s) } */
72-
if ((err = der_decode_sequence_multi_ex(sig, siglen, LTC_DER_SEQ_SEQUENCE | LTC_DER_SEQ_STRICT,
73-
LTC_ASN1_INTEGER, 1UL, r,
74-
LTC_ASN1_INTEGER, 1UL, s,
75-
LTC_ASN1_EOL, 0UL, LTC_NULL)) != CRYPT_OK) { goto error; }
76-
}
77-
else if (sigformat == LTC_ECCSIG_RFC7518) {
68+
if (sigformat == LTC_ECCSIG_RFC7518) {
7869
/* RFC7518 format - raw (r,s) */
7970
i = ltc_mp_unsigned_bin_size(key->dp.order);
8071
if (siglen != (2*i)) {
@@ -105,6 +96,15 @@ int ecc_recover_key(const unsigned char *sig, unsigned long siglen,
10596
if ((err = ltc_mp_read_unsigned_bin(r, sig, 32)) != CRYPT_OK) { goto error; }
10697
if ((err = ltc_mp_read_unsigned_bin(s, sig+32, 32)) != CRYPT_OK) { goto error; }
10798
}
99+
#ifdef LTC_DER
100+
else if (sigformat == LTC_ECCSIG_ANSIX962) {
101+
/* ANSI X9.62 format - ASN.1 encoded SEQUENCE{ INTEGER(r), INTEGER(s) } */
102+
if ((err = der_decode_sequence_multi_ex(sig, siglen, LTC_DER_SEQ_SEQUENCE | LTC_DER_SEQ_STRICT,
103+
LTC_ASN1_INTEGER, 1UL, r,
104+
LTC_ASN1_INTEGER, 1UL, s,
105+
LTC_ASN1_EOL, 0UL, LTC_NULL)) != CRYPT_OK) { goto error; }
106+
}
107+
#endif
108108
#ifdef LTC_SSH
109109
else if (sigformat == LTC_ECCSIG_RFC5656) {
110110
char name[64], name2[64];
@@ -116,7 +116,7 @@ int ecc_recover_key(const unsigned char *sig, unsigned long siglen,
116116
LTC_SSHDATA_STRING, name, &namelen,
117117
LTC_SSHDATA_MPINT, r,
118118
LTC_SSHDATA_MPINT, s,
119-
LTC_SSHDATA_EOL, NULL)) != CRYPT_OK) { goto error; }
119+
LTC_SSHDATA_EOL, LTC_NULL)) != CRYPT_OK) { goto error; }
120120

121121

122122
/* Check curve matches identifier string */
@@ -257,4 +257,3 @@ int ecc_recover_key(const unsigned char *sig, unsigned long siglen,
257257
}
258258

259259
#endif
260-
#endif

0 commit comments

Comments
 (0)