1/*
2 * Copyright (c) 2003,2011,2014 Apple Inc. All Rights Reserved.
3 *
4 * The contents of this file constitute Original Code as defined in and are
5 * subject to the Apple Public Source License Version 1.2 (the 'License').
6 * You may not use this file except in compliance with the License. Please
7 * obtain a copy of the License at http://www.apple.com/publicsource and
8 * read it before using this file.
9 *
10 * This Original Code and all software distributed under the License are
11 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
12 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
13 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
14 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
15 * Please see the License for the specific language governing rights and
16 * limitations under the License.
17 */
18/*
19 * pbkdDigest.h - SHA1/MD5 digest object for HMAC and PBE routines
20 */
21
22#ifndef	_PBKD_DIGEST_H_
23#define _PBKD_DIGEST_H_
24
25#include <Security/cssmtype.h>
26#include <CommonCrypto/CommonDigest.h>
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
32#define kSHA1DigestSize  		CC_SHA1_DIGEST_LENGTH
33#define kSHA1BlockSize  		CC_SHA1_BLOCK_BYTES
34
35#define kMD5DigestSize  		CC_MD5_DIGEST_LENGTH
36#define kMD5BlockSize  			CC_MD5_BLOCK_BYTES
37
38#define kMD2DigestSize  		CC_MD2_DIGEST_LENGTH
39#define kMD2BlockSize  			CC_MD2_BLOCK_BYTES
40
41#define kMaxDigestSize			kSHA1DigestSize
42
43typedef int (*DigestInitFcn)(void *ctx);
44typedef int (*DigestUpdateFcn)(void *ctx, const void *data, unsigned long len);
45typedef int (*DigestFinalFcn)(void *md, void *c);
46
47/* callouts to eay/libmd implementations */
48typedef struct {
49	DigestInitFcn		init;
50	DigestUpdateFcn		update;
51	DigestFinalFcn		final;
52} DigestOps;
53
54typedef	struct {
55	union {
56		CC_SHA1_CTX 	sha1Context;
57		CC_MD5_CTX		md5Context;
58		CC_MD2_CTX		md2Context;
59	} dig;
60	DigestOps 		*ops;
61	CSSM_ALGORITHMS hashAlg;
62} DigestCtx;
63
64/* Ops on a DigestCtx - all return zero on error, like the underlying digests do */
65int DigestCtxInit(
66	DigestCtx		*ctx,
67	CSSM_ALGORITHMS hashAlg);
68void DigestCtxFree(
69	DigestCtx 	*ctx);
70int DigestCtxUpdate(
71	DigestCtx 	*ctx,
72	const void 	*textPtr,
73	uint32 textLen);
74int DigestCtxFinal(
75	DigestCtx 	*ctx,
76	void 		*digest);
77
78#ifdef __cplusplus
79}
80#endif
81
82#endif	/* _PBKD_DIGEST_H_ */
83
84