1/*
2 * Copyright (c) 2003-2005 Apple Computer, 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
20 */
21
22#ifndef	_PBKD_DIGEST_H_
23#define _PBKD_DIGEST_H_
24
25#include <Security/cssmtype.h>
26#include <openssl/md5.h>
27#include <openssl/sha.h>
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33#define kSHA1DigestSize  		SHA_DIGEST_LENGTH
34#define kSHA1BlockSize  		SHA_CBLOCK
35
36#define kMD5DigestSize  		MD5_DIGEST_LENGTH
37#define kMD5BlockSize  			MD5_CBLOCK
38
39typedef int (*DigestInitFcn)(void *ctx);
40typedef int (*DigestUpdateFcn)(void *ctx, const void *data, unsigned long len);
41typedef int (*DigestFinalFcn)(void *md, void *c);
42
43/* callouts to libcrypt */
44typedef struct {
45	DigestInitFcn		init;
46	DigestUpdateFcn		update;
47	DigestFinalFcn		final;
48} DigestOps;
49
50typedef	struct {
51	union {
52		SHA_CTX 	sha1Context;
53		MD5_CTX		md5Context;
54	} dig;
55	DigestOps 		*ops;
56	CSSM_BOOL 		isSha1;
57} DigestCtx;
58
59/* Ops on a DigestCtx */
60int DigestCtxInit(
61	DigestCtx 	*ctx,
62	CSSM_BOOL	isSha1);
63void DigestCtxFree(
64	DigestCtx 	*ctx);
65int DigestCtxUpdate(
66	DigestCtx 	*ctx,
67	const void 	*textPtr,
68	uint32 textLen);
69int DigestCtxFinal(
70	DigestCtx 	*ctx,
71	void 		*digest);
72
73#ifdef __cplusplus
74}
75#endif
76
77#endif	/* _PBKD_DIGEST_H_ */
78
79