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