umac.h revision bd77cf78387b72b7b3ea870459077672bf75c3b5
1bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman/* $OpenBSD: umac.h,v 1.1 2007/06/07 19:37:34 pvalchev Exp $ */ 2bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman/* ----------------------------------------------------------------------- 3bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 4bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * umac.h -- C Implementation UMAC Message Authentication 5bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 6bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * Version 0.93a of rfc4418.txt -- 2006 July 14 7bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 8bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * For a full description of UMAC message authentication see the UMAC 9bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * world-wide-web page at http://www.cs.ucdavis.edu/~rogaway/umac 10bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * Please report bugs and suggestions to the UMAC webpage. 11bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 12bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * Copyright (c) 1999-2004 Ted Krovetz 13bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 14bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * Permission to use, copy, modify, and distribute this software and 15bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * its documentation for any purpose and with or without fee, is hereby 16bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * granted provided that the above copyright notice appears in all copies 17bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * and in supporting documentation, and that the name of the copyright 18bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * holder not be used in advertising or publicity pertaining to 19bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * distribution of the software without specific, written prior permission. 20bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 21bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * Comments should be directed to Ted Krovetz (tdk@acm.org) 22bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 23bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * ---------------------------------------------------------------------- */ 24bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 25bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman /* ////////////////////// IMPORTANT NOTES ///////////////////////////////// 26bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 27bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 1) This version does not work properly on messages larger than 16MB 28bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 29bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 2) If you set the switch to use SSE2, then all data must be 16-byte 30bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * aligned 31bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 32bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 3) When calling the function umac(), it is assumed that msg is in 33bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * a writable buffer of length divisible by 32 bytes. The message itself 34bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * does not have to fill the entire buffer, but bytes beyond msg may be 35bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * zeroed. 36bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 37bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 4) Two free AES implementations are supported by this implementation of 38bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * UMAC. Paulo Barreto's version is in the public domain and can be found 39bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * at http://www.esat.kuleuven.ac.be/~rijmen/rijndael/ (search for 40bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * "Barreto"). The only two files needed are rijndael-alg-fst.c and 41bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * rijndael-alg-fst.h. 42bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * Brian Gladman's version is distributed with GNU Public lisence 43bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * and can be found at http://fp.gladman.plus.com/AES/index.htm. It 44bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * includes a fast IA-32 assembly version. 45bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 46bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman /////////////////////////////////////////////////////////////////////// */ 47bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifndef HEADER_UMAC_H 48bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#define HEADER_UMAC_H 49bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 50bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 51bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifdef __cplusplus 52bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman extern "C" { 53bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif 54bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 55bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanstruct umac_ctx *umac_new(u_char key[]); 56bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman/* Dynamically allocate a umac_ctx struct, initialize variables, 57bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * generate subkeys from key. 58bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman */ 59bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 60bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#if 0 61bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint umac_reset(struct umac_ctx *ctx); 62bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman/* Reset a umac_ctx to begin authenicating a new message */ 63bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif 64bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 65bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint umac_update(struct umac_ctx *ctx, u_char *input, long len); 66bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman/* Incorporate len bytes pointed to by input into context ctx */ 67bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 68bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint umac_final(struct umac_ctx *ctx, u_char tag[], u_char nonce[8]); 69bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman/* Incorporate any pending data and the ctr value, and return tag. 70bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * This function returns error code if ctr < 0. 71bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman */ 72bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 73bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint umac_delete(struct umac_ctx *ctx); 74bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman/* Deallocate the context structure */ 75bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 76bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#if 0 77bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint umac(struct umac_ctx *ctx, u_char *input, 78bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman long len, u_char tag[], 79bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman u_char nonce[8]); 80bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman/* All-in-one implementation of the functions Reset, Update and Final */ 81bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif 82bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 83bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman/* uhash.h */ 84bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 85bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 86bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#if 0 87bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmantypedef struct uhash_ctx *uhash_ctx_t; 88bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman /* The uhash_ctx structure is defined by the implementation of the */ 89bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman /* UHASH functions. */ 90bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 91bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanuhash_ctx_t uhash_alloc(u_char key[16]); 92bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman /* Dynamically allocate a uhash_ctx struct and generate subkeys using */ 93bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman /* the kdf and kdf_key passed in. If kdf_key_len is 0 then RC6 is */ 94bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman /* used to generate key with a fixed key. If kdf_key_len > 0 but kdf */ 95bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman /* is NULL then the first 16 bytes pointed at by kdf_key is used as a */ 96bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman /* key for an RC6 based KDF. */ 97bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 98bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint uhash_free(uhash_ctx_t ctx); 99bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 100bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint uhash_set_params(uhash_ctx_t ctx, 101bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman void *params); 102bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 103bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint uhash_reset(uhash_ctx_t ctx); 104bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 105bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint uhash_update(uhash_ctx_t ctx, 106bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman u_char *input, 107bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman long len); 108bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 109bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint uhash_final(uhash_ctx_t ctx, 110bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman u_char ouput[]); 111bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 112bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint uhash(uhash_ctx_t ctx, 113bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman u_char *input, 114bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman long len, 115bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman u_char output[]); 116bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 117bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif 118bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 119bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifdef __cplusplus 120bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman } 121bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif 122bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 123bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif /* HEADER_UMAC_H */ 124