118334Speter#ifndef crypto_auth_hmacsha512_H
218334Speter#define crypto_auth_hmacsha512_H
318334Speter
418334Speter#include <stddef.h>
518334Speter#include "crypto_hash_sha512.h"
618334Speter#include "export.h"
718334Speter
818334Speter#ifdef __cplusplus
918334Speter# ifdef __GNUC__
1018334Speter#  pragma GCC diagnostic ignored "-Wlong-long"
1118334Speter# endif
1218334Speterextern "C" {
1318334Speter#endif
1418334Speter
1518334Speter#define crypto_auth_hmacsha512_BYTES 64U
1618334SpeterSODIUM_EXPORT
1718334Spetersize_t crypto_auth_hmacsha512_bytes(void);
1818334Speter
1918334Speter#define crypto_auth_hmacsha512_KEYBYTES 32U
2018334SpeterSODIUM_EXPORT
2118334Spetersize_t crypto_auth_hmacsha512_keybytes(void);
2218334Speter
2318334SpeterSODIUM_EXPORT
2418334Speterint crypto_auth_hmacsha512(unsigned char *out,
2518334Speter                           const unsigned char *in,
2618334Speter                           unsigned long long inlen,
2718334Speter                           const unsigned char *k);
2818334Speter
2918334SpeterSODIUM_EXPORT
3018334Speterint crypto_auth_hmacsha512_verify(const unsigned char *h,
3118334Speter                                  const unsigned char *in,
3218334Speter                                  unsigned long long inlen,
3318334Speter                                  const unsigned char *k)
3418334Speter            __attribute__ ((warn_unused_result));
3518334Speter
3618334Speter/* ------------------------------------------------------------------------- */
3718334Speter
3818334Spetertypedef struct crypto_auth_hmacsha512_state {
3918334Speter    crypto_hash_sha512_state ictx;
4018334Speter    crypto_hash_sha512_state octx;
4118334Speter} crypto_auth_hmacsha512_state;
4218334Speter
4318334SpeterSODIUM_EXPORT
4418334Spetersize_t crypto_auth_hmacsha512_statebytes(void);
4518334Speter
4618334SpeterSODIUM_EXPORT
4718334Speterint crypto_auth_hmacsha512_init(crypto_auth_hmacsha512_state *state,
4818334Speter                                const unsigned char *key,
4918334Speter                                size_t keylen);
5018334Speter
5118334SpeterSODIUM_EXPORT
5218334Speterint crypto_auth_hmacsha512_update(crypto_auth_hmacsha512_state *state,
5318334Speter                                  const unsigned char *in,
5418334Speter                                  unsigned long long inlen);
5518334Speter
5618334SpeterSODIUM_EXPORT
5718334Speterint crypto_auth_hmacsha512_final(crypto_auth_hmacsha512_state *state,
5818334Speter                                 unsigned char *out);
5918334Speter
6018334SpeterSODIUM_EXPORT
6118334Spetervoid crypto_auth_hmacsha512_keygen(unsigned char k[crypto_auth_hmacsha512_KEYBYTES]);
6218334Speter
6318334Speter#ifdef __cplusplus
6418334Speter}
6518334Speter#endif
6618334Speter
6718334Speter#endif
6818334Speter