/****************************************************************************
 * include/crypto/poly1305.h
 *
 * SPDX-License-Identifier: LicenseRef-NuttX-PublicDomain
 *
 * Public Domain poly1305 from Andrew Moon
 *
 ****************************************************************************/

#ifndef __INCLUDE_CRYPTO_POLY1305_H
#define __INCLUDE_CRYPTO_POLY1305_H

/****************************************************************************
 * Included Files
 ****************************************************************************/

#include <sys/types.h>

#define poly1305_block_size 16

typedef struct poly1305_state
{
  unsigned long r[5];
  unsigned long h[5];
  unsigned long pad[4];
  size_t leftover;
  unsigned char buffer[poly1305_block_size];
  unsigned char final;
} poly1305_state;

void poly1305_begin(FAR poly1305_state *, FAR const unsigned char *);
void poly1305_update(FAR poly1305_state *,
                     FAR const unsigned char *, size_t);
void poly1305_finish(FAR poly1305_state *, FAR unsigned char *);

#endif /* __INCLUDE_CRYPTO_POLY1305_H */
