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 * desContext.h - glue between BlockCrytpor and DES/3DES implementations 21 * Written by Doug Mitchell 3/28/2001 22 */ 23#ifndef _DES_CONTEXT_H_ 24#define _DES_CONTEXT_H_ 25 26#include <security_cdsa_plugin/CSPsession.h> 27#include "AppleCSP.h" 28#include "AppleCSPContext.h" 29#include "AppleCSPSession.h" 30#include "BlockCryptor.h" 31#include <CommonCrypto/CommonCryptor.h> 32#include <CommonCrypto/CommonCryptorSPI.h> 33 34#define DES_KEY_SIZE_BITS_EXTERNAL (kCCKeySizeDES * 8) 35#define DES_BLOCK_SIZE_BYTES kCCBlockSizeDES 36 37/* DES Symmetric encryption context */ 38class DESContext : public BlockCryptor { 39public: 40 DESContext(AppleCSPSession &session); 41 virtual ~DESContext(); 42 43 // called by CSPFullPluginSession 44 void init(const Context &context, bool encoding = true); 45 46 // called by BlockCryptor 47 void encryptBlock( 48 const void *plainText, // length implied (one block) 49 size_t plainTextLen, 50 void *cipherText, 51 size_t &cipherTextLen, // in/out, throws on overflow 52 bool final); 53 void decryptBlock( 54 const void *cipherText, // length implied (one cipher block) 55 size_t cipherTextLen, 56 void *plainText, 57 size_t &plainTextLen, // in/out, throws on overflow 58 bool final); 59 60private: 61 CCCryptorRef DesInst; 62}; /* DESContext */ 63 64/* Triple-DES (EDE, 24 byte key) Symmetric encryption context */ 65 66#define DES3_KEY_SIZE_BYTES (3 * (DES_KEY_SIZE_BITS_EXTERNAL / 8)) 67#define DES3_BLOCK_SIZE_BYTES kCCBlockSize3DES 68 69class DES3Context : public BlockCryptor { 70public: 71 DES3Context(AppleCSPSession &session); 72 ~DES3Context(); 73 74 // called by CSPFullPluginSession 75 void init(const Context &context, bool encoding = true); 76 77 // called by BlockCryptor 78 void encryptBlock( 79 const void *plainText, // length implied (one block) 80 size_t plainTextLen, 81 void *cipherText, 82 size_t &cipherTextLen, // in/out, throws on overflow 83 bool final); 84 void decryptBlock( 85 const void *cipherText, // length implied (one cipher block) 86 size_t cipherTextLen, 87 void *plainText, 88 size_t &plainTextLen, // in/out, throws on overflow 89 bool final); 90 91private: 92 CCCryptorRef DesInst; 93}; /* DES3Context */ 94 95#endif //_DES_CONTEXT_H_ 96