1/* Copyright (c) 1998,2011,2014 Apple Inc.  All Rights Reserved.
2 *
3 * NOTICE: USE OF THE MATERIALS ACCOMPANYING THIS NOTICE IS SUBJECT
4 * TO THE TERMS OF THE SIGNED "FAST ELLIPTIC ENCRYPTION (FEE) REFERENCE
5 * SOURCE CODE EVALUATION AGREEMENT" BETWEEN APPLE, INC. AND THE
6 * ORIGINAL LICENSEE THAT OBTAINED THESE MATERIALS FROM APPLE,
7 * INC.  ANY USE OF THESE MATERIALS NOT PERMITTED BY SUCH AGREEMENT WILL
8 * EXPOSE YOU TO LIABILITY.
9 ***************************************************************************
10 *
11 * NSMD5Hash.h
12 *
13 * Revision History
14 * ----------------
15 * 28 Mar 97 at Apple
16 *	Created.
17 */
18
19/*
20 * Note: our _priv ivar is actually a feeHash pointer.
21 */
22#import "NSCryptors.h"
23#import "NSMD5Hash.h"
24#import "feeHash.h"
25#import "falloc.h"
26
27@implementation NSMD5Hash
28
29+ digester
30{
31	return [[self alloc] init];
32}
33
34- init
35{
36	if(_priv == NULL) {
37		_priv = feeHashAlloc();
38	}
39	else {
40		feeHashReinit(_priv);
41	}
42	return self;
43}
44
45- (void)digestData:(NSData *)data
46{
47	if(_priv == NULL) {
48		return;
49	}
50	feeHashAddData(_priv, [data bytes], [data length]);
51}
52
53- (NSData *)messageDigest
54{
55	unsigned char *cp;
56	NSData *md;
57
58	if(_priv == NULL) {
59		return nil;
60	}
61	cp = feeHashDigest(_priv);
62	md = [NSData dataWithBytes:cp length:feeHashDigestLen()];
63	feeHashReinit(_priv);
64	return md;
65}
66
67- (NSData *)digestData:(NSData *)data withSalt:(NSData *)salt
68{
69	if(_priv == NULL) {
70		return nil;
71	}
72	if(salt != nil) {
73		[self digestData:salt];
74	}
75	[self digestData:data];
76	return [self messageDigest];
77}
78
79@end
80