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