Hash#
EverCrypt provides multiple hash algorithms, i.e., …
Blake2B,
Blake2S,
SHA2-224,
SHA2-256,
SHA2-384,
SHA2-512,
SHA1, and
MD5
… via a unified interface.
Typedefs#
-
Spec_Hash_Definitions_SHA2_224#
-
Spec_Hash_Definitions_SHA2_256#
-
Spec_Hash_Definitions_SHA2_384#
-
Spec_Hash_Definitions_SHA2_512#
-
Spec_Hash_Definitions_SHA1#
-
Spec_Hash_Definitions_MD5#
-
Spec_Hash_Definitions_Blake2S#
-
Spec_Hash_Definitions_Blake2B#
-
typedef struct EverCrypt_Hash_Incremental_state_t_s EverCrypt_Hash_Incremental_state_t#
Functions#
-
void EverCrypt_Hash_Incremental_hash(Spec_Hash_Definitions_hash_alg a, uint8_t *output, uint8_t *input, uint32_t input_len)#
Hash
input, of leninput_len, intooutput, an array whose length is determined by your choice of algorithma(see Hacl_Spec.h). You can use the macros defined earlier in this file to allocate a destination buffer of the right length. This API will automatically pick the most efficient implementation, provided you have called EverCrypt_AutoConfig2_init() before.
a Algorithm to use.
dst Pointer to digest.
input Pointer to message.
len Length of message.
-
EverCrypt_Hash_Incremental_state_t *EverCrypt_Hash_Incremental_malloc(Spec_Hash_Definitions_hash_alg a)#
Allocate initial state for the agile hash. The argument
astands for the choice of algorithm (see Hacl_Spec.h). This API will automatically pick the most efficient implementation, provided you have called EverCrypt_AutoConfig2_init() before. The state is to be freed by callingfree.
Create a hash state.
a Algorithm to use.
-
void EverCrypt_Hash_Incremental_reset(EverCrypt_Hash_Incremental_state_t *state)#
Reset an existing state to the initial hash state with empty data.
Reset hash state).
s The hash state.
-
EverCrypt_Error_error_code EverCrypt_Hash_Incremental_update(EverCrypt_Hash_Incremental_state_t *state, uint8_t *chunk, uint32_t chunk_len)#
Feed an arbitrary amount of data into the hash. This function returns EverCrypt_Error_Success for success, or EverCrypt_Error_MaximumLengthExceeded if the combined length of all of the data passed to
update(since the last call toinit) exceeds 2^61-1 bytes or 2^64-1 bytes, depending on the choice of algorithm. Both limits are unlikely to be attained in practice.
Feed the next chunk of the message that will be hashed.
p The hash state.
data Pointer to the next chunk of the message that will be hashed.
len Length of the next chunk of the message that will be hashed.
-
void EverCrypt_Hash_Incremental_digest(EverCrypt_Hash_Incremental_state_t *state, uint8_t *output)#
Write the resulting hash into
output, an array whose length is algorithm-specific. You can use the macros defined earlier in this file to allocate a destination buffer of the right length. The state remains valid after a call todigest, meaning the user may feed more data into the hash viaupdate. (The finish function operates on an internal copy of the state and therefore does not invalidate the client-held state.)
Finish the hash calculation and write the digest to dst.
s The hash state.
dst Pointer to digest.
-
void EverCrypt_Hash_Incremental_free(EverCrypt_Hash_Incremental_state_t *state)#
Free a state previously allocated with
create_in.
Cleanup the hash state.
s The hash state.
-
uint32_t EverCrypt_Hash_Incremental_hash_len(Spec_Hash_Definitions_hash_alg a)#
-
Spec_Hash_Definitions_hash_alg EverCrypt_Hash_Incremental_alg_of_state(EverCrypt_Hash_Incremental_state_t *s)#
Perform a run-time test to determine which algorithm was chosen for the given piece of state.