1#ifndef crypto_auth_hmacsha256_H
2#define crypto_auth_hmacsha256_H
3
4#include <stddef.h>
5#include "crypto_hash_sha256.h"
6#include "export.h"
7
8#ifdef __cplusplus
9# ifdef __GNUC__
10#  pragma GCC diagnostic ignored "-Wlong-long"
11# endif
12extern "C" {
13#endif
14
15#define crypto_auth_hmacsha256_BYTES 32U
16SODIUM_EXPORT
17size_t crypto_auth_hmacsha256_bytes(void);
18
19#define crypto_auth_hmacsha256_KEYBYTES 32U
20SODIUM_EXPORT
21size_t crypto_auth_hmacsha256_keybytes(void);
22
23SODIUM_EXPORT
24int crypto_auth_hmacsha256(unsigned char *out,
25                           const unsigned char *in,
26                           unsigned long long inlen,
27                           const unsigned char *k);
28
29SODIUM_EXPORT
30int crypto_auth_hmacsha256_verify(const unsigned char *h,
31                                  const unsigned char *in,
32                                  unsigned long long inlen,
33                                  const unsigned char *k)
34            __attribute__ ((warn_unused_result));
35
36/* ------------------------------------------------------------------------- */
37
38typedef struct crypto_auth_hmacsha256_state {
39    crypto_hash_sha256_state ictx;
40    crypto_hash_sha256_state octx;
41} crypto_auth_hmacsha256_state;
42
43SODIUM_EXPORT
44size_t crypto_auth_hmacsha256_statebytes(void);
45
46SODIUM_EXPORT
47int crypto_auth_hmacsha256_init(crypto_auth_hmacsha256_state *state,
48                                const unsigned char *key,
49                                size_t keylen);
50
51SODIUM_EXPORT
52int crypto_auth_hmacsha256_update(crypto_auth_hmacsha256_state *state,
53                                  const unsigned char *in,
54                                  unsigned long long inlen);
55
56SODIUM_EXPORT
57int crypto_auth_hmacsha256_final(crypto_auth_hmacsha256_state *state,
58                                 unsigned char *out);
59
60
61SODIUM_EXPORT
62void crypto_auth_hmacsha256_keygen(unsigned char k[crypto_auth_hmacsha256_KEYBYTES]);
63
64#ifdef __cplusplus
65}
66#endif
67
68#endif
69