Skip to content

Commit da41c7a

Browse files
committed
argument checks before allocation
1 parent 3c9e3dd commit da41c7a

File tree

4 files changed

+20
-21
lines changed

4 files changed

+20
-21
lines changed

src/pk/ecc/ecc_sign_hash_eth27.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,18 @@ int ecc_sign_hash_eth27(const unsigned char *in, unsigned long inlen,
3434
LTC_ARGCHK(outlen != NULL);
3535
LTC_ARGCHK(key != NULL);
3636

37-
if ((err = mp_init_multi(&r, &s, NULL)) != CRYPT_OK) return err;
38-
if ((err = ecc_sign_hash_internal(in, inlen, r, s, prng, wprng, &recid, key)) != CRYPT_OK) goto error;
39-
4037
/* Only valid for secp256k1 - OID 1.3.132.0.10 */
4138
if (pk_oid_cmp_with_ulong("1.3.132.0.10", key->dp.oid, key->dp.oidlen) != CRYPT_OK) {
42-
err = CRYPT_ERROR;
43-
goto error;
39+
return CRYPT_ERROR;
4440
}
4541
if (*outlen < 65) {
46-
err = CRYPT_BUFFER_OVERFLOW;
4742
*outlen = 65;
48-
goto error;
43+
return CRYPT_BUFFER_OVERFLOW;
4944
}
45+
46+
if ((err = mp_init_multi(&r, &s, NULL)) != CRYPT_OK) return err;
47+
if ((err = ecc_sign_hash_internal(in, inlen, r, s, prng, wprng, &recid, key)) != CRYPT_OK) goto error;
48+
5049
zeromem(out, 65);
5150
*outlen = 65;
5251
i = mp_unsigned_bin_size(r);

src/pk/ecc/ecc_sign_hash_rfc5656.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,12 @@ int ecc_sign_hash_rfc5656(const unsigned char *in, unsigned long inlen,
3434
LTC_ARGCHK(out != NULL);
3535
LTC_ARGCHK(outlen != NULL);
3636

37+
/* Get identifier string */
38+
if ((err = ecc_ssh_ecdsa_encode_name(name, &namelen, key)) != CRYPT_OK) return err;
39+
3740
if ((err = mp_init_multi(&r, &s, NULL)) != CRYPT_OK) return err;
3841
if ((err = ecc_sign_hash_internal(in, inlen, r, s, prng, wprng, NULL, key)) != CRYPT_OK) goto error;
3942

40-
/* Get identifier string */
41-
if ((err = ecc_ssh_ecdsa_encode_name(name, &namelen, key)) != CRYPT_OK) goto error;
4243
/* Store as SSH data sequence, per RFC4251 */
4344
err = ssh_encode_sequence_multi(out, outlen,
4445
LTC_SSHDATA_STRING, name, namelen,

src/pk/ecc/ecc_sign_hash_rfc7518.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,16 @@ int ecc_sign_hash_rfc7518_ex(const unsigned char *in, unsigned long inlen,
3636
LTC_ARGCHK(outlen != NULL);
3737
LTC_ARGCHK(key != NULL);
3838

39-
if ((err = mp_init_multi(&r, &s, NULL)) != CRYPT_OK) return err;
40-
if ((err = ecc_sign_hash_internal(in, inlen, r, s, prng, wprng, recid, key)) != CRYPT_OK) goto error;
41-
4239
/* RFC7518 format - raw (r,s) */
4340
pbytes = mp_unsigned_bin_size(key->dp.order);
4441
if (*outlen < 2 * pbytes) {
45-
err = CRYPT_BUFFER_OVERFLOW;
4642
*outlen = 2 * pbytes;
47-
goto error;
43+
return CRYPT_BUFFER_OVERFLOW;
4844
}
45+
46+
if ((err = mp_init_multi(&r, &s, NULL)) != CRYPT_OK) return err;
47+
if ((err = ecc_sign_hash_internal(in, inlen, r, s, prng, wprng, recid, key)) != CRYPT_OK) goto error;
48+
4949
zeromem(out, 2 * pbytes);
5050
*outlen = 2 * pbytes;
5151
i = mp_unsigned_bin_size(r);

src/pk/ecc/ecc_verify_hash_eth27.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,16 @@ int ecc_verify_hash_eth27(const unsigned char *sig, unsigned long siglen,
3636
LTC_ARGCHK(sig != NULL);
3737
LTC_ARGCHK(key != NULL);
3838

39-
if ((err = mp_init_multi(&r, &s, NULL)) != CRYPT_OK) return err;
40-
4139
/* Only valid for secp256k1 - OID 1.3.132.0.10 */
4240
if (pk_oid_cmp_with_ulong("1.3.132.0.10", key->dp.oid, key->dp.oidlen) != CRYPT_OK) {
43-
err = CRYPT_ERROR;
44-
goto error;
41+
return CRYPT_ERROR;
4542
}
46-
if (siglen != 65) { /* Only secp256k1 curves use this format, so must be 65 bytes long */
47-
err = CRYPT_INVALID_PACKET;
48-
goto error;
43+
/* Only secp256k1 curves uses this format, so must be 65 bytes long */
44+
if (siglen != 65) {
45+
return CRYPT_INVALID_PACKET;
4946
}
47+
48+
if ((err = mp_init_multi(&r, &s, NULL)) != CRYPT_OK) return err;
5049
if ((err = mp_read_unsigned_bin(r, (unsigned char *)sig, 32)) != CRYPT_OK) goto error;
5150
if ((err = mp_read_unsigned_bin(s, (unsigned char *)sig + 32, 32)) != CRYPT_OK) goto error;
5251

0 commit comments

Comments
 (0)