ISARA Quantum Resistant Toolkit  Version 1.1
Quantum resistant cryptographic primitives and algorithms.
iqr_hash.h
Go to the documentation of this file.
1 
24 #ifndef IQR_HASH_H
25 #define IQR_HASH_H
26 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30 
31 #include "iqr_api.h"
32 #include "iqr_context.h"
33 #include "iqr_retval.h"
34 
35 #include <stddef.h>
36 #include <stdint.h>
37 
38 // ---------------------------------------------------------------------------------------------------------------------------------
39 // Opaque data type.
40 // ---------------------------------------------------------------------------------------------------------------------------------
41 
43 typedef struct iqr_Hash_struct iqr_Hash;
44 
45 // ---------------------------------------------------------------------------------------------------------------------------------
46 // Constants.
47 // ---------------------------------------------------------------------------------------------------------------------------------
48 
50 typedef enum {
53 
56 
59 
62 
64  // Maintain a count of supported algorithms. MUST BE LAST.
65  IQR_HASHALGO_MAX,
68 
69 #define IQR_SHA2_224_DIGEST_SIZE 28
70 #define IQR_SHA2_256_DIGEST_SIZE 32
71 #define IQR_SHA2_384_DIGEST_SIZE 48
72 #define IQR_SHA2_512_DIGEST_SIZE 64
73 
74 #define IQR_SHA3_224_DIGEST_SIZE 28
75 #define IQR_SHA3_256_DIGEST_SIZE 32
76 #define IQR_SHA3_384_DIGEST_SIZE 48
77 #define IQR_SHA3_512_DIGEST_SIZE 64
78 
79 // ---------------------------------------------------------------------------------------------------------------------------------
80 // Data structure.
81 // ---------------------------------------------------------------------------------------------------------------------------------
82 
89 typedef struct {
103  iqr_retval (*initialize)(void **state);
104 
114  iqr_retval (*begin)(void *state);
115 
126  iqr_retval (*update)(void *state, const uint8_t *data, size_t size);
127 
140  iqr_retval (*end)(void *state, uint8_t *digest, size_t size);
141 
155  iqr_retval (*cleanup)(void **state);
157 
158 // ---------------------------------------------------------------------------------------------------------------------------------
159 // Global function registration.
160 // ---------------------------------------------------------------------------------------------------------------------------------
161 
172 IQR_EXTERN
174 
176 IQR_EXTERN
178 
180 IQR_EXTERN
182 
184 IQR_EXTERN
186 
200 IQR_API
201 iqr_retval iqr_HashRegisterCallbacks(iqr_Context *ctx, iqr_HashAlgorithmType algo, const iqr_HashCallbacks *cb);
202 
203 // ---------------------------------------------------------------------------------------------------------------------------------
204 // Hash object management.
205 // ---------------------------------------------------------------------------------------------------------------------------------
206 
224 IQR_API
225 iqr_retval iqr_HashCreate(const iqr_Context *ctx, iqr_HashAlgorithmType algo, iqr_Hash **obj);
226 
236 IQR_API_UNENFORCED_RETURN
238 
239 // ---------------------------------------------------------------------------------------------------------------------------------
240 // Hashing functionality.
241 // ---------------------------------------------------------------------------------------------------------------------------------
242 
250 IQR_API
252 
262 IQR_API
263 iqr_retval iqr_HashUpdate(iqr_Hash *obj, const uint8_t *data, size_t size);
264 
284 IQR_API
285 iqr_retval iqr_HashEnd(iqr_Hash *obj, uint8_t *digest, size_t digest_size);
286 
303 IQR_API
304 iqr_retval iqr_HashMessage(iqr_Hash *obj, const uint8_t *data, size_t data_size, uint8_t *digest, size_t digest_size);
305 
314 IQR_API
315 iqr_retval iqr_HashGetDigestSize(const iqr_Hash *obj, size_t *size);
316 
325 IQR_API
326 iqr_retval iqr_HashGetAlgorithmType(const iqr_Hash *obj, iqr_HashAlgorithmType *algo);
327 
336 IQR_API
337 iqr_retval iqr_HashAlgorithmGetDigestSize(const iqr_HashAlgorithmType algo, size_t *digest_size);
338 
339 // ---------------------------------------------------------------------------------------------------------------------------------
340 // Randomized extension to hashing functionality.
341 // ---------------------------------------------------------------------------------------------------------------------------------
342 
371 IQR_API
372 iqr_retval iqr_HashSetSalt(iqr_Hash *obj, const uint8_t *salt, size_t salt_size);
373 
388 IQR_API
389 iqr_retval iqr_HashGetSalt(const iqr_Hash *obj, uint8_t *salt, size_t salt_size);
390 
399 IQR_API
400 iqr_retval iqr_HashGetSaltSize(const iqr_Hash *obj, size_t *salt_size);
401 
402 #ifdef __cplusplus
403 }
404 #endif
405 
406 #endif /* IQR_HASH_H */
SHA3-256 algorithm type identifier.
Definition: iqr_hash.h:58
IQR_API iqr_retval iqr_HashUpdate(iqr_Hash *obj, const uint8_t *data, size_t size)
IQR_API iqr_retval iqr_HashMessage(iqr_Hash *obj, const uint8_t *data, size_t data_size, uint8_t *digest, size_t digest_size)
IQR_EXTERN const iqr_HashCallbacks IQR_HASH_DEFAULT_SHA2_256
Definition: iqr_hash.h:173
IQR_API iqr_retval iqr_HashCreate(const iqr_Context *ctx, iqr_HashAlgorithmType algo, iqr_Hash **obj)
Definition: iqr_hash.h:89
SHA-512 algorithm type identifier.
Definition: iqr_hash.h:55
IQR_API iqr_retval iqr_HashAlgorithmGetDigestSize(const iqr_HashAlgorithmType algo, size_t *digest_size)
IQR_API iqr_retval iqr_HashSetSalt(iqr_Hash *obj, const uint8_t *salt, size_t salt_size)
iqr_HashAlgorithmType
Definition: iqr_hash.h:50
IQR_API iqr_retval iqr_HashGetSaltSize(const iqr_Hash *obj, size_t *salt_size)
IQR_EXTERN const iqr_HashCallbacks IQR_HASH_DEFAULT_SHA2_512
Definition: iqr_hash.h:177
IQR_API_UNENFORCED_RETURN iqr_retval iqr_HashDestroy(iqr_Hash **obj)
SHA-256 algorithm type identifier.
Definition: iqr_hash.h:52
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 *algo)
struct iqr_Hash_struct iqr_Hash
Definition: iqr_hash.h:43
struct iqr_Context_struct iqr_Context
Definition: iqr_context.h:33
IQR_API iqr_retval iqr_HashGetDigestSize(const iqr_Hash *obj, size_t *size)
IQR_API iqr_retval iqr_HashBegin(iqr_Hash *obj)
IQR_EXTERN const iqr_HashCallbacks IQR_HASH_DEFAULT_SHA3_256
Definition: iqr_hash.h:181
IQR_EXTERN const iqr_HashCallbacks IQR_HASH_DEFAULT_SHA3_512
Definition: iqr_hash.h:185
IQR_API iqr_retval iqr_HashRegisterCallbacks(iqr_Context *ctx, iqr_HashAlgorithmType algo, const iqr_HashCallbacks *cb)
SHA3-512 algorithm type identifier.
Definition: iqr_hash.h:61
iqr_retval
Definition: iqr_retval.h:26
IQR_API iqr_retval iqr_HashEnd(iqr_Hash *obj, uint8_t *digest, size_t digest_size)