/src/BearSSL/inc/bearssl_hmac.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright (c) 2016 Thomas Pornin <pornin@bolet.org> |
3 | | * |
4 | | * Permission is hereby granted, free of charge, to any person obtaining |
5 | | * a copy of this software and associated documentation files (the |
6 | | * "Software"), to deal in the Software without restriction, including |
7 | | * without limitation the rights to use, copy, modify, merge, publish, |
8 | | * distribute, sublicense, and/or sell copies of the Software, and to |
9 | | * permit persons to whom the Software is furnished to do so, subject to |
10 | | * the following conditions: |
11 | | * |
12 | | * The above copyright notice and this permission notice shall be |
13 | | * included in all copies or substantial portions of the Software. |
14 | | * |
15 | | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
16 | | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
17 | | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
18 | | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
19 | | * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
20 | | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
21 | | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
22 | | * SOFTWARE. |
23 | | */ |
24 | | |
25 | | #ifndef BR_BEARSSL_HMAC_H__ |
26 | | #define BR_BEARSSL_HMAC_H__ |
27 | | |
28 | | #include <stddef.h> |
29 | | #include <stdint.h> |
30 | | |
31 | | #include "bearssl_hash.h" |
32 | | |
33 | | #ifdef __cplusplus |
34 | | extern "C" { |
35 | | #endif |
36 | | |
37 | | /** \file bearssl_hmac.h |
38 | | * |
39 | | * # HMAC |
40 | | * |
41 | | * HMAC is initialized with a key and an underlying hash function; it |
42 | | * then fills a "key context". That context contains the processed |
43 | | * key. |
44 | | * |
45 | | * With the key context, a HMAC context can be initialized to process |
46 | | * the input bytes and obtain the MAC output. The key context is not |
47 | | * modified during that process, and can be reused. |
48 | | * |
49 | | * IMPORTANT: HMAC shall be used only with functions that have the |
50 | | * following properties: |
51 | | * |
52 | | * - hash output size does not exceed 64 bytes; |
53 | | * - hash internal state size does not exceed 64 bytes; |
54 | | * - internal block length is a power of 2 between 16 and 256 bytes. |
55 | | */ |
56 | | |
57 | | /** |
58 | | * \brief HMAC key context. |
59 | | * |
60 | | * The HMAC key context is initialised with a hash function implementation |
61 | | * and a secret key. Contents are opaque (callers should not access them |
62 | | * directly). The caller is responsible for allocating the context where |
63 | | * appropriate. Context initialisation and usage incurs no dynamic |
64 | | * allocation, so there is no release function. |
65 | | */ |
66 | | typedef struct { |
67 | | #ifndef BR_DOXYGEN_IGNORE |
68 | | const br_hash_class *dig_vtable; |
69 | | unsigned char ksi[64], kso[64]; |
70 | | #endif |
71 | | } br_hmac_key_context; |
72 | | |
73 | | /** |
74 | | * \brief HMAC key context initialisation. |
75 | | * |
76 | | * Initialise the key context with the provided key, using the hash function |
77 | | * identified by `digest_vtable`. This supports arbitrary key lengths. |
78 | | * |
79 | | * \param kc HMAC key context to initialise. |
80 | | * \param digest_vtable pointer to the hash function implementation vtable. |
81 | | * \param key pointer to the HMAC secret key. |
82 | | * \param key_len HMAC secret key length (in bytes). |
83 | | */ |
84 | | void br_hmac_key_init(br_hmac_key_context *kc, |
85 | | const br_hash_class *digest_vtable, const void *key, size_t key_len); |
86 | | |
87 | | /* |
88 | | * \brief Get the underlying hash function. |
89 | | * |
90 | | * This function returns a pointer to the implementation vtable of the |
91 | | * hash function used for this HMAC key context. |
92 | | * |
93 | | * \param kc HMAC key context. |
94 | | * \return the hash function implementation. |
95 | | */ |
96 | | static inline const br_hash_class *br_hmac_key_get_digest( |
97 | | const br_hmac_key_context *kc) |
98 | 0 | { |
99 | 0 | return kc->dig_vtable; |
100 | 0 | } Unexecuted instantiation: module.cpp:br_hmac_key_get_digest(br_hmac_key_context const*) Unexecuted instantiation: poly1305_ctmul.c:br_hmac_key_get_digest Unexecuted instantiation: chacha20_sse2.c:br_hmac_key_get_digest Unexecuted instantiation: chacha20_ct.c:br_hmac_key_get_digest Unexecuted instantiation: aes_x86ni_ctrcbc.c:br_hmac_key_get_digest Unexecuted instantiation: aes_x86ni.c:br_hmac_key_get_digest Unexecuted instantiation: aes_small_ctrcbc.c:br_hmac_key_get_digest Unexecuted instantiation: aes_ct_ctrcbc.c:br_hmac_key_get_digest Unexecuted instantiation: aes_ct_ctr.c:br_hmac_key_get_digest Unexecuted instantiation: aes_ct64_ctrcbc.c:br_hmac_key_get_digest Unexecuted instantiation: aes_ct64.c:br_hmac_key_get_digest Unexecuted instantiation: aes_ct.c:br_hmac_key_get_digest Unexecuted instantiation: aes_common.c:br_hmac_key_get_digest Unexecuted instantiation: aes_big_ctrcbc.c:br_hmac_key_get_digest Unexecuted instantiation: prf_md5sha1.c:br_hmac_key_get_digest Unexecuted instantiation: prf.c:br_hmac_key_get_digest Unexecuted instantiation: sysrng.c:br_hmac_key_get_digest Unexecuted instantiation: hmac_drbg.c:br_hmac_key_get_digest Unexecuted instantiation: hmac.c:br_hmac_key_get_digest Unexecuted instantiation: shake.c:br_hmac_key_get_digest Unexecuted instantiation: hkdf.c:br_hmac_key_get_digest Unexecuted instantiation: sha2small.c:br_hmac_key_get_digest Unexecuted instantiation: sha2big.c:br_hmac_key_get_digest Unexecuted instantiation: sha1.c:br_hmac_key_get_digest Unexecuted instantiation: md5sha1.c:br_hmac_key_get_digest Unexecuted instantiation: md5.c:br_hmac_key_get_digest Unexecuted instantiation: ghash_ctmul32.c:br_hmac_key_get_digest Unexecuted instantiation: ecdsa_i31_vrfy_raw.c:br_hmac_key_get_digest Unexecuted instantiation: ecdsa_i31_sign_raw.c:br_hmac_key_get_digest Unexecuted instantiation: ecdsa_i31_bits.c:br_hmac_key_get_digest Unexecuted instantiation: ecdsa_i15_vrfy_raw.c:br_hmac_key_get_digest Unexecuted instantiation: ecdsa_i15_sign_raw.c:br_hmac_key_get_digest Unexecuted instantiation: ecdsa_i15_bits.c:br_hmac_key_get_digest Unexecuted instantiation: ec_secp521r1.c:br_hmac_key_get_digest Unexecuted instantiation: ec_secp384r1.c:br_hmac_key_get_digest Unexecuted instantiation: ec_secp256r1.c:br_hmac_key_get_digest Unexecuted instantiation: ec_pubkey.c:br_hmac_key_get_digest Unexecuted instantiation: ec_prime_i31.c:br_hmac_key_get_digest Unexecuted instantiation: ec_prime_i15.c:br_hmac_key_get_digest Unexecuted instantiation: ec_p256_m64.c:br_hmac_key_get_digest Unexecuted instantiation: ec_p256_m62.c:br_hmac_key_get_digest Unexecuted instantiation: ec_p256_m31.c:br_hmac_key_get_digest Unexecuted instantiation: ec_p256_m15.c:br_hmac_key_get_digest Unexecuted instantiation: ec_keygen.c:br_hmac_key_get_digest Unexecuted instantiation: ec_default.c:br_hmac_key_get_digest Unexecuted instantiation: ec_c25519_m64.c:br_hmac_key_get_digest Unexecuted instantiation: ec_c25519_m62.c:br_hmac_key_get_digest Unexecuted instantiation: ec_c25519_m31.c:br_hmac_key_get_digest Unexecuted instantiation: ec_c25519_m15.c:br_hmac_key_get_digest Unexecuted instantiation: ec_c25519_i31.c:br_hmac_key_get_digest Unexecuted instantiation: ec_c25519_i15.c:br_hmac_key_get_digest Unexecuted instantiation: ec_all_m31.c:br_hmac_key_get_digest Unexecuted instantiation: enc64be.c:br_hmac_key_get_digest Unexecuted instantiation: enc32le.c:br_hmac_key_get_digest Unexecuted instantiation: enc32be.c:br_hmac_key_get_digest Unexecuted instantiation: dec64be.c:br_hmac_key_get_digest Unexecuted instantiation: dec32le.c:br_hmac_key_get_digest Unexecuted instantiation: dec32be.c:br_hmac_key_get_digest Unexecuted instantiation: ccopy.c:br_hmac_key_get_digest Unexecuted instantiation: gcm.c:br_hmac_key_get_digest Unexecuted instantiation: ccm.c:br_hmac_key_get_digest Unexecuted instantiation: aes_small_enc.c:br_hmac_key_get_digest Unexecuted instantiation: aes_ct_enc.c:br_hmac_key_get_digest Unexecuted instantiation: aes_ct64_enc.c:br_hmac_key_get_digest Unexecuted instantiation: aes_big_enc.c:br_hmac_key_get_digest Unexecuted instantiation: i31_sub.c:br_hmac_key_get_digest Unexecuted instantiation: i31_rshift.c:br_hmac_key_get_digest Unexecuted instantiation: i31_ninv31.c:br_hmac_key_get_digest Unexecuted instantiation: i31_montmul.c:br_hmac_key_get_digest Unexecuted instantiation: i31_modpow.c:br_hmac_key_get_digest Unexecuted instantiation: i31_iszero.c:br_hmac_key_get_digest Unexecuted instantiation: i31_fmont.c:br_hmac_key_get_digest Unexecuted instantiation: i31_encode.c:br_hmac_key_get_digest Unexecuted instantiation: i31_decode.c:br_hmac_key_get_digest Unexecuted instantiation: i31_decmod.c:br_hmac_key_get_digest Unexecuted instantiation: i31_bitlen.c:br_hmac_key_get_digest Unexecuted instantiation: i31_add.c:br_hmac_key_get_digest Unexecuted instantiation: i15_sub.c:br_hmac_key_get_digest Unexecuted instantiation: i15_rshift.c:br_hmac_key_get_digest Unexecuted instantiation: i15_ninv15.c:br_hmac_key_get_digest Unexecuted instantiation: i15_montmul.c:br_hmac_key_get_digest Unexecuted instantiation: i15_modpow.c:br_hmac_key_get_digest Unexecuted instantiation: i15_iszero.c:br_hmac_key_get_digest Unexecuted instantiation: i15_fmont.c:br_hmac_key_get_digest Unexecuted instantiation: i15_encode.c:br_hmac_key_get_digest Unexecuted instantiation: i15_decode.c:br_hmac_key_get_digest Unexecuted instantiation: i15_decmod.c:br_hmac_key_get_digest Unexecuted instantiation: i15_bitlen.c:br_hmac_key_get_digest Unexecuted instantiation: i15_add.c:br_hmac_key_get_digest Unexecuted instantiation: i31_tmont.c:br_hmac_key_get_digest Unexecuted instantiation: i31_muladd.c:br_hmac_key_get_digest Unexecuted instantiation: i15_tmont.c:br_hmac_key_get_digest Unexecuted instantiation: i15_muladd.c:br_hmac_key_get_digest Unexecuted instantiation: i32_div32.c:br_hmac_key_get_digest |
101 | | |
102 | | /** |
103 | | * \brief HMAC computation context. |
104 | | * |
105 | | * The HMAC computation context maintains the state for a single HMAC |
106 | | * computation. It is modified as input bytes are injected. The context |
107 | | * is caller-allocated and has no release function since it does not |
108 | | * dynamically allocate external resources. Its contents are opaque. |
109 | | */ |
110 | | typedef struct { |
111 | | #ifndef BR_DOXYGEN_IGNORE |
112 | | br_hash_compat_context dig; |
113 | | unsigned char kso[64]; |
114 | | size_t out_len; |
115 | | #endif |
116 | | } br_hmac_context; |
117 | | |
118 | | /** |
119 | | * \brief HMAC computation initialisation. |
120 | | * |
121 | | * Initialise a HMAC context with a key context. The key context is |
122 | | * unmodified. Relevant data from the key context is immediately copied; |
123 | | * the key context can thus be independently reused, modified or released |
124 | | * without impacting this HMAC computation. |
125 | | * |
126 | | * An explicit output length can be specified; the actual output length |
127 | | * will be the minimum of that value and the natural HMAC output length. |
128 | | * If `out_len` is 0, then the natural HMAC output length is selected. The |
129 | | * "natural output length" is the output length of the underlying hash |
130 | | * function. |
131 | | * |
132 | | * \param ctx HMAC context to initialise. |
133 | | * \param kc HMAC key context (already initialised with the key). |
134 | | * \param out_len HMAC output length (0 to select "natural length"). |
135 | | */ |
136 | | void br_hmac_init(br_hmac_context *ctx, |
137 | | const br_hmac_key_context *kc, size_t out_len); |
138 | | |
139 | | /** |
140 | | * \brief Get the HMAC output size. |
141 | | * |
142 | | * The HMAC output size is the number of bytes that will actually be |
143 | | * produced with `br_hmac_out()` with the provided context. This function |
144 | | * MUST NOT be called on a non-initialised HMAC computation context. |
145 | | * The returned value is the minimum of the HMAC natural length (output |
146 | | * size of the underlying hash function) and the `out_len` parameter which |
147 | | * was used with the last `br_hmac_init()` call on that context (if the |
148 | | * initialisation `out_len` parameter was 0, then this function will |
149 | | * return the HMAC natural length). |
150 | | * |
151 | | * \param ctx the (already initialised) HMAC computation context. |
152 | | * \return the HMAC actual output size. |
153 | | */ |
154 | | static inline size_t |
155 | | br_hmac_size(br_hmac_context *ctx) |
156 | 756 | { |
157 | 756 | return ctx->out_len; |
158 | 756 | } Unexecuted instantiation: module.cpp:br_hmac_size(br_hmac_context*) Unexecuted instantiation: poly1305_ctmul.c:br_hmac_size Unexecuted instantiation: chacha20_sse2.c:br_hmac_size Unexecuted instantiation: chacha20_ct.c:br_hmac_size Unexecuted instantiation: aes_x86ni_ctrcbc.c:br_hmac_size Unexecuted instantiation: aes_x86ni.c:br_hmac_size Unexecuted instantiation: aes_small_ctrcbc.c:br_hmac_size Unexecuted instantiation: aes_ct_ctrcbc.c:br_hmac_size Unexecuted instantiation: aes_ct_ctr.c:br_hmac_size Unexecuted instantiation: aes_ct64_ctrcbc.c:br_hmac_size Unexecuted instantiation: aes_ct64.c:br_hmac_size Unexecuted instantiation: aes_ct.c:br_hmac_size Unexecuted instantiation: aes_common.c:br_hmac_size Unexecuted instantiation: aes_big_ctrcbc.c:br_hmac_size Unexecuted instantiation: prf_md5sha1.c:br_hmac_size Unexecuted instantiation: prf.c:br_hmac_size Unexecuted instantiation: sysrng.c:br_hmac_size Unexecuted instantiation: hmac_drbg.c:br_hmac_size Unexecuted instantiation: hmac.c:br_hmac_size Unexecuted instantiation: shake.c:br_hmac_size Line | Count | Source | 156 | 756 | { | 157 | 756 | return ctx->out_len; | 158 | 756 | } |
Unexecuted instantiation: sha2small.c:br_hmac_size Unexecuted instantiation: sha2big.c:br_hmac_size Unexecuted instantiation: sha1.c:br_hmac_size Unexecuted instantiation: md5sha1.c:br_hmac_size Unexecuted instantiation: md5.c:br_hmac_size Unexecuted instantiation: ghash_ctmul32.c:br_hmac_size Unexecuted instantiation: ecdsa_i31_vrfy_raw.c:br_hmac_size Unexecuted instantiation: ecdsa_i31_sign_raw.c:br_hmac_size Unexecuted instantiation: ecdsa_i31_bits.c:br_hmac_size Unexecuted instantiation: ecdsa_i15_vrfy_raw.c:br_hmac_size Unexecuted instantiation: ecdsa_i15_sign_raw.c:br_hmac_size Unexecuted instantiation: ecdsa_i15_bits.c:br_hmac_size Unexecuted instantiation: ec_secp521r1.c:br_hmac_size Unexecuted instantiation: ec_secp384r1.c:br_hmac_size Unexecuted instantiation: ec_secp256r1.c:br_hmac_size Unexecuted instantiation: ec_pubkey.c:br_hmac_size Unexecuted instantiation: ec_prime_i31.c:br_hmac_size Unexecuted instantiation: ec_prime_i15.c:br_hmac_size Unexecuted instantiation: ec_p256_m64.c:br_hmac_size Unexecuted instantiation: ec_p256_m62.c:br_hmac_size Unexecuted instantiation: ec_p256_m31.c:br_hmac_size Unexecuted instantiation: ec_p256_m15.c:br_hmac_size Unexecuted instantiation: ec_keygen.c:br_hmac_size Unexecuted instantiation: ec_default.c:br_hmac_size Unexecuted instantiation: ec_c25519_m64.c:br_hmac_size Unexecuted instantiation: ec_c25519_m62.c:br_hmac_size Unexecuted instantiation: ec_c25519_m31.c:br_hmac_size Unexecuted instantiation: ec_c25519_m15.c:br_hmac_size Unexecuted instantiation: ec_c25519_i31.c:br_hmac_size Unexecuted instantiation: ec_c25519_i15.c:br_hmac_size Unexecuted instantiation: ec_all_m31.c:br_hmac_size Unexecuted instantiation: enc64be.c:br_hmac_size Unexecuted instantiation: enc32le.c:br_hmac_size Unexecuted instantiation: enc32be.c:br_hmac_size Unexecuted instantiation: dec64be.c:br_hmac_size Unexecuted instantiation: dec32le.c:br_hmac_size Unexecuted instantiation: dec32be.c:br_hmac_size Unexecuted instantiation: ccopy.c:br_hmac_size Unexecuted instantiation: gcm.c:br_hmac_size Unexecuted instantiation: ccm.c:br_hmac_size Unexecuted instantiation: aes_small_enc.c:br_hmac_size Unexecuted instantiation: aes_ct_enc.c:br_hmac_size Unexecuted instantiation: aes_ct64_enc.c:br_hmac_size Unexecuted instantiation: aes_big_enc.c:br_hmac_size Unexecuted instantiation: i31_sub.c:br_hmac_size Unexecuted instantiation: i31_rshift.c:br_hmac_size Unexecuted instantiation: i31_ninv31.c:br_hmac_size Unexecuted instantiation: i31_montmul.c:br_hmac_size Unexecuted instantiation: i31_modpow.c:br_hmac_size Unexecuted instantiation: i31_iszero.c:br_hmac_size Unexecuted instantiation: i31_fmont.c:br_hmac_size Unexecuted instantiation: i31_encode.c:br_hmac_size Unexecuted instantiation: i31_decode.c:br_hmac_size Unexecuted instantiation: i31_decmod.c:br_hmac_size Unexecuted instantiation: i31_bitlen.c:br_hmac_size Unexecuted instantiation: i31_add.c:br_hmac_size Unexecuted instantiation: i15_sub.c:br_hmac_size Unexecuted instantiation: i15_rshift.c:br_hmac_size Unexecuted instantiation: i15_ninv15.c:br_hmac_size Unexecuted instantiation: i15_montmul.c:br_hmac_size Unexecuted instantiation: i15_modpow.c:br_hmac_size Unexecuted instantiation: i15_iszero.c:br_hmac_size Unexecuted instantiation: i15_fmont.c:br_hmac_size Unexecuted instantiation: i15_encode.c:br_hmac_size Unexecuted instantiation: i15_decode.c:br_hmac_size Unexecuted instantiation: i15_decmod.c:br_hmac_size Unexecuted instantiation: i15_bitlen.c:br_hmac_size Unexecuted instantiation: i15_add.c:br_hmac_size Unexecuted instantiation: i31_tmont.c:br_hmac_size Unexecuted instantiation: i31_muladd.c:br_hmac_size Unexecuted instantiation: i15_tmont.c:br_hmac_size Unexecuted instantiation: i15_muladd.c:br_hmac_size Unexecuted instantiation: i32_div32.c:br_hmac_size |
159 | | |
160 | | /* |
161 | | * \brief Get the underlying hash function. |
162 | | * |
163 | | * This function returns a pointer to the implementation vtable of the |
164 | | * hash function used for this HMAC context. |
165 | | * |
166 | | * \param hc HMAC context. |
167 | | * \return the hash function implementation. |
168 | | */ |
169 | | static inline const br_hash_class *br_hmac_get_digest( |
170 | | const br_hmac_context *hc) |
171 | 756 | { |
172 | 756 | return hc->dig.vtable; |
173 | 756 | } Unexecuted instantiation: module.cpp:br_hmac_get_digest(br_hmac_context const*) Unexecuted instantiation: poly1305_ctmul.c:br_hmac_get_digest Unexecuted instantiation: chacha20_sse2.c:br_hmac_get_digest Unexecuted instantiation: chacha20_ct.c:br_hmac_get_digest Unexecuted instantiation: aes_x86ni_ctrcbc.c:br_hmac_get_digest Unexecuted instantiation: aes_x86ni.c:br_hmac_get_digest Unexecuted instantiation: aes_small_ctrcbc.c:br_hmac_get_digest Unexecuted instantiation: aes_ct_ctrcbc.c:br_hmac_get_digest Unexecuted instantiation: aes_ct_ctr.c:br_hmac_get_digest Unexecuted instantiation: aes_ct64_ctrcbc.c:br_hmac_get_digest Unexecuted instantiation: aes_ct64.c:br_hmac_get_digest Unexecuted instantiation: aes_ct.c:br_hmac_get_digest Unexecuted instantiation: aes_common.c:br_hmac_get_digest Unexecuted instantiation: aes_big_ctrcbc.c:br_hmac_get_digest Unexecuted instantiation: prf_md5sha1.c:br_hmac_get_digest Unexecuted instantiation: prf.c:br_hmac_get_digest Unexecuted instantiation: sysrng.c:br_hmac_get_digest Unexecuted instantiation: hmac_drbg.c:br_hmac_get_digest Unexecuted instantiation: hmac.c:br_hmac_get_digest Unexecuted instantiation: shake.c:br_hmac_get_digest hkdf.c:br_hmac_get_digest Line | Count | Source | 171 | 756 | { | 172 | 756 | return hc->dig.vtable; | 173 | 756 | } |
Unexecuted instantiation: sha2small.c:br_hmac_get_digest Unexecuted instantiation: sha2big.c:br_hmac_get_digest Unexecuted instantiation: sha1.c:br_hmac_get_digest Unexecuted instantiation: md5sha1.c:br_hmac_get_digest Unexecuted instantiation: md5.c:br_hmac_get_digest Unexecuted instantiation: ghash_ctmul32.c:br_hmac_get_digest Unexecuted instantiation: ecdsa_i31_vrfy_raw.c:br_hmac_get_digest Unexecuted instantiation: ecdsa_i31_sign_raw.c:br_hmac_get_digest Unexecuted instantiation: ecdsa_i31_bits.c:br_hmac_get_digest Unexecuted instantiation: ecdsa_i15_vrfy_raw.c:br_hmac_get_digest Unexecuted instantiation: ecdsa_i15_sign_raw.c:br_hmac_get_digest Unexecuted instantiation: ecdsa_i15_bits.c:br_hmac_get_digest Unexecuted instantiation: ec_secp521r1.c:br_hmac_get_digest Unexecuted instantiation: ec_secp384r1.c:br_hmac_get_digest Unexecuted instantiation: ec_secp256r1.c:br_hmac_get_digest Unexecuted instantiation: ec_pubkey.c:br_hmac_get_digest Unexecuted instantiation: ec_prime_i31.c:br_hmac_get_digest Unexecuted instantiation: ec_prime_i15.c:br_hmac_get_digest Unexecuted instantiation: ec_p256_m64.c:br_hmac_get_digest Unexecuted instantiation: ec_p256_m62.c:br_hmac_get_digest Unexecuted instantiation: ec_p256_m31.c:br_hmac_get_digest Unexecuted instantiation: ec_p256_m15.c:br_hmac_get_digest Unexecuted instantiation: ec_keygen.c:br_hmac_get_digest Unexecuted instantiation: ec_default.c:br_hmac_get_digest Unexecuted instantiation: ec_c25519_m64.c:br_hmac_get_digest Unexecuted instantiation: ec_c25519_m62.c:br_hmac_get_digest Unexecuted instantiation: ec_c25519_m31.c:br_hmac_get_digest Unexecuted instantiation: ec_c25519_m15.c:br_hmac_get_digest Unexecuted instantiation: ec_c25519_i31.c:br_hmac_get_digest Unexecuted instantiation: ec_c25519_i15.c:br_hmac_get_digest Unexecuted instantiation: ec_all_m31.c:br_hmac_get_digest Unexecuted instantiation: enc64be.c:br_hmac_get_digest Unexecuted instantiation: enc32le.c:br_hmac_get_digest Unexecuted instantiation: enc32be.c:br_hmac_get_digest Unexecuted instantiation: dec64be.c:br_hmac_get_digest Unexecuted instantiation: dec32le.c:br_hmac_get_digest Unexecuted instantiation: dec32be.c:br_hmac_get_digest Unexecuted instantiation: ccopy.c:br_hmac_get_digest Unexecuted instantiation: gcm.c:br_hmac_get_digest Unexecuted instantiation: ccm.c:br_hmac_get_digest Unexecuted instantiation: aes_small_enc.c:br_hmac_get_digest Unexecuted instantiation: aes_ct_enc.c:br_hmac_get_digest Unexecuted instantiation: aes_ct64_enc.c:br_hmac_get_digest Unexecuted instantiation: aes_big_enc.c:br_hmac_get_digest Unexecuted instantiation: i31_sub.c:br_hmac_get_digest Unexecuted instantiation: i31_rshift.c:br_hmac_get_digest Unexecuted instantiation: i31_ninv31.c:br_hmac_get_digest Unexecuted instantiation: i31_montmul.c:br_hmac_get_digest Unexecuted instantiation: i31_modpow.c:br_hmac_get_digest Unexecuted instantiation: i31_iszero.c:br_hmac_get_digest Unexecuted instantiation: i31_fmont.c:br_hmac_get_digest Unexecuted instantiation: i31_encode.c:br_hmac_get_digest Unexecuted instantiation: i31_decode.c:br_hmac_get_digest Unexecuted instantiation: i31_decmod.c:br_hmac_get_digest Unexecuted instantiation: i31_bitlen.c:br_hmac_get_digest Unexecuted instantiation: i31_add.c:br_hmac_get_digest Unexecuted instantiation: i15_sub.c:br_hmac_get_digest Unexecuted instantiation: i15_rshift.c:br_hmac_get_digest Unexecuted instantiation: i15_ninv15.c:br_hmac_get_digest Unexecuted instantiation: i15_montmul.c:br_hmac_get_digest Unexecuted instantiation: i15_modpow.c:br_hmac_get_digest Unexecuted instantiation: i15_iszero.c:br_hmac_get_digest Unexecuted instantiation: i15_fmont.c:br_hmac_get_digest Unexecuted instantiation: i15_encode.c:br_hmac_get_digest Unexecuted instantiation: i15_decode.c:br_hmac_get_digest Unexecuted instantiation: i15_decmod.c:br_hmac_get_digest Unexecuted instantiation: i15_bitlen.c:br_hmac_get_digest Unexecuted instantiation: i15_add.c:br_hmac_get_digest Unexecuted instantiation: i31_tmont.c:br_hmac_get_digest Unexecuted instantiation: i31_muladd.c:br_hmac_get_digest Unexecuted instantiation: i15_tmont.c:br_hmac_get_digest Unexecuted instantiation: i15_muladd.c:br_hmac_get_digest Unexecuted instantiation: i32_div32.c:br_hmac_get_digest |
174 | | |
175 | | /** |
176 | | * \brief Inject some bytes in HMAC. |
177 | | * |
178 | | * The provided `len` bytes are injected as extra input in the HMAC |
179 | | * computation incarnated by the `ctx` HMAC context. It is acceptable |
180 | | * that `len` is zero, in which case `data` is ignored (and may be |
181 | | * `NULL`) and this function does nothing. |
182 | | */ |
183 | | void br_hmac_update(br_hmac_context *ctx, const void *data, size_t len); |
184 | | |
185 | | /** |
186 | | * \brief Compute the HMAC output. |
187 | | * |
188 | | * The destination buffer MUST be large enough to accommodate the result; |
189 | | * its length is at most the "natural length" of HMAC (i.e. the output |
190 | | * length of the underlying hash function). The context is NOT modified; |
191 | | * further bytes may be processed. Thus, "partial HMAC" values can be |
192 | | * efficiently obtained. |
193 | | * |
194 | | * Returned value is the output length (in bytes). |
195 | | * |
196 | | * \param ctx HMAC computation context. |
197 | | * \param out destination buffer for the HMAC output. |
198 | | * \return the produced value length (in bytes). |
199 | | */ |
200 | | size_t br_hmac_out(const br_hmac_context *ctx, void *out); |
201 | | |
202 | | /** |
203 | | * \brief Constant-time HMAC computation. |
204 | | * |
205 | | * This function compute the HMAC output in constant time. Some extra |
206 | | * input bytes are processed, then the output is computed. The extra |
207 | | * input consists in the `len` bytes pointed to by `data`. The `len` |
208 | | * parameter must lie between `min_len` and `max_len` (inclusive); |
209 | | * `max_len` bytes are actually read from `data`. Computing time (and |
210 | | * memory access pattern) will not depend upon the data byte contents or |
211 | | * the value of `len`. |
212 | | * |
213 | | * The output is written in the `out` buffer, that MUST be large enough |
214 | | * to receive it. |
215 | | * |
216 | | * The difference `max_len - min_len` MUST be less than 2<sup>30</sup> |
217 | | * (i.e. about one gigabyte). |
218 | | * |
219 | | * This function computes the output properly only if the underlying |
220 | | * hash function uses MD padding (i.e. MD5, SHA-1, SHA-224, SHA-256, |
221 | | * SHA-384 or SHA-512). |
222 | | * |
223 | | * The provided context is NOT modified. |
224 | | * |
225 | | * \param ctx the (already initialised) HMAC computation context. |
226 | | * \param data the extra input bytes. |
227 | | * \param len the extra input length (in bytes). |
228 | | * \param min_len minimum extra input length (in bytes). |
229 | | * \param max_len maximum extra input length (in bytes). |
230 | | * \param out destination buffer for the HMAC output. |
231 | | * \return the produced value length (in bytes). |
232 | | */ |
233 | | size_t br_hmac_outCT(const br_hmac_context *ctx, |
234 | | const void *data, size_t len, size_t min_len, size_t max_len, |
235 | | void *out); |
236 | | |
237 | | #ifdef __cplusplus |
238 | | } |
239 | | #endif |
240 | | |
241 | | #endif |