Make LMS verification return VERIFY_FAILED more
To align with PSA error code rules on when VERIFY_FAILED is returned vs
INVALID_ARGUMENT
Signed-off-by: Raef Coles <raef.coles@arm.com>
diff --git a/library/lmots.c b/library/lmots.c
index 8ffadb8..97325aa 100644
--- a/library/lmots.c
+++ b/library/lmots.c
@@ -565,7 +565,7 @@
NULL );
if( ret )
{
- return( ret );
+ return( MBEDTLS_ERR_LMS_VERIFY_FAILED );
}
if( memcmp( &Kc_public_key_candidate, ctx->public_key,
diff --git a/library/lms.c b/library/lms.c
index c115dac..de38c02 100644
--- a/library/lms.c
+++ b/library/lms.c
@@ -322,11 +322,6 @@
return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
}
- if( sig_size != MBEDTLS_LMS_SIG_LEN(ctx->params.type, ctx->params.otstype) )
- {
- return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
- }
-
if( ctx->params.type
!= MBEDTLS_LMS_SHA256_M32_H10 )
{
@@ -339,6 +334,16 @@
return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
}
+ if( sig_size != MBEDTLS_LMS_SIG_LEN(ctx->params.type, ctx->params.otstype) )
+ {
+ return( MBEDTLS_ERR_LMS_VERIFY_FAILED );
+ }
+
+ if( sig_size < SIG_OTS_SIG_OFFSET + MBEDTLS_LMOTS_TYPE_LEN )
+ {
+ return( MBEDTLS_ERR_LMS_VERIFY_FAILED );
+ }
+
if( mbedtls_lms_network_bytes_to_unsigned_int( MBEDTLS_LMOTS_TYPE_LEN,
sig + SIG_OTS_SIG_OFFSET + MBEDTLS_LMOTS_SIG_TYPE_OFFSET )
!= MBEDTLS_LMOTS_SHA256_N32_W8 )
@@ -346,6 +351,11 @@
return( MBEDTLS_ERR_LMS_VERIFY_FAILED );
}
+ if( sig_size < SIG_TYPE_OFFSET(ctx->params.otstype) + MBEDTLS_LMS_TYPE_LEN )
+ {
+ return( MBEDTLS_ERR_LMS_VERIFY_FAILED );
+ }
+
if( mbedtls_lms_network_bytes_to_unsigned_int( MBEDTLS_LMS_TYPE_LEN,
sig + SIG_TYPE_OFFSET(ctx->params.otstype))
!= MBEDTLS_LMS_SHA256_M32_H10 )
@@ -376,7 +386,7 @@
sizeof( Kc_candidate_ots_pub_key ), NULL );
if( ret != 0 )
{
- return( ret );
+ return( MBEDTLS_ERR_LMS_VERIFY_FAILED );
}
create_merkle_leaf_value(