introduce CRYPT_INPUT_TOO_LONG
This commit is contained in:
parent
13cb43ad4c
commit
4a8bfc0a21
@ -68,7 +68,8 @@ enum {
|
|||||||
CRYPT_OVERFLOW, /* An overflow of a value was detected/prevented */
|
CRYPT_OVERFLOW, /* An overflow of a value was detected/prevented */
|
||||||
|
|
||||||
CRYPT_UNUSED1, /* UNUSED1 */
|
CRYPT_UNUSED1, /* UNUSED1 */
|
||||||
CRYPT_UNUSED2, /* UNUSED2 */
|
|
||||||
|
CRYPT_INPUT_TOO_LONG, /* The input was longer than expected. */
|
||||||
|
|
||||||
CRYPT_PK_INVALID_SIZE, /* Invalid size input for PK parameters */
|
CRYPT_PK_INVALID_SIZE, /* Invalid size input for PK parameters */
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ static const crypt_constant _crypt_constants[] = {
|
|||||||
_C_STRINGIFY(CRYPT_PK_INVALID_TYPE),
|
_C_STRINGIFY(CRYPT_PK_INVALID_TYPE),
|
||||||
_C_STRINGIFY(CRYPT_OVERFLOW),
|
_C_STRINGIFY(CRYPT_OVERFLOW),
|
||||||
_C_STRINGIFY(CRYPT_UNUSED1),
|
_C_STRINGIFY(CRYPT_UNUSED1),
|
||||||
_C_STRINGIFY(CRYPT_UNUSED2),
|
_C_STRINGIFY(CRYPT_INPUT_TOO_LONG),
|
||||||
_C_STRINGIFY(CRYPT_PK_INVALID_SIZE),
|
_C_STRINGIFY(CRYPT_PK_INVALID_SIZE),
|
||||||
_C_STRINGIFY(CRYPT_INVALID_PRIME_SIZE),
|
_C_STRINGIFY(CRYPT_INVALID_PRIME_SIZE),
|
||||||
_C_STRINGIFY(CRYPT_PK_INVALID_PADDING),
|
_C_STRINGIFY(CRYPT_PK_INVALID_PADDING),
|
||||||
|
@ -47,7 +47,8 @@ static const char * const err_2_str[] =
|
|||||||
"An overflow of a value was detected/prevented.",
|
"An overflow of a value was detected/prevented.",
|
||||||
|
|
||||||
"UNUSED1.",
|
"UNUSED1.",
|
||||||
"UNUSED2.",
|
|
||||||
|
"The input was longer than expected.",
|
||||||
|
|
||||||
"Invalid sized parameter.",
|
"Invalid sized parameter.",
|
||||||
|
|
||||||
|
@ -314,7 +314,7 @@ int der_decode_sequence_ex(const unsigned char *in, unsigned long inlen,
|
|||||||
if (inlen == 0) {
|
if (inlen == 0) {
|
||||||
err = CRYPT_OK;
|
err = CRYPT_OK;
|
||||||
} else {
|
} else {
|
||||||
err = CRYPT_PK_INVALID_SIZE;
|
err = CRYPT_INPUT_TOO_LONG;
|
||||||
}
|
}
|
||||||
|
|
||||||
LBL_ERR:
|
LBL_ERR:
|
||||||
|
@ -32,14 +32,12 @@ int dh_import(const unsigned char *in, unsigned long inlen, dh_key *key)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
version = 666;
|
|
||||||
flags[0] = 0xff;
|
|
||||||
/* find out what type of key it is */
|
/* find out what type of key it is */
|
||||||
err = der_decode_sequence_multi(in, inlen,
|
err = der_decode_sequence_multi(in, inlen,
|
||||||
LTC_ASN1_SHORT_INTEGER, 1UL, &version,
|
LTC_ASN1_SHORT_INTEGER, 1UL, &version,
|
||||||
LTC_ASN1_BIT_STRING, 1UL, &flags,
|
LTC_ASN1_BIT_STRING, 1UL, &flags,
|
||||||
LTC_ASN1_EOL, 0UL, NULL);
|
LTC_ASN1_EOL, 0UL, NULL);
|
||||||
if (err != CRYPT_OK && err != CRYPT_PK_INVALID_SIZE) {
|
if (err != CRYPT_OK && err != CRYPT_INPUT_TOO_LONG) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ int dsa_decrypt_key(const unsigned char *in, unsigned long inlen,
|
|||||||
/* decode to find out hash */
|
/* decode to find out hash */
|
||||||
LTC_SET_ASN1(decode, 0, LTC_ASN1_OBJECT_IDENTIFIER, hashOID, sizeof(hashOID)/sizeof(hashOID[0]));
|
LTC_SET_ASN1(decode, 0, LTC_ASN1_OBJECT_IDENTIFIER, hashOID, sizeof(hashOID)/sizeof(hashOID[0]));
|
||||||
err = der_decode_sequence(in, inlen, decode, 1);
|
err = der_decode_sequence(in, inlen, decode, 1);
|
||||||
if (err != CRYPT_OK && err != CRYPT_PK_INVALID_SIZE) {
|
if (err != CRYPT_OK && err != CRYPT_INPUT_TOO_LONG) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,12 +38,11 @@ int dsa_import(const unsigned char *in, unsigned long inlen, dsa_key *key)
|
|||||||
return CRYPT_MEM;
|
return CRYPT_MEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
flags[0] = 0xff;
|
|
||||||
/* try to match the old libtomcrypt format */
|
/* try to match the old libtomcrypt format */
|
||||||
err = der_decode_sequence_multi(in, inlen, LTC_ASN1_BIT_STRING, 1UL, flags,
|
err = der_decode_sequence_multi(in, inlen, LTC_ASN1_BIT_STRING, 1UL, flags,
|
||||||
LTC_ASN1_EOL, 0UL, NULL);
|
LTC_ASN1_EOL, 0UL, NULL);
|
||||||
|
|
||||||
if (err == CRYPT_OK || err == CRYPT_PK_INVALID_SIZE) {
|
if (err == CRYPT_OK || err == CRYPT_INPUT_TOO_LONG) {
|
||||||
/* private key */
|
/* private key */
|
||||||
if (flags[0] == 1) {
|
if (flags[0] == 1) {
|
||||||
if ((err = der_decode_sequence_multi(in, inlen,
|
if ((err = der_decode_sequence_multi(in, inlen,
|
||||||
|
@ -54,7 +54,7 @@ int ecc_decrypt_key(const unsigned char *in, unsigned long inlen,
|
|||||||
/* decode to find out hash */
|
/* decode to find out hash */
|
||||||
LTC_SET_ASN1(decode, 0, LTC_ASN1_OBJECT_IDENTIFIER, hashOID, sizeof(hashOID)/sizeof(hashOID[0]));
|
LTC_SET_ASN1(decode, 0, LTC_ASN1_OBJECT_IDENTIFIER, hashOID, sizeof(hashOID)/sizeof(hashOID[0]));
|
||||||
err = der_decode_sequence(in, inlen, decode, 1);
|
err = der_decode_sequence(in, inlen, decode, 1);
|
||||||
if (err != CRYPT_OK && err != CRYPT_PK_INVALID_SIZE) {
|
if (err != CRYPT_OK && err != CRYPT_INPUT_TOO_LONG) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,11 +104,10 @@ int ecc_import_ex(const unsigned char *in, unsigned long inlen, ecc_key *key, co
|
|||||||
return CRYPT_MEM;
|
return CRYPT_MEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
flags[0] = 0xff;
|
|
||||||
/* find out what type of key it is */
|
/* find out what type of key it is */
|
||||||
err = der_decode_sequence_multi(in, inlen, LTC_ASN1_BIT_STRING, 1UL, flags,
|
err = der_decode_sequence_multi(in, inlen, LTC_ASN1_BIT_STRING, 1UL, flags,
|
||||||
LTC_ASN1_EOL, 0UL, NULL);
|
LTC_ASN1_EOL, 0UL, NULL);
|
||||||
if (err != CRYPT_OK && err != CRYPT_PK_INVALID_SIZE) {
|
if (err != CRYPT_OK && err != CRYPT_INPUT_TOO_LONG) {
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,12 +65,11 @@ int rsa_import(const unsigned char *in, unsigned long inlen, rsa_key *key)
|
|||||||
goto LBL_FREE;
|
goto LBL_FREE;
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_set_int(key->N, 666);
|
|
||||||
/* not SSL public key, try to match against PKCS #1 standards */
|
/* not SSL public key, try to match against PKCS #1 standards */
|
||||||
err = der_decode_sequence_multi(in, inlen, LTC_ASN1_INTEGER, 1UL, key->N,
|
err = der_decode_sequence_multi(in, inlen, LTC_ASN1_INTEGER, 1UL, key->N,
|
||||||
LTC_ASN1_EOL, 0UL, NULL);
|
LTC_ASN1_EOL, 0UL, NULL);
|
||||||
|
|
||||||
if (err != CRYPT_OK && err != CRYPT_PK_INVALID_SIZE) {
|
if (err != CRYPT_OK && err != CRYPT_INPUT_TOO_LONG) {
|
||||||
goto LBL_ERR;
|
goto LBL_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user