ISARA Radiate Security Solution Suite Toolkit Edition Version 1.5

Quantum-safe cryptographic primitives and algorithms.

iqr_hash.h
Go to the documentation of this file.
1 
26 #ifndef IQR_HASH_H
27 #define IQR_HASH_H
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
33 #include "iqr_api.h"
34 #include "iqr_context.h"
35 #include "iqr_retval.h"
36 
37 #include <stddef.h>
38 #include <stdint.h>
39 
40 // ---------------------------------------------------------------------------------------------------------------------------------
41 // Opaque data type.
42 // ---------------------------------------------------------------------------------------------------------------------------------
43 
45 typedef struct iqr_Hash_struct iqr_Hash;
46 
47 // ---------------------------------------------------------------------------------------------------------------------------------
48 // Constants.
49 // ---------------------------------------------------------------------------------------------------------------------------------
50 
52 typedef enum {
55 
58 
61 
64 
67 
70 
73 
75  // Maintain a count of supported algorithms. MUST BE LAST.
76  IQR_HASHALGO_MAX,
79 
80 #define IQR_BLAKE2B_256_DIGEST_SIZE 32
81 #define IQR_BLAKE2B_512_DIGEST_SIZE 64
82 
83 #define IQR_SHA2_256_DIGEST_SIZE 32
84 #define IQR_SHA2_384_DIGEST_SIZE 48
85 #define IQR_SHA2_512_DIGEST_SIZE 64
86 
87 #define IQR_SHA3_256_DIGEST_SIZE 32
88 #define IQR_SHA3_512_DIGEST_SIZE 64
89 
90 // ---------------------------------------------------------------------------------------------------------------------------------
91 // Data structure.
92 // ---------------------------------------------------------------------------------------------------------------------------------
93 
107 typedef struct {
121  iqr_retval (*initialize)(void **state);
132  iqr_retval (*begin)(void *state);
144  iqr_retval (*update)(void *state, const uint8_t *buf, size_t buf_size);
158  iqr_retval (*end)(void *state, uint8_t *digest, size_t digest_size);
173  iqr_retval (*cleanup)(void **state);
175 
176 // ---------------------------------------------------------------------------------------------------------------------------------
177 // Global function registration.
178 // ---------------------------------------------------------------------------------------------------------------------------------
179 
188 IQR_EXTERN
192 IQR_EXTERN
196 IQR_EXTERN
200 IQR_EXTERN
204 IQR_EXTERN
208 IQR_EXTERN
212 IQR_EXTERN
230 IQR_API
232 
233 // ---------------------------------------------------------------------------------------------------------------------------------
234 // Hash object management.
235 // ---------------------------------------------------------------------------------------------------------------------------------
236 
256 IQR_API
258 
271 IQR_API_UNENFORCED_RETURN
273 
274 // ---------------------------------------------------------------------------------------------------------------------------------
275 // Hashing functionality.
276 // ---------------------------------------------------------------------------------------------------------------------------------
277 
285 IQR_API
287 
297 IQR_API
298 iqr_retval iqr_HashUpdate(iqr_Hash *obj, const uint8_t *buf, size_t buf_size);
299 
324 IQR_API
325 iqr_retval iqr_HashEnd(iqr_Hash *obj, uint8_t *digest, size_t digest_size);
326 
344 IQR_API
345 iqr_retval iqr_HashMessage(iqr_Hash *obj, const uint8_t *buf, size_t buf_size, uint8_t *digest, size_t digest_size);
346 
355 IQR_API
356 iqr_retval iqr_HashGetDigestSize(const iqr_Hash *obj, size_t *digest_size);
357 
366 IQR_API
368 
377 IQR_API
378 iqr_retval iqr_HashAlgorithmGetDigestSize(const iqr_HashAlgorithmType hash_algo, size_t *digest_size);
379 
380 // ---------------------------------------------------------------------------------------------------------------------------------
381 // Randomized hashing, as described in
382 // <a href="https://www.iacr.org/archive/crypto2006/41170039/41170039.pdf"><em>Strengthening
383 // Digital Signatures via Randomized Hashing</em></a> by Halevi and Krawczyk.
384 // ---------------------------------------------------------------------------------------------------------------------------------
385 
414 IQR_API
415 iqr_retval iqr_HashSetSalt(iqr_Hash *obj, const uint8_t *salt, size_t salt_size);
416 
431 IQR_API
432 iqr_retval iqr_HashGetSalt(const iqr_Hash *obj, uint8_t *salt, size_t salt_size);
433 
442 IQR_API
443 iqr_retval iqr_HashGetSaltSize(const iqr_Hash *obj, size_t *salt_size);
444 
445 #ifdef __cplusplus
446 }
447 #endif
448 
449 #endif /* IQR_HASH_H */
IQR_EXTERN const iqr_HashCallbacks IQR_HASH_DEFAULT_BLAKE2B_256
Definition: iqr_hash.h:190
SHA3-256 algorithm type identifier.
Definition: iqr_hash.h:70
IQR_API iqr_retval iqr_HashGetDigestSize(const iqr_Hash *obj, size_t *digest_size)
IQR_API iqr_retval iqr_HashRegisterCallbacks(iqr_Context *ctx, iqr_HashAlgorithmType hash_algo, const iqr_HashCallbacks *cb)
IQR_EXTERN const iqr_HashCallbacks IQR_HASH_DEFAULT_SHA2_256
Definition: iqr_hash.h:198
IQR_API iqr_retval iqr_HashAlgorithmGetDigestSize(const iqr_HashAlgorithmType hash_algo, size_t *digest_size)
Definition: iqr_hash.h:108
SHA2-512 algorithm type identifier.
Definition: iqr_hash.h:67
BLAKE2b-256 algorithm type identifier.
Definition: iqr_hash.h:55
BLAKE2b-512 algorithm type identifier.
Definition: iqr_hash.h:58
ISARA Radiate Security Solution Suite&#39;s Context object.
IQR_API iqr_retval iqr_HashSetSalt(iqr_Hash *obj, const uint8_t *salt, size_t salt_size)
iqr_HashAlgorithmType
Definition: iqr_hash.h:53
IQR_API iqr_retval iqr_HashGetSaltSize(const iqr_Hash *obj, size_t *salt_size)
IQR_API iqr_retval iqr_HashUpdate(iqr_Hash *obj, const uint8_t *buf, size_t buf_size)
SHA2-384 algorithm type identifier.
Definition: iqr_hash.h:64
IQR_EXTERN const iqr_HashCallbacks IQR_HASH_DEFAULT_SHA2_512
Definition: iqr_hash.h:206
IQR_API_UNENFORCED_RETURN iqr_retval iqr_HashDestroy(iqr_Hash **obj)
ISARA Radiate Security Solution Suite&#39;s return values.
SHA2-256 algorithm type identifier.
Definition: iqr_hash.h:61
IQR_API iqr_retval iqr_HashGetSalt(const iqr_Hash *obj, uint8_t *salt, size_t salt_size)
IQR_API iqr_retval iqr_HashGetAlgorithmType(const iqr_Hash *obj, iqr_HashAlgorithmType *hash_algo)
IQR_API iqr_retval iqr_HashMessage(iqr_Hash *obj, const uint8_t *buf, size_t buf_size, uint8_t *digest, size_t digest_size)
struct iqr_Hash_struct iqr_Hash
Definition: iqr_hash.h:46
IQR_EXTERN const iqr_HashCallbacks IQR_HASH_DEFAULT_SHA2_384
Definition: iqr_hash.h:202
IQR_API iqr_retval iqr_HashCreate(const iqr_Context *ctx, iqr_HashAlgorithmType hash_algo, iqr_Hash **obj)
ISARA Radiate Security Solution Suite&#39;s API declarations.
struct iqr_Context_struct iqr_Context
Definition: iqr_context.h:36
IQR_API iqr_retval iqr_HashBegin(iqr_Hash *obj)
IQR_EXTERN const iqr_HashCallbacks IQR_HASH_DEFAULT_SHA3_256
Definition: iqr_hash.h:210
IQR_EXTERN const iqr_HashCallbacks IQR_HASH_DEFAULT_BLAKE2B_512
Definition: iqr_hash.h:194
IQR_EXTERN const iqr_HashCallbacks IQR_HASH_DEFAULT_SHA3_512
Definition: iqr_hash.h:214
SHA3-512 algorithm type identifier.
Definition: iqr_hash.h:73
iqr_retval
Definition: iqr_retval.h:29
IQR_API iqr_retval iqr_HashEnd(iqr_Hash *obj, uint8_t *digest, size_t digest_size)