1/*
2 * Copyright (c) 2002,2005-2007,2010-2012,2014 Apple Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24/*
25 * tls_hmac.h - Declarations of HMAC routines used by TLS
26 */
27
28#ifndef	_TLS_HMAC_H_
29#define _TLS_HMAC_H_
30
31#ifdef	__cplusplus
32extern "C" {
33#endif
34
35#include <sys/types.h>
36#include "cipherSpecs.h"
37
38/* forward declaration of HMAC object */
39struct 						HMACReference;
40
41/* Opaque reference to an HMAC session context */
42struct                      HMACContext;
43typedef struct HMACContext  *HMACContextRef;
44
45
46/* For convenience..the max size of HMAC, in bytes, this module will ever return */
47#define TLS_HMAC_MAX_SIZE		48
48
49/* Create an HMAC session */
50typedef int (*HMAC_AllocFcn) (
51	const struct HMACReference	*hmac,
52	const void					*keyPtr,
53	size_t                      keyLen,
54	HMACContextRef				*hmacCtx);			// RETURNED
55
56/* Free a session */
57typedef int (*HMAC_FreeFcn) (
58	HMACContextRef	hmacCtx);
59
60/* Reusable init, using same key */
61typedef int (*HMAC_InitFcn) (
62	HMACContextRef	hmacCtx);
63
64/* normal crypt ops */
65typedef int (*HMAC_UpdateFcn) (
66	HMACContextRef	hmacCtx,
67	const void		*data,
68	size_t          dataLen);
69
70typedef int (*HMAC_FinalFcn) (
71	HMACContextRef	hmacCtx,
72	void			*hmac,			// mallocd by caller
73	size_t          *hmacLen);		// IN/OUT
74
75/* one-shot */
76typedef int (*HMAC_HmacFcn) (
77	HMACContextRef	hmacCtx,
78	const void		*data,
79	size_t          dataLen,
80	void			*hmac,			// mallocd by caller
81	size_t          *hmacLen);		// IN/OUT
82
83
84typedef struct HMACParams {
85} HMACParams;
86
87typedef struct HMACReference {
88    size_t          macSize;
89    HMAC_Algs		alg;
90	HMAC_AllocFcn	alloc;
91	HMAC_FreeFcn	free;
92	HMAC_InitFcn	init;
93	HMAC_UpdateFcn	update;
94	HMAC_FinalFcn	final;
95	HMAC_HmacFcn	hmac;
96} HMACReference;
97
98extern const HMACReference TlsHmacNull;
99extern const HMACReference TlsHmacSHA1;
100extern const HMACReference TlsHmacMD5;
101extern const HMACReference TlsHmacSHA256;
102extern const HMACReference TlsHmacSHA384;
103
104
105#ifdef	__cplusplus
106}
107#endif
108#endif	/* _TLS_HMAC_H_ */
109