mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-11-04 04:32:24 -05:00 
			
		
		
		
	New algorithm PSA_ALG_RSA_PSS_ANY_SALT
This is a variant of PSA_ALG_RSA_PSS which currently has exactly the same behavior, but is intended to have a different behavior when verifying signatures. In a subsequent commit, PSA_ALG_RSA_PSS will change to requiring the salt length to be what it would produce when signing, as is currently documented, whereas PSA_ALG_RSA_PSS_ANY_SALT will retain the current behavior of allowing any salt length (including 0). Changes in this commit: * New algorithm constructor PSA_ALG_RSA_PSS_ANY_SALT. * New predicates PSA_ALG_IS_RSA_PSS_STANDARD_SALT (corresponding to PSA_ALG_RSA_PSS) and PSA_ALG_IS_RSA_PSS_ANY_SALT (corresponding to PSA_ALG_RSA_PSS_ANY_SALT). * Support for the new predicates in macro_collector.py (needed for generate_psa_constant_names). Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
This commit is contained in:
		
							parent
							
								
									8135cb9e07
								
							
						
					
					
						commit
						acd2d0e923
					
				@ -886,7 +886,7 @@
 | 
			
		||||
 * algorithm parametrized with any supported hash.
 | 
			
		||||
 *
 | 
			
		||||
 * That is, suppose that `PSA_xxx_SIGNATURE` is one of the following macros:
 | 
			
		||||
 * - #PSA_ALG_RSA_PKCS1V15_SIGN, #PSA_ALG_RSA_PSS,
 | 
			
		||||
 * - #PSA_ALG_RSA_PKCS1V15_SIGN, #PSA_ALG_RSA_PSS, #PSA_ALG_RSA_PSS_ANY_SALT,
 | 
			
		||||
 * - #PSA_ALG_ECDSA, #PSA_ALG_DETERMINISTIC_ECDSA.
 | 
			
		||||
 * Then you may create and use a key as follows:
 | 
			
		||||
 * - Set the key usage field using #PSA_ALG_ANY_HASH, for example:
 | 
			
		||||
@ -1341,6 +1341,7 @@
 | 
			
		||||
    (((alg) & ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_PKCS1V15_SIGN_BASE)
 | 
			
		||||
 | 
			
		||||
#define PSA_ALG_RSA_PSS_BASE               ((psa_algorithm_t)0x06000300)
 | 
			
		||||
#define PSA_ALG_RSA_PSS_ANY_SALT_BASE      ((psa_algorithm_t)0x06001300)
 | 
			
		||||
/** RSA PSS signature with hashing.
 | 
			
		||||
 *
 | 
			
		||||
 * This is the signature scheme defined by RFC 8017
 | 
			
		||||
@ -1361,9 +1362,72 @@
 | 
			
		||||
 */
 | 
			
		||||
#define PSA_ALG_RSA_PSS(hash_alg)                               \
 | 
			
		||||
    (PSA_ALG_RSA_PSS_BASE | ((hash_alg) & PSA_ALG_HASH_MASK))
 | 
			
		||||
#define PSA_ALG_IS_RSA_PSS(alg)                                 \
 | 
			
		||||
 | 
			
		||||
/** RSA PSS signature with hashing with relaxed verification.
 | 
			
		||||
 *
 | 
			
		||||
 * This algorithm has the same behavior as #PSA_ALG_RSA_PSS when signing,
 | 
			
		||||
 * but allows an arbitrary salt length (including \c 0) when verifying a
 | 
			
		||||
 * signature.
 | 
			
		||||
 *
 | 
			
		||||
 * \param hash_alg      A hash algorithm (\c PSA_ALG_XXX value such that
 | 
			
		||||
 *                      #PSA_ALG_IS_HASH(\p hash_alg) is true).
 | 
			
		||||
 *                      This includes #PSA_ALG_ANY_HASH
 | 
			
		||||
 *                      when specifying the algorithm in a usage policy.
 | 
			
		||||
 *
 | 
			
		||||
 * \return              The corresponding RSA PSS signature algorithm.
 | 
			
		||||
 * \return              Unspecified if \p hash_alg is not a supported
 | 
			
		||||
 *                      hash algorithm.
 | 
			
		||||
 */
 | 
			
		||||
#define PSA_ALG_RSA_PSS_ANY_SALT(hash_alg)                      \
 | 
			
		||||
    (PSA_ALG_RSA_PSS_ANY_SALT_BASE | ((hash_alg) & PSA_ALG_HASH_MASK))
 | 
			
		||||
 | 
			
		||||
/** Whether the specified algorithm is RSA PSS with standard salt.
 | 
			
		||||
 *
 | 
			
		||||
 * \param alg           An algorithm value or an algorithm policy wildcard.
 | 
			
		||||
 *
 | 
			
		||||
 * \return              1 if \p alg is of the form
 | 
			
		||||
 *                      #PSA_ALG_RSA_PSS(\c hash_alg),
 | 
			
		||||
 *                      where \c hash_alg is a hash algorithm or
 | 
			
		||||
 *                      #PSA_ALG_ANY_HASH. 0 otherwise.
 | 
			
		||||
 *                      This macro may return either 0 or 1 if \p alg is not
 | 
			
		||||
 *                      a supported algorithm identifier or policy.
 | 
			
		||||
 */
 | 
			
		||||
#define PSA_ALG_IS_RSA_PSS_STANDARD_SALT(alg)                   \
 | 
			
		||||
    (((alg) & ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_PSS_BASE)
 | 
			
		||||
 | 
			
		||||
/** Whether the specified algorithm is RSA PSS with any salt.
 | 
			
		||||
 *
 | 
			
		||||
 * \param alg           An algorithm value or an algorithm policy wildcard.
 | 
			
		||||
 *
 | 
			
		||||
 * \return              1 if \p alg is of the form
 | 
			
		||||
 *                      #PSA_ALG_RSA_PSS_ANY_SALT_BASE(\c hash_alg),
 | 
			
		||||
 *                      where \c hash_alg is a hash algorithm or
 | 
			
		||||
 *                      #PSA_ALG_ANY_HASH. 0 otherwise.
 | 
			
		||||
 *                      This macro may return either 0 or 1 if \p alg is not
 | 
			
		||||
 *                      a supported algorithm identifier or policy.
 | 
			
		||||
 */
 | 
			
		||||
#define PSA_ALG_IS_RSA_PSS_ANY_SALT(alg)                                \
 | 
			
		||||
    (((alg) & ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_PSS_ANY_SALT_BASE)
 | 
			
		||||
 | 
			
		||||
/** Whether the specified algorithm is RSA PSS.
 | 
			
		||||
 *
 | 
			
		||||
 * This includes any of the RSA PSS algorithm variants, regardless of the
 | 
			
		||||
 * constraints on salt length.
 | 
			
		||||
 *
 | 
			
		||||
 * \param alg           An algorithm value or an algorithm policy wildcard.
 | 
			
		||||
 *
 | 
			
		||||
 * \return              1 if \p alg is of the form
 | 
			
		||||
 *                      #PSA_ALG_RSA_PSS(\c hash_alg) or
 | 
			
		||||
 *                      #PSA_ALG_RSA_PSS_ANY_SALT_BASE(\c hash_alg),
 | 
			
		||||
 *                      where \c hash_alg is a hash algorithm or
 | 
			
		||||
 *                      #PSA_ALG_ANY_HASH. 0 otherwise.
 | 
			
		||||
 *                      This macro may return either 0 or 1 if \p alg is not
 | 
			
		||||
 *                      a supported algorithm identifier or policy.
 | 
			
		||||
 */
 | 
			
		||||
#define PSA_ALG_IS_RSA_PSS(alg)                                 \
 | 
			
		||||
    ((((alg) & ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_PSS_BASE) ||  \
 | 
			
		||||
     (((alg) & ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_PSS_ANY_SALT_BASE))
 | 
			
		||||
 | 
			
		||||
#define PSA_ALG_ECDSA_BASE                      ((psa_algorithm_t)0x06000600)
 | 
			
		||||
/** ECDSA signature with hashing.
 | 
			
		||||
 *
 | 
			
		||||
 | 
			
		||||
@ -250,6 +250,8 @@ class PSAMacroCollector(PSAMacroEnumerator):
 | 
			
		||||
        suffix = name[len(prefix):]
 | 
			
		||||
        if suffix in ['DSA', 'ECDSA']:
 | 
			
		||||
            midfix += 'RANDOMIZED_'
 | 
			
		||||
        elif suffix == 'RSA_PSS':
 | 
			
		||||
            suffix += '_STANDARD_SALT'
 | 
			
		||||
        return prefix + midfix + suffix
 | 
			
		||||
 | 
			
		||||
    def record_algorithm_subtype(self, name: str, expansion: str) -> None:
 | 
			
		||||
 | 
			
		||||
@ -182,6 +182,10 @@ Asymmetric signature: RSA PSS SHA-256
 | 
			
		||||
depends_on:PSA_WANT_ALG_RSA_PSS:PSA_WANT_ALG_SHA_256
 | 
			
		||||
asymmetric_signature_algorithm:PSA_ALG_RSA_PSS( PSA_ALG_SHA_256 ):ALG_IS_RSA_PSS | ALG_IS_HASH_AND_SIGN
 | 
			
		||||
 | 
			
		||||
Asymmetric signature: RSA PSS-any-salt SHA-256
 | 
			
		||||
depends_on:PSA_WANT_ALG_RSA_PSS:PSA_WANT_ALG_SHA_256
 | 
			
		||||
asymmetric_signature_algorithm:PSA_ALG_RSA_PSS_ANY_SALT( PSA_ALG_SHA_256 ):ALG_IS_RSA_PSS | ALG_IS_HASH_AND_SIGN
 | 
			
		||||
 | 
			
		||||
Asymmetric signature: randomized ECDSA (no hashing)
 | 
			
		||||
depends_on:PSA_WANT_ALG_ECDSA
 | 
			
		||||
asymmetric_signature_algorithm:PSA_ALG_ECDSA_ANY:ALG_IS_ECDSA | ALG_IS_RANDOMIZED_ECDSA | ALG_IS_HASH_AND_SIGN
 | 
			
		||||
@ -214,6 +218,10 @@ Asymmetric signature: RSA PSS with wildcard hash
 | 
			
		||||
depends_on:PSA_WANT_ALG_RSA_PSS
 | 
			
		||||
asymmetric_signature_wildcard:PSA_ALG_RSA_PSS( PSA_ALG_ANY_HASH ):ALG_IS_RSA_PSS
 | 
			
		||||
 | 
			
		||||
Asymmetric signature: RSA PSS-any-salt with wildcard hash
 | 
			
		||||
depends_on:PSA_WANT_ALG_RSA_PSS
 | 
			
		||||
asymmetric_signature_wildcard:PSA_ALG_RSA_PSS_ANY_SALT( PSA_ALG_ANY_HASH ):ALG_IS_RSA_PSS
 | 
			
		||||
 | 
			
		||||
Asymmetric signature: randomized ECDSA with wildcard hash
 | 
			
		||||
depends_on:PSA_WANT_ALG_ECDSA
 | 
			
		||||
asymmetric_signature_wildcard:PSA_ALG_ECDSA( PSA_ALG_ANY_HASH ):ALG_IS_ECDSA | ALG_IS_RANDOMIZED_ECDSA
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user