ISARA Radiate™ Quantum-safe Library Version 3.1

Quantum-safe cryptographic primitives and algorithms.

iqr_hash.h
Go to the documentation of this file.
1 
20 #ifndef IQR_HASH_H
21 #define IQR_HASH_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 #include "iqr_api.h"
28 #include "iqr_context.h"
29 #include "iqr_retval.h"
30 
31 #include <stddef.h>
32 #include <stdint.h>
33 
34 // ---------------------------------------------------------------------------------------------------------------------------------
35 // Opaque data type.
36 // ---------------------------------------------------------------------------------------------------------------------------------
37 
39 typedef struct iqr_Hash_struct iqr_Hash;
40 
41 // ---------------------------------------------------------------------------------------------------------------------------------
42 // Constants.
43 // ---------------------------------------------------------------------------------------------------------------------------------
44 
46 typedef enum {
49 
52 
55 
58 
61 
63  // Maintain a limit on supported algorithms. MUST BE LAST.
64  IQR_HASHALGO_MAX
67 
68 #define IQR_SHA2_256_DIGEST_SIZE 32
69 #define IQR_SHA2_384_DIGEST_SIZE 48
70 #define IQR_SHA2_512_DIGEST_SIZE 64
71 
72 #define IQR_SHA3_256_DIGEST_SIZE 32
73 #define IQR_SHA3_512_DIGEST_SIZE 64
74 
75 // ---------------------------------------------------------------------------------------------------------------------------------
76 // Data structure.
77 // ---------------------------------------------------------------------------------------------------------------------------------
78 
88 typedef struct {
102  iqr_retval (*initialize)(void **state);
103 
114  iqr_retval (*begin)(void *state);
115 
127  iqr_retval (*update)(void *state, const uint8_t *buf, size_t buf_size);
128 
141  iqr_retval (*end)(void *state, uint8_t *digest, size_t digest_size);
142 
157  iqr_retval (*cleanup)(void **state);
159 
160 // ---------------------------------------------------------------------------------------------------------------------------------
161 // Global function registration.
162 // ---------------------------------------------------------------------------------------------------------------------------------
163 
172 IQR_EXTERN
174 
176 IQR_EXTERN
178 
180 IQR_EXTERN
182 
184 IQR_EXTERN
186 
188 IQR_EXTERN
190 
209 IQR_API
211 
212 // ---------------------------------------------------------------------------------------------------------------------------------
213 // Hash object management.
214 // ---------------------------------------------------------------------------------------------------------------------------------
215 
235 IQR_API
237 
250 IQR_API_UNENFORCED_RETURN
252 
253 // ---------------------------------------------------------------------------------------------------------------------------------
254 // Hashing functionality.
255 // ---------------------------------------------------------------------------------------------------------------------------------
256 
264 IQR_API
266 
276 IQR_API
277 iqr_retval iqr_HashUpdate(iqr_Hash *obj, const uint8_t *buf, size_t buf_size);
278 
297 IQR_API
298 iqr_retval iqr_HashEnd(iqr_Hash *obj, uint8_t *digest, size_t digest_size);
299 
316 IQR_API
317 iqr_retval iqr_HashMessage(iqr_Hash *obj, const uint8_t *buf, size_t buf_size, uint8_t *digest, size_t digest_size);
318 
327 IQR_API
328 iqr_retval iqr_HashGetDigestSize(const iqr_Hash *obj, size_t *digest_size);
329 
338 IQR_API
340 
349 IQR_API
350 iqr_retval iqr_HashAlgorithmGetDigestSize(const iqr_HashAlgorithmType hash_algo, size_t *digest_size);
351 
352 #ifdef __cplusplus
353 }
354 #endif
355 
356 #endif /* IQR_HASH_H */
IQR_API iqr_retval iqr_HashCreate(const iqr_Context *ctx, iqr_HashAlgorithmType hash_algo, iqr_Hash **obj)
struct iqr_Hash_struct iqr_Hash
Definition: iqr_hash.h:39
IQR_API iqr_retval iqr_HashGetDigestSize(const iqr_Hash *obj, size_t *digest_size)
@ IQR_HASHALGO_SHA3_512
SHA3-512 algorithm type identifier.
Definition: iqr_hash.h:60
const IQR_EXTERN iqr_HashCallbacks IQR_HASH_DEFAULT_SHA3_256
Definition: iqr_hash.h:185
IQR_API iqr_retval iqr_HashGetAlgorithmType(const iqr_Hash *obj, iqr_HashAlgorithmType *hash_algo)
IQR_API iqr_retval iqr_HashBegin(iqr_Hash *obj)
ISARA Radiate Quantum-Safe Library's Context object.
@ IQR_HASHALGO_SHA3_256
SHA3-256 algorithm type identifier.
Definition: iqr_hash.h:57
@ IQR_HASHALGO_SHA2_512
SHA2-512 algorithm type identifier.
Definition: iqr_hash.h:54
IQR_API_UNENFORCED_RETURN iqr_retval iqr_HashDestroy(iqr_Hash **obj)
const IQR_EXTERN iqr_HashCallbacks IQR_HASH_DEFAULT_SHA3_512
Definition: iqr_hash.h:189
const IQR_EXTERN iqr_HashCallbacks IQR_HASH_DEFAULT_SHA2_256
Definition: iqr_hash.h:173
@ IQR_HASHALGO_SHA2_384
SHA2-384 algorithm type identifier.
Definition: iqr_hash.h:51
iqr_HashAlgorithmType
Definition: iqr_hash.h:46
struct iqr_Context_struct iqr_Context
Definition: iqr_context.h:35
const IQR_EXTERN iqr_HashCallbacks IQR_HASH_DEFAULT_SHA2_512
Definition: iqr_hash.h:181
IQR_API iqr_retval iqr_HashRegisterCallbacks(iqr_Context *ctx, iqr_HashAlgorithmType hash_algo, const iqr_HashCallbacks *cb)
ISARA Radiate Quantum-Safe Library's return values.
iqr_retval
Definition: iqr_retval.h:28
ISARA Radiate Quantum-Safe Library's API declarations.
@ IQR_HASHALGO_SHA2_256
SHA2-256 algorithm type identifier.
Definition: iqr_hash.h:48
IQR_API iqr_retval iqr_HashAlgorithmGetDigestSize(const iqr_HashAlgorithmType hash_algo, size_t *digest_size)
IQR_API iqr_retval iqr_HashMessage(iqr_Hash *obj, const uint8_t *buf, size_t buf_size, uint8_t *digest, size_t digest_size)
IQR_API iqr_retval iqr_HashUpdate(iqr_Hash *obj, const uint8_t *buf, size_t buf_size)
const IQR_EXTERN iqr_HashCallbacks IQR_HASH_DEFAULT_SHA2_384
Definition: iqr_hash.h:177
Definition: iqr_hash.h:88
IQR_API iqr_retval iqr_HashEnd(iqr_Hash *obj, uint8_t *digest, size_t digest_size)