mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-11-04 04:32:24 -05:00 
			
		
		
		
	Add rsa_rsassa_pss_verify_ext()
This commit is contained in:
		
							parent
							
								
									920e1cd5e2
								
							
						
					
					
						commit
						5ec628a2b9
					
				@ -65,6 +65,8 @@
 | 
			
		||||
#define RSA_SIGN        1
 | 
			
		||||
#define RSA_CRYPT       2
 | 
			
		||||
 | 
			
		||||
#define RSA_SALT_LEN_ANY    -1
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The above constants may be used even if the RSA module is compile out,
 | 
			
		||||
 * eg for alternative (PKCS#11) RSA implemenations in the PK layers.
 | 
			
		||||
@ -544,6 +546,7 @@ int rsa_rsassa_pkcs1_v15_verify( rsa_context *ctx,
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief          Perform a PKCS#1 v2.1 PSS verification (RSASSA-PSS-VERIFY)
 | 
			
		||||
 *                 (This is the "simple" version.)
 | 
			
		||||
 *
 | 
			
		||||
 * \param ctx      points to an RSA public key
 | 
			
		||||
 * \param f_rng    RNG function (Only needed for RSA_PRIVATE)
 | 
			
		||||
@ -575,6 +578,41 @@ int rsa_rsassa_pss_verify( rsa_context *ctx,
 | 
			
		||||
                           const unsigned char *hash,
 | 
			
		||||
                           const unsigned char *sig );
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief          Perform a PKCS#1 v2.1 PSS verification (RSASSA-PSS-VERIFY)
 | 
			
		||||
 *                 (This is the version with "full" options.)
 | 
			
		||||
 *
 | 
			
		||||
 * \param ctx      points to an RSA public key
 | 
			
		||||
 * \param f_rng    RNG function (Only needed for RSA_PRIVATE)
 | 
			
		||||
 * \param p_rng    RNG parameter
 | 
			
		||||
 * \param mode     RSA_PUBLIC or RSA_PRIVATE
 | 
			
		||||
 * \param md_alg   a POLARSSL_MD_* (use POLARSSL_MD_NONE for signing raw data)
 | 
			
		||||
 * \param hashlen  message digest length (for POLARSSL_MD_NONE only)
 | 
			
		||||
 * \param hash     buffer holding the message digest
 | 
			
		||||
 * \param mgf1_hash_id message digest used for mask generation
 | 
			
		||||
 * \param expected_salt_len Length of the salt used in padding, use
 | 
			
		||||
 *                 RSA_SALT_LEN_ANY to accept any salt length
 | 
			
		||||
 * \param sig      buffer holding the ciphertext
 | 
			
		||||
 *
 | 
			
		||||
 * \return         0 if the verify operation was successful,
 | 
			
		||||
 *                 or an POLARSSL_ERR_RSA_XXX error code
 | 
			
		||||
 *
 | 
			
		||||
 * \note           The "sig" buffer must be as large as the size
 | 
			
		||||
 *                 of ctx->N (eg. 128 bytes if RSA-1024 is used).
 | 
			
		||||
 *
 | 
			
		||||
 * \note           The hash_id in the RSA context is ignored.
 | 
			
		||||
 */
 | 
			
		||||
int rsa_rsassa_pss_verify_ext( rsa_context *ctx,
 | 
			
		||||
                               int (*f_rng)(void *, unsigned char *, size_t),
 | 
			
		||||
                               void *p_rng,
 | 
			
		||||
                               int mode,
 | 
			
		||||
                               md_type_t md_alg,
 | 
			
		||||
                               unsigned int hashlen,
 | 
			
		||||
                               const unsigned char *hash,
 | 
			
		||||
                               md_type_t mgf1_hash_id,
 | 
			
		||||
                               int expected_salt_len,
 | 
			
		||||
                               const unsigned char *sig );
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief          Copy the components of an RSA context
 | 
			
		||||
 *
 | 
			
		||||
 | 
			
		||||
@ -1106,13 +1106,15 @@ int rsa_pkcs1_sign( rsa_context *ctx,
 | 
			
		||||
/*
 | 
			
		||||
 * Implementation of the PKCS#1 v2.1 RSASSA-PSS-VERIFY function
 | 
			
		||||
 */
 | 
			
		||||
int rsa_rsassa_pss_verify( rsa_context *ctx,
 | 
			
		||||
int rsa_rsassa_pss_verify_ext( rsa_context *ctx,
 | 
			
		||||
                               int (*f_rng)(void *, unsigned char *, size_t),
 | 
			
		||||
                               void *p_rng,
 | 
			
		||||
                               int mode,
 | 
			
		||||
                               md_type_t md_alg,
 | 
			
		||||
                               unsigned int hashlen,
 | 
			
		||||
                               const unsigned char *hash,
 | 
			
		||||
                               md_type_t mgf1_hash_id,
 | 
			
		||||
                               int expected_salt_len,
 | 
			
		||||
                               const unsigned char *sig )
 | 
			
		||||
{
 | 
			
		||||
    int ret;
 | 
			
		||||
@ -1157,13 +1159,12 @@ int rsa_rsassa_pss_verify( rsa_context *ctx,
 | 
			
		||||
        hashlen = md_get_size( md_info );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    md_info = md_info_from_type( ctx->hash_id != POLARSSL_MD_NONE ?
 | 
			
		||||
                                 ctx->hash_id : md_alg );
 | 
			
		||||
    md_info = md_info_from_type( mgf1_hash_id );
 | 
			
		||||
    if( md_info == NULL )
 | 
			
		||||
        return( POLARSSL_ERR_RSA_BAD_INPUT_DATA );
 | 
			
		||||
 | 
			
		||||
    hlen = md_get_size( md_info );
 | 
			
		||||
    slen = siglen - hlen - 1;
 | 
			
		||||
    slen = siglen - hlen - 1; /* Currently length of salt + padding */
 | 
			
		||||
 | 
			
		||||
    memset( zeros, 0, 8 );
 | 
			
		||||
 | 
			
		||||
@ -1197,8 +1198,15 @@ int rsa_rsassa_pss_verify( rsa_context *ctx,
 | 
			
		||||
        return( POLARSSL_ERR_RSA_INVALID_PADDING );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Actual salt len */
 | 
			
		||||
    slen -= p - buf;
 | 
			
		||||
 | 
			
		||||
    if( expected_salt_len != RSA_SALT_LEN_ANY &&
 | 
			
		||||
        slen != (size_t) expected_salt_len )
 | 
			
		||||
    {
 | 
			
		||||
        return( POLARSSL_ERR_RSA_INVALID_PADDING );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Generate H = Hash( M' )
 | 
			
		||||
    //
 | 
			
		||||
    md_starts( &md_ctx );
 | 
			
		||||
@ -1214,6 +1222,29 @@ int rsa_rsassa_pss_verify( rsa_context *ctx,
 | 
			
		||||
    else
 | 
			
		||||
        return( POLARSSL_ERR_RSA_VERIFY_FAILED );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Simplified PKCS#1 v2.1 RSASSA-PSS-VERIFY function
 | 
			
		||||
 */
 | 
			
		||||
int rsa_rsassa_pss_verify( rsa_context *ctx,
 | 
			
		||||
                           int (*f_rng)(void *, unsigned char *, size_t),
 | 
			
		||||
                           void *p_rng,
 | 
			
		||||
                           int mode,
 | 
			
		||||
                           md_type_t md_alg,
 | 
			
		||||
                           unsigned int hashlen,
 | 
			
		||||
                           const unsigned char *hash,
 | 
			
		||||
                           const unsigned char *sig )
 | 
			
		||||
{
 | 
			
		||||
    md_type_t mgf1_hash_id = ( ctx->hash_id != POLARSSL_MD_NONE )
 | 
			
		||||
                             ? ctx->hash_id
 | 
			
		||||
                             : md_alg;
 | 
			
		||||
 | 
			
		||||
    return( rsa_rsassa_pss_verify_ext( ctx, f_rng, p_rng, mode,
 | 
			
		||||
                                       md_alg, hashlen, hash,
 | 
			
		||||
                                       mgf1_hash_id, RSA_SALT_LEN_ANY,
 | 
			
		||||
                                       sig ) );
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif /* POLARSSL_PKCS1_V21 */
 | 
			
		||||
 | 
			
		||||
#if defined(POLARSSL_PKCS1_V15)
 | 
			
		||||
 | 
			
		||||
@ -739,3 +739,51 @@ pkcs1_rsassa_pss_sign:2048:16:"cfd50283feeeb97f6f08d73cbc7b3836f82bbcd499479f5e6
 | 
			
		||||
RSASSA-PSS Signature Example 10_6 (verify)
 | 
			
		||||
pkcs1_rsassa_pss_verify:2048:16:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":16:"010001":POLARSSL_MD_SHA1:POLARSSL_MD_SHA1:"25f10895a87716c137450bb9519dfaa1f207faa942ea88abf71e9c17980085b555aebab76264ae2a3ab93c2d12981191ddac6fb5949eb36aee3c5da940f00752c916d94608fa7d97ba6a2915b688f20323d4e9d96801d89a72ab5892dc2117c07434fcf972e058cf8c41ca4b4ff554f7d5068ad3155fced0f3125bc04f9193378a8f5c4c3b8cb4dd6d1cc69d30ecca6eaa51e36a05730e9e342e855baf099defb8afd7":"ad8b1523703646224b660b550885917ca2d1df28":"6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f":0
 | 
			
		||||
 | 
			
		||||
RSASSA-PSS Signature verify options #1 (OK)
 | 
			
		||||
pkcs1_rsassa_pss_verify_ext:2048:16:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":16:"010001":POLARSSL_MD_SHA1:POLARSSL_MD_SHA1:POLARSSL_MD_SHA1:20:"25f10895a87716c137450bb9519dfaa1f207faa942ea88abf71e9c17980085b555aebab76264ae2a3ab93c2d12981191ddac6fb5949eb36aee3c5da940f00752c916d94608fa7d97ba6a2915b688f20323d4e9d96801d89a72ab5892dc2117c07434fcf972e058cf8c41ca4b4ff554f7d5068ad3155fced0f3125bc04f9193378a8f5c4c3b8cb4dd6d1cc69d30ecca6eaa51e36a05730e9e342e855baf099defb8afd7":"6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f":0:0
 | 
			
		||||
 | 
			
		||||
RSASSA-PSS Signature verify options #2 (ctx_hash none)
 | 
			
		||||
pkcs1_rsassa_pss_verify_ext:2048:16:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":16:"010001":POLARSSL_MD_SHA1:POLARSSL_MD_NONE:POLARSSL_MD_SHA1:20:"25f10895a87716c137450bb9519dfaa1f207faa942ea88abf71e9c17980085b555aebab76264ae2a3ab93c2d12981191ddac6fb5949eb36aee3c5da940f00752c916d94608fa7d97ba6a2915b688f20323d4e9d96801d89a72ab5892dc2117c07434fcf972e058cf8c41ca4b4ff554f7d5068ad3155fced0f3125bc04f9193378a8f5c4c3b8cb4dd6d1cc69d30ecca6eaa51e36a05730e9e342e855baf099defb8afd7":"6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f":0:0
 | 
			
		||||
 | 
			
		||||
RSASSA-PSS Signature verify options #3 (ctx_hash diverging)
 | 
			
		||||
depends_on:POLARSSL_SHA256_C
 | 
			
		||||
pkcs1_rsassa_pss_verify_ext:2048:16:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":16:"010001":POLARSSL_MD_SHA1:POLARSSL_MD_SHA256:POLARSSL_MD_SHA1:20:"25f10895a87716c137450bb9519dfaa1f207faa942ea88abf71e9c17980085b555aebab76264ae2a3ab93c2d12981191ddac6fb5949eb36aee3c5da940f00752c916d94608fa7d97ba6a2915b688f20323d4e9d96801d89a72ab5892dc2117c07434fcf972e058cf8c41ca4b4ff554f7d5068ad3155fced0f3125bc04f9193378a8f5c4c3b8cb4dd6d1cc69d30ecca6eaa51e36a05730e9e342e855baf099defb8afd7":"6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f":POLARSSL_ERR_RSA_INVALID_PADDING:0
 | 
			
		||||
 | 
			
		||||
RSASSA-PSS Signature verify options #4 (mgf1_hash diverging)
 | 
			
		||||
depends_on:POLARSSL_SHA256_C
 | 
			
		||||
pkcs1_rsassa_pss_verify_ext:2048:16:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":16:"010001":POLARSSL_MD_SHA1:POLARSSL_MD_SHA1:POLARSSL_MD_SHA256:20:"25f10895a87716c137450bb9519dfaa1f207faa942ea88abf71e9c17980085b555aebab76264ae2a3ab93c2d12981191ddac6fb5949eb36aee3c5da940f00752c916d94608fa7d97ba6a2915b688f20323d4e9d96801d89a72ab5892dc2117c07434fcf972e058cf8c41ca4b4ff554f7d5068ad3155fced0f3125bc04f9193378a8f5c4c3b8cb4dd6d1cc69d30ecca6eaa51e36a05730e9e342e855baf099defb8afd7":"6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f":0:POLARSSL_ERR_RSA_INVALID_PADDING
 | 
			
		||||
 | 
			
		||||
RSASSA-PSS Signature verify options #5 (wrong msg_hash)
 | 
			
		||||
depends_on:POLARSSL_SHA256_C
 | 
			
		||||
pkcs1_rsassa_pss_verify_ext:2048:16:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":16:"010001":POLARSSL_MD_SHA256:POLARSSL_MD_SHA1:POLARSSL_MD_SHA1:20:"25f10895a87716c137450bb9519dfaa1f207faa942ea88abf71e9c17980085b555aebab76264ae2a3ab93c2d12981191ddac6fb5949eb36aee3c5da940f00752c916d94608fa7d97ba6a2915b688f20323d4e9d96801d89a72ab5892dc2117c07434fcf972e058cf8c41ca4b4ff554f7d5068ad3155fced0f3125bc04f9193378a8f5c4c3b8cb4dd6d1cc69d30ecca6eaa51e36a05730e9e342e855baf099defb8afd7":"6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f":POLARSSL_ERR_RSA_VERIFY_FAILED:POLARSSL_ERR_RSA_VERIFY_FAILED
 | 
			
		||||
 | 
			
		||||
RSASSA-PSS Signature verify options #6 (wrong expected_salt_len)
 | 
			
		||||
pkcs1_rsassa_pss_verify_ext:2048:16:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":16:"010001":POLARSSL_MD_SHA1:POLARSSL_MD_SHA1:POLARSSL_MD_SHA1:21:"25f10895a87716c137450bb9519dfaa1f207faa942ea88abf71e9c17980085b555aebab76264ae2a3ab93c2d12981191ddac6fb5949eb36aee3c5da940f00752c916d94608fa7d97ba6a2915b688f20323d4e9d96801d89a72ab5892dc2117c07434fcf972e058cf8c41ca4b4ff554f7d5068ad3155fced0f3125bc04f9193378a8f5c4c3b8cb4dd6d1cc69d30ecca6eaa51e36a05730e9e342e855baf099defb8afd7":"6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f":0:POLARSSL_ERR_RSA_INVALID_PADDING
 | 
			
		||||
 | 
			
		||||
RSASSA-PSS Signature verify options #7 (wrong expected_salt_len)
 | 
			
		||||
pkcs1_rsassa_pss_verify_ext:2048:16:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":16:"010001":POLARSSL_MD_SHA1:POLARSSL_MD_SHA1:POLARSSL_MD_SHA1:19:"25f10895a87716c137450bb9519dfaa1f207faa942ea88abf71e9c17980085b555aebab76264ae2a3ab93c2d12981191ddac6fb5949eb36aee3c5da940f00752c916d94608fa7d97ba6a2915b688f20323d4e9d96801d89a72ab5892dc2117c07434fcf972e058cf8c41ca4b4ff554f7d5068ad3155fced0f3125bc04f9193378a8f5c4c3b8cb4dd6d1cc69d30ecca6eaa51e36a05730e9e342e855baf099defb8afd7":"6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f":0:POLARSSL_ERR_RSA_INVALID_PADDING
 | 
			
		||||
 | 
			
		||||
RSASSA-PSS Signature verify options #8 (non-default salt_len: max)
 | 
			
		||||
depends_on:POLARSSL_SHA256_C
 | 
			
		||||
pkcs1_rsassa_pss_verify_ext:1024:16:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":16:"010001":POLARSSL_MD_SHA256:POLARSSL_MD_SHA256:POLARSSL_MD_SHA256:94:"54657374206d657373616765":"0d2bdb0456a3d651d5bd48a4204493898f72cf1aaddd71387cc058bc3f4c235ea6be4010fd61b28e1fbb275462b53775c04be9022d38b6a2e0387dddba86a3f8554d2858044a59fddbd594753fc056fe33c8daddb85dc70d164690b1182209ff84824e0be10e35c379f2f378bf176a9f7cb94d95e44d90276a298c8810f741c9":0:0
 | 
			
		||||
 | 
			
		||||
RSASSA-PSS Signature verify options #9 (non-default salt_len: 0)
 | 
			
		||||
depends_on:POLARSSL_SHA256_C
 | 
			
		||||
pkcs1_rsassa_pss_verify_ext:1024:16:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":16:"010001":POLARSSL_MD_SHA256:POLARSSL_MD_SHA256:POLARSSL_MD_SHA256:0:"54657374206d657373616765":"7fc506d26ca3b22922a1ce39faaedd273161b82d9443c56f1a034f131ae4a18cae1474271cb4b66a17d9707ca58b0bdbd3c406b7e65bbcc9bbbce94dc45de807b4989b23b3e4db74ca29298137837eb90cc83d3219249bc7d480fceaf075203a86e54c4ecfa4e312e39f8f69d76534089a36ed9049ca9cfd5ab1db1fa75fe5c8":0:0
 | 
			
		||||
 | 
			
		||||
RSASSA-PSS Signature verify options #10 (non-default salt_len: 0, ANY)
 | 
			
		||||
depends_on:POLARSSL_SHA256_C
 | 
			
		||||
pkcs1_rsassa_pss_verify_ext:1024:16:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":16:"010001":POLARSSL_MD_SHA256:POLARSSL_MD_SHA256:POLARSSL_MD_SHA256:RSA_SALT_LEN_ANY:"54657374206d657373616765":"7fc506d26ca3b22922a1ce39faaedd273161b82d9443c56f1a034f131ae4a18cae1474271cb4b66a17d9707ca58b0bdbd3c406b7e65bbcc9bbbce94dc45de807b4989b23b3e4db74ca29298137837eb90cc83d3219249bc7d480fceaf075203a86e54c4ecfa4e312e39f8f69d76534089a36ed9049ca9cfd5ab1db1fa75fe5c8":0:0
 | 
			
		||||
 | 
			
		||||
RSASSA-PSS Signature verify options #11 (MGF1 alg != MSG hash alg)
 | 
			
		||||
depends_on:POLARSSL_SHA256_C
 | 
			
		||||
pkcs1_rsassa_pss_verify_ext:1024:16:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":16:"010001":POLARSSL_MD_NONE:POLARSSL_MD_SHA256:POLARSSL_MD_SHA256:RSA_SALT_LEN_ANY:"c0719e9a8d5d838d861dc6f675c899d2b309a3a65bb9fe6b11e5afcbf9a2c0b1":"7fc506d26ca3b22922a1ce39faaedd273161b82d9443c56f1a034f131ae4a18cae1474271cb4b66a17d9707ca58b0bdbd3c406b7e65bbcc9bbbce94dc45de807b4989b23b3e4db74ca29298137837eb90cc83d3219249bc7d480fceaf075203a86e54c4ecfa4e312e39f8f69d76534089a36ed9049ca9cfd5ab1db1fa75fe5c8":0:0
 | 
			
		||||
 | 
			
		||||
RSASSA-PSS Signature verify options #12 (MGF1 alg != MSG hash alg, ctx wrong)
 | 
			
		||||
depends_on:POLARSSL_SHA256_C
 | 
			
		||||
pkcs1_rsassa_pss_verify_ext:1024:16:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":16:"010001":POLARSSL_MD_NONE:POLARSSL_MD_SHA1:POLARSSL_MD_SHA256:RSA_SALT_LEN_ANY:"c0719e9a8d5d838d861dc6f675c899d2b309a3a65bb9fe6b11e5afcbf9a2c0b1":"7fc506d26ca3b22922a1ce39faaedd273161b82d9443c56f1a034f131ae4a18cae1474271cb4b66a17d9707ca58b0bdbd3c406b7e65bbcc9bbbce94dc45de807b4989b23b3e4db74ca29298137837eb90cc83d3219249bc7d480fceaf075203a86e54c4ecfa4e312e39f8f69d76534089a36ed9049ca9cfd5ab1db1fa75fe5c8":POLARSSL_ERR_RSA_INVALID_PADDING:0
 | 
			
		||||
 | 
			
		||||
RSASSA-PSS Signature verify options #13 (MGF1 alg != MSG hash alg, arg wrong)
 | 
			
		||||
depends_on:POLARSSL_SHA256_C
 | 
			
		||||
pkcs1_rsassa_pss_verify_ext:1024:16:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":16:"010001":POLARSSL_MD_NONE:POLARSSL_MD_SHA256:POLARSSL_MD_SHA1:RSA_SALT_LEN_ANY:"c0719e9a8d5d838d861dc6f675c899d2b309a3a65bb9fe6b11e5afcbf9a2c0b1":"7fc506d26ca3b22922a1ce39faaedd273161b82d9443c56f1a034f131ae4a18cae1474271cb4b66a17d9707ca58b0bdbd3c406b7e65bbcc9bbbce94dc45de807b4989b23b3e4db74ca29298137837eb90cc83d3219249bc7d480fceaf075203a86e54c4ecfa4e312e39f8f69d76534089a36ed9049ca9cfd5ab1db1fa75fe5c8":0:POLARSSL_ERR_RSA_INVALID_PADDING
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -210,3 +210,59 @@ void pkcs1_rsassa_pss_verify( int mod, int radix_N, char *input_N, int radix_E,
 | 
			
		||||
    rsa_free( &ctx );
 | 
			
		||||
}
 | 
			
		||||
/* END_CASE */
 | 
			
		||||
 | 
			
		||||
/* BEGIN_CASE */
 | 
			
		||||
void pkcs1_rsassa_pss_verify_ext( int mod,
 | 
			
		||||
                                  int radix_N, char *input_N,
 | 
			
		||||
                                  int radix_E, char *input_E,
 | 
			
		||||
                                  int msg_digest_id, int ctx_hash,
 | 
			
		||||
                                  int mgf_hash, int salt_len,
 | 
			
		||||
                                  char *message_hex_string,
 | 
			
		||||
                                  char *result_hex_str,
 | 
			
		||||
                                  int result_simple,
 | 
			
		||||
                                  int result_full )
 | 
			
		||||
{
 | 
			
		||||
    unsigned char message_str[1000];
 | 
			
		||||
    unsigned char hash_result[1000];
 | 
			
		||||
    unsigned char result_str[1000];
 | 
			
		||||
    rsa_context ctx;
 | 
			
		||||
    size_t msg_len, hash_len;
 | 
			
		||||
 | 
			
		||||
    rsa_init( &ctx, RSA_PKCS_V21, ctx_hash );
 | 
			
		||||
    memset( message_str, 0x00, 1000 );
 | 
			
		||||
    memset( hash_result, 0x00, 1000 );
 | 
			
		||||
    memset( result_str, 0x00, 1000 );
 | 
			
		||||
 | 
			
		||||
    ctx.len = mod / 8 + ( ( mod % 8 ) ? 1 : 0 );
 | 
			
		||||
    TEST_ASSERT( mpi_read_string( &ctx.N, radix_N, input_N ) == 0 );
 | 
			
		||||
    TEST_ASSERT( mpi_read_string( &ctx.E, radix_E, input_E ) == 0 );
 | 
			
		||||
 | 
			
		||||
    TEST_ASSERT( rsa_check_pubkey( &ctx ) == 0 );
 | 
			
		||||
 | 
			
		||||
    msg_len = unhexify( message_str, message_hex_string );
 | 
			
		||||
    unhexify( result_str, result_hex_str );
 | 
			
		||||
 | 
			
		||||
    if( msg_digest_id != POLARSSL_MD_NONE )
 | 
			
		||||
    {
 | 
			
		||||
        TEST_ASSERT( md( md_info_from_type( msg_digest_id ),
 | 
			
		||||
                     message_str, msg_len, hash_result ) == 0 );
 | 
			
		||||
        hash_len = 0;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        memcpy( hash_result, message_str, msg_len );
 | 
			
		||||
        hash_len = msg_len;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    TEST_ASSERT( rsa_pkcs1_verify( &ctx, NULL, NULL, RSA_PUBLIC,
 | 
			
		||||
                                   msg_digest_id, hash_len, hash_result,
 | 
			
		||||
                                   result_str ) == result_simple );
 | 
			
		||||
 | 
			
		||||
    TEST_ASSERT( rsa_rsassa_pss_verify_ext( &ctx, NULL, NULL, RSA_PUBLIC,
 | 
			
		||||
                                        msg_digest_id, hash_len, hash_result,
 | 
			
		||||
                                        mgf_hash, salt_len,
 | 
			
		||||
                                        result_str ) == result_full );
 | 
			
		||||
 | 
			
		||||
    rsa_free( &ctx );
 | 
			
		||||
}
 | 
			
		||||
/* END_CASE */
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user