123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- /* $OpenBSD: umac.h,v 1.4 2019/06/07 14:18:48 dtucker Exp $ */
- /* -----------------------------------------------------------------------
- *
- * umac.h -- C Implementation UMAC Message Authentication
- *
- * Version 0.93a of rfc4418.txt -- 2006 July 14
- *
- * For a full description of UMAC message authentication see the UMAC
- * world-wide-web page at http://www.cs.ucdavis.edu/~rogaway/umac
- * Please report bugs and suggestions to the UMAC webpage.
- *
- * Copyright (c) 1999-2004 Ted Krovetz
- *
- * Permission to use, copy, modify, and distribute this software and
- * its documentation for any purpose and with or without fee, is hereby
- * granted provided that the above copyright notice appears in all copies
- * and in supporting documentation, and that the name of the copyright
- * holder not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- * Comments should be directed to Ted Krovetz (tdk@acm.org)
- *
- * ---------------------------------------------------------------------- */
-
- /* ////////////////////// IMPORTANT NOTES /////////////////////////////////
- *
- * 1) This version does not work properly on messages larger than 16MB
- *
- * 2) If you set the switch to use SSE2, then all data must be 16-byte
- * aligned
- *
- * 3) When calling the function umac(), it is assumed that msg is in
- * a writable buffer of length divisible by 32 bytes. The message itself
- * does not have to fill the entire buffer, but bytes beyond msg may be
- * zeroed.
- *
- * 4) Two free AES implementations are supported by this implementation of
- * UMAC. Paulo Barreto's version is in the public domain and can be found
- * at http://www.esat.kuleuven.ac.be/~rijmen/rijndael/ (search for
- * "Barreto"). The only two files needed are rijndael-alg-fst.c and
- * rijndael-alg-fst.h.
- * Brian Gladman's version is distributed with GNU Public license
- * and can be found at http://fp.gladman.plus.com/AES/index.htm. It
- * includes a fast IA-32 assembly version.
- *
- /////////////////////////////////////////////////////////////////////// */
- #ifndef HEADER_UMAC_H
- #define HEADER_UMAC_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- struct umac_ctx *umac_new(const u_char key[]);
- /* Dynamically allocate a umac_ctx struct, initialize variables,
- * generate subkeys from key.
- */
- #if 0
- int umac_reset(struct umac_ctx *ctx);
- /* Reset a umac_ctx to begin authenicating a new message */
- #endif
- int umac_update(struct umac_ctx *ctx, const u_char *input, long len);
- /* Incorporate len bytes pointed to by input into context ctx */
- int umac_final(struct umac_ctx *ctx, u_char tag[], const u_char nonce[8]);
- /* Incorporate any pending data and the ctr value, and return tag.
- * This function returns error code if ctr < 0.
- */
- int umac_delete(struct umac_ctx *ctx);
- /* Deallocate the context structure */
- #if 0
- int umac(struct umac_ctx *ctx, u_char *input,
- long len, u_char tag[],
- u_char nonce[8]);
- /* All-in-one implementation of the functions Reset, Update and Final */
- #endif
- /* uhash.h */
- #if 0
- typedef struct uhash_ctx *uhash_ctx_t;
- /* The uhash_ctx structure is defined by the implementation of the */
- /* UHASH functions. */
-
- uhash_ctx_t uhash_alloc(u_char key[16]);
- /* Dynamically allocate a uhash_ctx struct and generate subkeys using */
- /* the kdf and kdf_key passed in. If kdf_key_len is 0 then RC6 is */
- /* used to generate key with a fixed key. If kdf_key_len > 0 but kdf */
- /* is NULL then the first 16 bytes pointed at by kdf_key is used as a */
- /* key for an RC6 based KDF. */
-
- int uhash_free(uhash_ctx_t ctx);
- int uhash_set_params(uhash_ctx_t ctx,
- void *params);
- int uhash_reset(uhash_ctx_t ctx);
- int uhash_update(uhash_ctx_t ctx,
- u_char *input,
- long len);
- int uhash_final(uhash_ctx_t ctx,
- u_char output[]);
- int uhash(uhash_ctx_t ctx,
- u_char *input,
- long len,
- u_char output[]);
- #endif
- /* matching umac-128 API, we reuse umac_ctx, since it's opaque */
- struct umac_ctx *umac128_new(const u_char key[]);
- int umac128_update(struct umac_ctx *ctx, const u_char *input, long len);
- int umac128_final(struct umac_ctx *ctx, u_char tag[], const u_char nonce[8]);
- int umac128_delete(struct umac_ctx *ctx);
- #ifdef __cplusplus
- }
- #endif
- #endif /* HEADER_UMAC_H */
|