Add definitions for HKDF-Extract and HKDF-Expand algs
Signed-off-by: Przemek Stekiel <przemyslaw.stekiel@mobica.com>
This commit is contained in:
parent
e6e7bf58d1
commit
6b6ce3278e
@ -1762,6 +1762,97 @@
|
|||||||
#define PSA_ALG_HKDF_GET_HASH(hkdf_alg) \
|
#define PSA_ALG_HKDF_GET_HASH(hkdf_alg) \
|
||||||
(PSA_ALG_CATEGORY_HASH | ((hkdf_alg) & PSA_ALG_HASH_MASK))
|
(PSA_ALG_CATEGORY_HASH | ((hkdf_alg) & PSA_ALG_HASH_MASK))
|
||||||
|
|
||||||
|
#define PSA_ALG_HKDF_EXTRACT_BASE ((psa_algorithm_t)0x08000400)
|
||||||
|
/** Macro to build an HKDF-Extract algorithm.
|
||||||
|
*
|
||||||
|
* For example, `PSA_ALG_HKDF_EXTRACT(PSA_ALG_SHA256)` is
|
||||||
|
* HKDF-Extract using HMAC-SHA-256.
|
||||||
|
*
|
||||||
|
* This key derivation algorithm uses the following inputs:
|
||||||
|
* - PSA_KEY_DERIVATION_INPUT_SALT is the salt. Note that if the salt is
|
||||||
|
* shorter than the hash function's block size, it is padded to the block
|
||||||
|
* size with null bytes (and in particular an empty salt is equivalent to
|
||||||
|
* a string of zeros of the length of the hash, or of the block size which
|
||||||
|
* is larger than the hash).
|
||||||
|
* - PSA_KEY_DERIVATION_INPUT_SECRET is the input keying material used in the
|
||||||
|
* "extract" step.
|
||||||
|
* You must pass #PSA_KEY_DERIVATION_INPUT_SALT
|
||||||
|
* before #PSA_KEY_DERIVATION_INPUT_SECRET.
|
||||||
|
* starting to generate output.
|
||||||
|
*
|
||||||
|
* \warning HKDF-Extract is not meant to be used on its own. PSA_ALG_HKDF
|
||||||
|
* should be used instead if possible. PSA_ALG_HKDF_EXTRACT is provided
|
||||||
|
* as a separate algorithm for the sake of protocols that use it as a
|
||||||
|
* building block. It may also be a slight performance optimization
|
||||||
|
* in applications that use HKDF with the same salt and key but many
|
||||||
|
* different info strings.
|
||||||
|
*
|
||||||
|
* \param hash_alg A hash algorithm (\c PSA_ALG_XXX value such that
|
||||||
|
* #PSA_ALG_IS_HASH(\p hash_alg) is true).
|
||||||
|
*
|
||||||
|
* \return The corresponding HKDF-Extract algorithm.
|
||||||
|
* \return Unspecified if \p hash_alg is not a supported
|
||||||
|
* hash algorithm.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define PSA_ALG_HKDF_EXTRACT(hash_alg) \
|
||||||
|
(PSA_ALG_HKDF_EXTRACT_BASE | ((hash_alg) & PSA_ALG_HASH_MASK))
|
||||||
|
/** Whether the specified algorithm is an HKDF-Extract algorithm.
|
||||||
|
*
|
||||||
|
* HKDF-Extract is a family of key derivation algorithms that are based
|
||||||
|
* on a hash function and the HMAC construction.
|
||||||
|
*
|
||||||
|
* \param alg An algorithm identifier (value of type #psa_algorithm_t).
|
||||||
|
*
|
||||||
|
* \return 1 if \c alg is an HKDF-Extract algorithm, 0 otherwise.
|
||||||
|
* This macro may return either 0 or 1 if \c alg is not a supported
|
||||||
|
* key derivation algorithm identifier.
|
||||||
|
*/
|
||||||
|
#define PSA_ALG_IS_HKDF_EXTRACT(alg) \
|
||||||
|
(((alg) & ~PSA_ALG_HASH_MASK) == PSA_ALG_HKDF_EXTRACT_BASE)
|
||||||
|
|
||||||
|
#define PSA_ALG_HKDF_EXPAND_BASE ((psa_algorithm_t)0x08000500)
|
||||||
|
/** Macro to build an HKDF-Expand algorithm.
|
||||||
|
*
|
||||||
|
* For example, `PSA_ALG_HKDF_EXPAND(PSA_ALG_SHA256)` is
|
||||||
|
* HKDF-Expand using HMAC-SHA-256.
|
||||||
|
*
|
||||||
|
* This key derivation algorithm uses the following inputs:
|
||||||
|
* - PSA_KEY_DERIVATION_INPUT_SECRET is the pseudoramdom key (PRK).
|
||||||
|
* - PSA_KEY_DERIVATION_INPUT_INFO is the info string.
|
||||||
|
*
|
||||||
|
* The inputs are mandatory and must be passed in the order above.
|
||||||
|
* Each input may only be passed once.
|
||||||
|
*
|
||||||
|
* \warning HKDF-Expand is not meant to be used on its own. `PSA_ALG_HKDF`
|
||||||
|
* should be used instead if possible. `PSA_ALG_HKDF_EXPAND` is provided as
|
||||||
|
* a separate algorithm for the sake of protocols that use it as a building
|
||||||
|
* block. It may also be a slight performance optimization in applications
|
||||||
|
* that use HKDF with the same salt and key but many different info strings.
|
||||||
|
*
|
||||||
|
* \param hash_alg A hash algorithm (\c PSA_ALG_XXX value such that
|
||||||
|
* #PSA_ALG_IS_HASH(\p hash_alg) is true).
|
||||||
|
*
|
||||||
|
* \return The corresponding HKDF-Expand algorithm.
|
||||||
|
* \return Unspecified if \p hash_alg is not a supported
|
||||||
|
* hash algorithm.
|
||||||
|
*/
|
||||||
|
#define PSA_ALG_HKDF_EXPAND(hash_alg) \
|
||||||
|
(PSA_ALG_HKDF_EXPAND_BASE | ((hash_alg) & PSA_ALG_HASH_MASK))
|
||||||
|
/** Whether the specified algorithm is an HKDF-Extract algorithm.
|
||||||
|
*
|
||||||
|
* HKDF-Expand is a family of key derivation algorithms that are based
|
||||||
|
* on a hash function and the HMAC construction.
|
||||||
|
*
|
||||||
|
* \param alg An algorithm identifier (value of type #psa_algorithm_t).
|
||||||
|
*
|
||||||
|
* \return 1 if \c alg is an HKDF-Expand algorithm, 0 otherwise.
|
||||||
|
* This macro may return either 0 or 1 if \c alg is not a supported
|
||||||
|
* key derivation algorithm identifier.
|
||||||
|
*/
|
||||||
|
#define PSA_ALG_IS_HKDF_EXPAND(alg) \
|
||||||
|
(((alg) & ~PSA_ALG_HASH_MASK) == PSA_ALG_HKDF_EXPAND_BASE)
|
||||||
|
|
||||||
#define PSA_ALG_TLS12_PRF_BASE ((psa_algorithm_t)0x08000200)
|
#define PSA_ALG_TLS12_PRF_BASE ((psa_algorithm_t)0x08000200)
|
||||||
/** Macro to build a TLS-1.2 PRF algorithm.
|
/** Macro to build a TLS-1.2 PRF algorithm.
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user