]> git.saurik.com Git - apple/security.git/blob - OSX/libsecurity_apple_csp/lib/SHA1_MD5_Object.cpp
Security-57740.31.2.tar.gz
[apple/security.git] / OSX / libsecurity_apple_csp / lib / SHA1_MD5_Object.cpp
1 /*
2 * Copyright (c) 2000-2004,2011-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 /*
26 * DigestObject.cpp - generic C++ implementations of SHA1 and MD5.
27 *
28 */
29
30 #include "SHA1_MD5_Object.h"
31 #include <stdexcept>
32 #include <string.h>
33
34 /***
35 *** MD5
36 ***/
37 void MD5Object::digestInit()
38 {
39 mIsDone = false;
40 CC_MD5_Init(&mCtx);
41 }
42
43 void MD5Object::digestUpdate(
44 const void *data,
45 size_t len)
46 {
47 if(mIsDone) {
48 throw std::runtime_error("MD5 digestUpdate after final");
49 }
50 CC_MD5_Update(&mCtx, data, (CC_LONG)len);
51 }
52
53 void MD5Object::digestFinal(
54 void *digest)
55 {
56 if(mIsDone) {
57 throw std::runtime_error("MD5 digestFinal after final");
58 }
59 CC_MD5_Final((unsigned char *)digest, &mCtx);
60 mIsDone = true;
61 }
62
63 /* use default memberwise init */
64 DigestObject *MD5Object::digestClone() const
65 {
66 return new MD5Object(*this);
67 }
68
69 size_t MD5Object::digestSizeInBytes() const
70 {
71 return CC_MD5_DIGEST_LENGTH;
72 }
73
74 /***
75 *** SHA1
76 ***/
77 void SHA1Object::digestInit()
78 {
79 mIsDone = false;
80 CC_SHA1_Init(&mCtx);
81 }
82
83 void SHA1Object::digestUpdate(
84 const void *data,
85 size_t len)
86 {
87 CC_SHA1_Update(&mCtx, (const unsigned char *)data, (CC_LONG)len);
88 }
89
90 void SHA1Object::digestFinal(
91 void *digest)
92 {
93 CC_SHA1_Final((unsigned char *)digest, &mCtx);
94 mIsDone = true;
95 }
96
97 /* use default memberwise init */
98 DigestObject *SHA1Object::digestClone() const
99 {
100 return new SHA1Object(*this);
101 }
102
103 size_t SHA1Object::digestSizeInBytes() const
104 {
105 return CC_SHA1_DIGEST_LENGTH;
106 }
107