Specific return code for PK sig length mismatch
This commit is contained in:
parent
35e95ddca4
commit
2abed84225
5 changed files with 28 additions and 6 deletions
|
@ -308,6 +308,8 @@ void polarssl_strerror( int ret, char *buf, size_t buflen )
|
|||
snprintf( buf, buflen, "PK - Elliptic curve is unsupported (only NIST curves are supported)" );
|
||||
if( use_ret == -(POLARSSL_ERR_PK_FEATURE_UNAVAILABLE) )
|
||||
snprintf( buf, buflen, "PK - Unavailable feature, e.g. RSA disabled for RSA key" );
|
||||
if( use_ret == -(POLARSSL_ERR_PK_SIG_LEN_MISMATCH) )
|
||||
snprintf( buf, buflen, "PK - The signature is valid but its length is less than expected" );
|
||||
#endif /* POLARSSL_PK_C */
|
||||
|
||||
#if defined(POLARSSL_PKCS12_C)
|
||||
|
|
|
@ -64,11 +64,20 @@ static int rsa_verify_wrap( void *ctx, md_type_t md_alg,
|
|||
const unsigned char *hash, size_t hash_len,
|
||||
const unsigned char *sig, size_t sig_len )
|
||||
{
|
||||
if( sig_len != ((rsa_context *) ctx)->len )
|
||||
int ret;
|
||||
|
||||
if( sig_len < ((rsa_context *) ctx)->len )
|
||||
return( POLARSSL_ERR_RSA_VERIFY_FAILED );
|
||||
|
||||
return( rsa_pkcs1_verify( (rsa_context *) ctx, NULL, NULL,
|
||||
RSA_PUBLIC, md_alg, (unsigned int) hash_len, hash, sig ) );
|
||||
if( ( ret = rsa_pkcs1_verify( (rsa_context *) ctx, NULL, NULL,
|
||||
RSA_PUBLIC, md_alg,
|
||||
(unsigned int) hash_len, hash, sig ) ) != 0 )
|
||||
return( ret );
|
||||
|
||||
if( sig_len > ((rsa_context *) ctx)->len )
|
||||
return( POLARSSL_ERR_PK_SIG_LEN_MISMATCH );
|
||||
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
static int rsa_sign_wrap( void *ctx, md_type_t md_alg,
|
||||
|
@ -292,10 +301,16 @@ static int ecdsa_verify_wrap( void *ctx, md_type_t md_alg,
|
|||
const unsigned char *hash, size_t hash_len,
|
||||
const unsigned char *sig, size_t sig_len )
|
||||
{
|
||||
int ret;
|
||||
((void) md_alg);
|
||||
|
||||
return( ecdsa_read_signature( (ecdsa_context *) ctx,
|
||||
hash, hash_len, sig, sig_len ) );
|
||||
ret = ecdsa_read_signature( (ecdsa_context *) ctx,
|
||||
hash, hash_len, sig, sig_len );
|
||||
|
||||
if( ret == POLARSSL_ERR_ECP_SIG_LEN_MISMATCH )
|
||||
return( POLARSSL_ERR_PK_SIG_LEN_MISMATCH );
|
||||
|
||||
return( ret );
|
||||
}
|
||||
|
||||
static int ecdsa_sign_wrap( void *ctx, md_type_t md_alg,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue