File md.h
This file contains the generic functions for message-digest (hashing) and HMAC.
- Author
Adriaan de Jong dejong@fox-it.com
Defines
-
MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE
The selected feature is not available.
-
MBEDTLS_ERR_MD_BAD_INPUT_DATA
Bad input parameters to function.
-
MBEDTLS_ERR_MD_ALLOC_FAILED
Failed to allocate memory.
-
MBEDTLS_MD_MAX_SIZE
Typedefs
-
typedef struct mbedtls_md_info_t mbedtls_md_info_t
Opaque struct.
Constructed using mbedtls_md_info_from_type.
Fields can be accessed with mbedtls_md_get_size and mbedtls_md_get_type.
-
typedef struct mbedtls_md_context_t mbedtls_md_context_t
The generic message-digest context.
Enums
-
enum mbedtls_md_type_t
Supported message digests.
Warning
MD5 and SHA-1 are considered weak message digests and their use constitutes a security risk. We recommend considering stronger message digests instead.
Values:
-
enumerator MBEDTLS_MD_NONE
None.
-
enumerator MBEDTLS_MD_MD5
The MD5 message digest.
-
enumerator MBEDTLS_MD_RIPEMD160
The RIPEMD-160 message digest.
-
enumerator MBEDTLS_MD_SHA1
The SHA-1 message digest.
-
enumerator MBEDTLS_MD_SHA224
The SHA-224 message digest.
-
enumerator MBEDTLS_MD_SHA256
The SHA-256 message digest.
-
enumerator MBEDTLS_MD_SHA384
The SHA-384 message digest.
-
enumerator MBEDTLS_MD_SHA512
The SHA-512 message digest.
-
enumerator MBEDTLS_MD_SHA3_224
The SHA3-224 message digest.
-
enumerator MBEDTLS_MD_SHA3_256
The SHA3-256 message digest.
-
enumerator MBEDTLS_MD_SHA3_384
The SHA3-384 message digest.
-
enumerator MBEDTLS_MD_SHA3_512
The SHA3-512 message digest.
-
enumerator MBEDTLS_MD_NONE
Functions
-
const mbedtls_md_info_t *mbedtls_md_info_from_type(mbedtls_md_type_t md_type)
This function returns the message-digest information associated with the given digest type.
- Parameters:
md_type – The type of digest to search for.
- Returns:
The message-digest information associated with
md_type.- Returns:
NULL if the associated message-digest information is not found.
-
void mbedtls_md_init(mbedtls_md_context_t *ctx)
This function initializes a message-digest context without binding it to a particular message-digest algorithm.
This function should always be called first. It prepares the context for mbedtls_md_setup() for binding it to a message-digest algorithm.
-
void mbedtls_md_free(mbedtls_md_context_t *ctx)
This function clears the internal structure of
ctxand frees any embedded internal structure, but does not freectxitself.If you have called mbedtls_md_setup() on
ctx, you must call mbedtls_md_free() when you are no longer using the context. Calling this function if you have previously called mbedtls_md_init() and nothing else is optional. You must not call this function if you have not called mbedtls_md_init().
-
int mbedtls_md_setup(mbedtls_md_context_t *ctx, const mbedtls_md_info_t *md_info, int hmac)
This function selects the message digest algorithm to use, and allocates internal structures.
It should be called after mbedtls_md_init() or mbedtls_md_free(). Makes it necessary to call mbedtls_md_free() later.
Note
From TF-PSA-Crypto 1.0 and Mbed TLS 4.0 onwards,
hmacMUST be set to 0. HMAC operations are no longer supported via MD and may only be performed via the psa_mac_ API.- Parameters:
ctx – The context to set up.
md_info – The information structure of the message-digest algorithm to use.
hmac – Defines if HMAC is used. 0: HMAC is not used (saves some memory), or non-zero: HMAC is used with this context.
- Returns:
0on success.- Returns:
MBEDTLS_ERR_MD_BAD_INPUT_DATA on parameter-verification failure.
- Returns:
MBEDTLS_ERR_MD_ALLOC_FAILED on memory-allocation failure.
-
int mbedtls_md_clone(mbedtls_md_context_t *dst, const mbedtls_md_context_t *src)
This function clones the state of a message-digest context.
Note
You must call mbedtls_md_setup() on
dstbefore calling this function.Note
The two contexts must have the same type, for example, both are SHA-256.
Warning
This function clones the message-digest state, not the HMAC state.
- Parameters:
dst – The destination context.
src – The context to be cloned.
- Returns:
0on success.- Returns:
MBEDTLS_ERR_MD_BAD_INPUT_DATA on parameter-verification failure.
- Returns:
MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE if both contexts are not using the same engine. This can be avoided by moving the call to psa_crypto_init() before the first call to mbedtls_md_setup().
-
unsigned char mbedtls_md_get_size(const mbedtls_md_info_t *md_info)
This function extracts the message-digest size from the message-digest information structure.
- Parameters:
md_info – The information structure of the message-digest algorithm to use.
- Returns:
The size of the message-digest output in Bytes.
-
static inline unsigned char mbedtls_md_get_size_from_type(mbedtls_md_type_t md_type)
This function gives the message-digest size associated to message-digest type.
- Parameters:
md_type – The message-digest type.
- Returns:
The size of the message-digest output in Bytes, or 0 if the message-digest type is not known.
-
mbedtls_md_type_t mbedtls_md_get_type(const mbedtls_md_info_t *md_info)
This function extracts the message-digest type from the message-digest information structure.
- Parameters:
md_info – The information structure of the message-digest algorithm to use.
- Returns:
The type of the message digest.
-
int mbedtls_md_starts(mbedtls_md_context_t *ctx)
This function starts a message-digest computation.
You must call this function after setting up the context with mbedtls_md_setup(), and before passing data with mbedtls_md_update().
- Parameters:
ctx – The generic message-digest context.
- Returns:
0on success.- Returns:
MBEDTLS_ERR_MD_BAD_INPUT_DATA on parameter-verification failure.
-
int mbedtls_md_update(mbedtls_md_context_t *ctx, const unsigned char *input, size_t ilen)
This function feeds an input buffer into an ongoing message-digest computation.
You must call mbedtls_md_starts() before calling this function. You may call this function multiple times. Afterwards, call mbedtls_md_finish().
- Parameters:
ctx – The generic message-digest context.
input – The buffer holding the input data.
ilen – The length of the input data.
- Returns:
0on success.- Returns:
MBEDTLS_ERR_MD_BAD_INPUT_DATA on parameter-verification failure.
-
int mbedtls_md_finish(mbedtls_md_context_t *ctx, unsigned char *output)
This function finishes the digest operation, and writes the result to the output buffer.
Call this function after a call to mbedtls_md_starts(), followed by any number of calls to mbedtls_md_update(). Afterwards, you may either clear the context with mbedtls_md_free(), or call mbedtls_md_starts() to reuse the context for another digest operation with the same algorithm.
- Parameters:
ctx – The generic message-digest context.
output – The buffer for the generic message-digest checksum result.
- Returns:
0on success.- Returns:
MBEDTLS_ERR_MD_BAD_INPUT_DATA on parameter-verification failure.
-
int mbedtls_md(const mbedtls_md_info_t *md_info, const unsigned char *input, size_t ilen, unsigned char *output)
This function calculates the message-digest of a buffer, with respect to a configurable message-digest algorithm in a single call.
The result is calculated as Output = message_digest(input buffer).
- Parameters:
md_info – The information structure of the message-digest algorithm to use.
input – The buffer holding the data.
ilen – The length of the input data.
output – The generic message-digest checksum result.
- Returns:
0on success.- Returns:
MBEDTLS_ERR_MD_BAD_INPUT_DATA on parameter-verification failure.
-
struct mbedtls_md_context_t
- #include <md.h>
The generic message-digest context.
Public Members
-
const mbedtls_md_info_t *private_md_info
Information about the associated message digest.
-
void *private_md_ctx
The digest-specific context (legacy) or the PSA operation.
-
void *private_hmac_ctx
The HMAC part of the context.
-
const mbedtls_md_info_t *private_md_info