1/*
2 * Copyright (c) 2001,2011,2013-2014 Apple 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#ifdef	ASC_CSP_ENABLE
26
27#ifndef _ASC_CONTEXT_H_
28#define _ASC_CONTEXT_H_
29
30#include "AppleCSPContext.h"
31#include <security_comcryption/comcryption.h>
32
33/* symmetric encrypt/decrypt context */
34class ASCContext : public AppleCSPContext {
35public:
36	ASCContext(AppleCSPSession &session) :
37		AppleCSPContext(session),
38		mCcObj(NULL)	{ }
39	~ASCContext();
40
41	// called by CSPFullPluginSession
42	void init(
43		const Context 	&context,
44		bool encoding = true);
45	void update(
46		void 			*inp,
47		size_t 			&inSize, 			// in/out
48		void 			*outp,
49		size_t 			&outSize);			// in/out
50	void final(
51		CssmData 		&out);
52
53 	size_t inputSize(
54		size_t 			outSize);			// input for given output size
55	size_t outputSize(
56		bool 			final = false,
57		size_t 			inSize = 0); 		// output for given input size
58	void minimumProgress(
59		size_t 			&in,
60		size_t 			&out); 				// minimum progress chunks
61
62private:
63	comcryptObj			mCcObj;
64
65	/*
66	 * For first implementation, we have to cope with the fact that the final
67	 * decrypt call down to the comcryption engine requires *some* ciphertext.
68	 * On decrypt, we'll just save one byte on each update in preparation for
69	 * the final call. Hopefull we'll have time to fix deComcryptData() so this
70	 * is unneccesary.
71	 */
72	unsigned char		mDecryptBuf;
73	bool				mDecryptBufValid;
74
75};	/* RC4Context */
76
77#endif 	/*_ASC_CONTEXT_H_ */
78#endif	/* ASC_CSP_ENABLE */
79