]> git.saurik.com Git - apple/security.git/blame - libsecurity_apple_csp/lib/BlockCryptor.cpp
Security-55471.14.18.tar.gz
[apple/security.git] / libsecurity_apple_csp / lib / BlockCryptor.cpp
CommitLineData
b1ab9ed8
A
1/*
2 * Copyright (c) 2000-2001 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 obtain
7 * a copy of the License at http://www.apple.com/publicsource and read it before
8 * 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 EXPRESS
12 * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
13 * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14 * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the
15 * specific language governing rights and limitations under the License.
16 */
17
18
19/*
20 * BlockCryptor.cpp - common context for block-oriented encryption algorithms
21 *
22 * Created March 5 2001 by dmitch
23 */
24
25#include "BlockCryptor.h"
26#include "BinaryKey.h"
27#include "AppleCSPSession.h"
28#include <security_utilities/alloc.h>
29#include <Security/cssmerr.h>
30#include <string.h>
31#include <security_utilities/debugging.h>
32#include <security_cdsa_utilities/cssmdata.h>
33
34#define BlockCryptDebug(args...) secdebug("blockCrypt", ## args)
35#define bprintf(args...) secdebug("blockCryptBuf", ## args)
36#define ioprintf(args...) secdebug("blockCryptIo", ## args)
37
38BlockCryptor::~BlockCryptor()
39{
40 if(mInBuf) {
41 memset(mInBuf, 0, mInBlockSize);
42 session().free(mInBuf);
43 mInBuf = NULL;
44 }
45 if(mChainBuf) {
46 memset(mChainBuf, 0, mInBlockSize);
47 session().free(mChainBuf);
48 mChainBuf = NULL;
49 }
50 mInBufSize = 0;
51}
52
53/*
54 * Reusable setup functions called from subclass's init.
55 * This is the general purpose one....
56 */
57void BlockCryptor::setup(
58 size_t blockSizeIn, // block size of input
59 size_t blockSizeOut, // block size of output
60 bool pkcsPad, // this class performs PKCS{5,7} padding
61 bool needsFinal, // needs final update with valid data
62 BC_Mode mode, // ECB, CBC
63 const CssmData *iv) // init vector, required for CBC
64