2 * Copyright (C) 2001-2003 by NBMK Encryption Technologies.
5 * NBMK Encryption Technologies provides no support of any kind for
6 * this software. Questions or concerns about it may be addressed to
7 * the members of the relevant open-source community at
8 * <tech-crypto@netbsd.org>.
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions are
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions and the following disclaimer.
17 * 2. Redistributions in binary form must reproduce the above
18 * copyright notice, this list of conditions and the following
19 * disclaimer in the documentation and/or other materials provided
20 * with the distribution.
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 /*****************************************************************************
36 * @(#) n8_pub_hash.h 1.9@(#)
37 *****************************************************************************/
39 /*****************************************************************************/
41 * @brief Public declarations for hash operations.
43 * Public header file for hash operations.
45 *****************************************************************************/
47 /*****************************************************************************
49 * 01/20/04 bac Fixed __cplusplus beginning directive (Bug 1002).
50 * 04/17/03 brr Moved hash size constants to this public include file.
52 * 10/24/01 dkm Moved HMAC defines from hash.h.
53 * 10/15/01 bac Fixed some signatures to take unsigned ints.
54 * 10/12/01 dkm Original version.
55 ****************************************************************************/
64 #include "n8_pub_common.h"
66 /*****************************************************************************
68 *****************************************************************************/
70 #define N8_MAX_HASH_LENGTH (18 * 1024)
71 #define N8_MAX_KEY_LENGTH (18 * 1024)
72 #define N8_MAX_SSL_KEY_MATERIAL_LENGTH 240
73 #define N8_MAX_TLS_KEY_MATERIAL_LENGTH 224
74 #define N8_MAX_IKE_ITERATIONS 15
75 #define N8_IKE_SKEYID_ITERATIONS 3
76 #define N8_IKE_PRF_ITERATIONS 1
77 #define N8_IKE_ZERO_BYTE_LEN 1
79 #define MD5_HASH_RESULT_LENGTH 16
80 #define SHA1_HASH_RESULT_LENGTH 20
81 #define HMAC_96_HASH_RESULT_LENGTH 12
83 /*****************************************************************************
84 * Structures/type definitions
85 *****************************************************************************/
86 #define N8_HMAC_KEY_LENGTH_ZERO 0
87 #define N8_NO_HMAC_KEY NULL
105 uint32_t keyLength
; /* HMAC key length */
106 N8_Buffer_t
*key_p
; /* ptr to key */
110 /*****************************************************************************
111 * Function prototypes
112 *****************************************************************************/
113 N8_Status_t
N8_HashInitialize(N8_HashObject_t
*hashObj_p
,
114 const N8_HashAlgorithm_t alg
,
115 const N8_HashInfo_t
*hashInfo_p
,
116 N8_Event_t
*event_p
);
119 N8_Status_t
N8_HashPartial(N8_HashObject_t
*obj_p
,
120 const N8_Buffer_t
*msg_p
,
121 const unsigned int msgLength
,
122 N8_Event_t
*event_p
);
124 N8_Status_t
N8_HashEnd(N8_HashObject_t
*obj_p
,
125 N8_Buffer_t
*result_p
,
126 N8_Event_t
*event_p
);
128 N8_Status_t
N8_HashClone(const N8_HashObject_t
*orig_p
,
129 N8_HashObject_t
*clone_p
);
131 N8_Status_t
N8_HandshakeHashPartial(N8_HashObject_t
*md5Obj_p
,
132 N8_HashObject_t
*shaObj_p
,
133 const N8_Buffer_t
*msg_p
,
134 const unsigned int msgLength
,
135 N8_Event_t
*event_p
);
137 N8_Status_t
N8_HandshakeHashEnd(N8_HashObject_t
*md5Obj_p
,
138 N8_HashObject_t
*sha1Obj_p
,
139 const N8_HashProtocol_t protocol
,
140 const N8_Buffer_t
*key_p
,
141 const unsigned int keyLength
,
142 const N8_HashRole_t role
,
143 N8_Buffer_t
*md5Result_p
,
144 N8_Buffer_t
*sha1Result_p
,
145 N8_Event_t
*event_p
);
147 N8_Status_t
N8_SSLKeyMaterialHash (N8_HashInfo_t
*obj_p
,
148 const N8_Buffer_t
*random_p
,
149 const unsigned int outputLength
,
150 N8_Buffer_t
*keyMaterial_p
,
151 N8_Event_t
*event_p
);
153 N8_Status_t
N8_TLSKeyMaterialHash(N8_HashInfo_t
*obj_p
,
154 const N8_Buffer_t
*label_p
,
155 const unsigned int labelLength
,
156 const N8_Buffer_t
*seed_p
,
157 const unsigned int seedLength
,
158 const unsigned int outputLength
,
159 N8_Buffer_t
*keyMaterial_p
,
160 N8_Event_t
*event_p
);
162 N8_Status_t
N8_IKEPrf(const N8_HashAlgorithm_t alg
,
163 const N8_HashInfo_t
*hashInfo_p
,
164 const N8_Buffer_t
*msg_p
,
165 const uint32_t msgLength
,
166 N8_Buffer_t
*result_p
,
167 N8_Event_t
*event_p
);
169 N8_Status_t
N8_IKESKEYIDExpand (const N8_HashAlgorithm_t alg
,
170 const N8_HashInfo_t
*hashInfo_p
,
171 const N8_Buffer_t
*msg_p
,
172 const uint32_t msgLength
,
173 N8_Buffer_t
*SKEYID_d
,
174 N8_Buffer_t
*SKEYID_a
,
175 N8_Buffer_t
*SKEYID_e
,
176 N8_Event_t
*event_p
);
178 N8_Status_t
N8_IKEKeyMaterialExpand(const N8_HashAlgorithm_t alg
,
179 const N8_HashInfo_t
*hashInfo_p
,
180 const N8_Buffer_t
*msg_p
,
181 const uint32_t msgLength
,
182 N8_Buffer_t
*result_p
,
183 const uint32_t result_len
,
184 N8_Event_t
*event_p
);
186 N8_Status_t
N8_IKEEncryptKeyExpand(const N8_HashAlgorithm_t alg
,
187 const N8_HashInfo_t
*hashInfo_p
,
188 N8_Buffer_t
*result_p
,
189 const uint32_t result_len
,
190 N8_Event_t
*event_p
);
192 N8_Status_t
N8_HashCompleteMessage(N8_HashObject_t
*obj_p
,
193 const N8_Buffer_t
*msg_p
,
194 const unsigned int msgLength
,
195 N8_Buffer_t
*result_p
,
196 N8_Event_t
*event_p
);
198 N8_Status_t
N8_HashCompleteMessage_uio(N8_HashObject_t
*obj_p
,
200 const unsigned int msgLength
,
201 N8_Buffer_t
*result_p
,
202 N8_Event_t
*event_p
);