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