1/*
2 * Copyright (c) 2000-2001,2011,2014 Apple 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 * NullCryptor.h - null symmetric encryptor for measurement only
21 */
22#ifndef _NULL_CRYPTOR_H_
23#define _NULL_CRYPTOR_H_
24
25/*
26 * DO NOT DEFINE THIS SYMBOL TRUE FOR CODE CHECKED IN TO CVS
27 */
28#define NULL_CRYPT_ENABLE			0
29
30#if		NULL_CRYPT_ENABLE
31
32#include <security_cdsa_plugin/CSPsession.h>
33#include "AppleCSP.h"
34#include "AppleCSPContext.h"
35#include "AppleCSPSession.h"
36#include "BlockCryptor.h"
37
38#define NULL_CRYPT_BLOCK_SIZE		16
39
40class NullCryptor : public BlockCryptor {
41public:
42	NullCryptor(AppleCSPSession &session) :
43		BlockCryptor(session),
44		mInitFlag(false)	{ }
45	~NullCryptor() { }
46
47	// called by CSPFullPluginSession
48	void init(const Context &context, bool encoding = true)
49	{
50		if(mInitFlag && !opStarted()) {
51			return;
52		}
53		/* Just have BlockCryptor do its setup */
54		setup(NULL_CRYPT_BLOCK_SIZE, context);
55		mInitFlag = true;
56	}
57
58	// called by BlockCryptor
59	void encryptBlock(
60		const void		*plainText,			// length implied (one block)
61		size_t			plainTextLen,
62		void			*cipherText,
63		size_t			&cipherTextLen,		// in/out, throws on overflow
64		bool			final)
65	{
66		memmove(cipherText, plainText, NULL_CRYPT_BLOCK_SIZE);
67		cipherTextLen = NULL_CRYPT_BLOCK_SIZE;
68	}
69
70	void decryptBlock(
71		const void		*cipherText,		// length implied (one cipher block)
72		size_t			cipherTextLen,
73		void			*plainText,
74		size_t			&plainTextLen,		// in/out, throws on overflow
75		bool			final)
76	{
77		memmove(plainText, cipherText, NULL_CRYPT_BLOCK_SIZE);
78		plainTextLen = NULL_CRYPT_BLOCK_SIZE;
79	}
80
81private:
82	bool				mInitFlag;			// for easy reuse
83
84};	/* NullCryptor */
85
86#endif	/* NULL_CRYPT_ENABLE */
87
88#endif //_NULL_CRYPTOR_H_
89