1/*
2 * Copyright (c) 2000-2001,2011,2013-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 * rc4Context.h - glue between BlockCrytpor and ssleay RC4 implementation
21 */
22#ifndef _RC4_CONTEXT_H_
23#define _RC4_CONTEXT_H_
24
25#include "AppleCSPContext.h"
26#include <CommonCrypto/CommonCryptor.h>
27#include <CommonCrypto/CommonCryptorSPI.h>
28
29class RC4Context : public AppleCSPContext {
30public:
31	RC4Context(AppleCSPSession &session) :
32		AppleCSPContext(session)	{ }
33	virtual ~RC4Context();
34
35	// called by CSPFullPluginSession
36	void init(
37		const Context 	&context,
38		bool encoding = true);
39	void update(
40		void 			*inp,
41		size_t 			&inSize, 			// in/out
42		void 			*outp,
43		size_t 			&outSize);			// in/out
44	void final(
45		CssmData 		&out);
46
47 	size_t inputSize(
48		size_t 			outSize);			// input for given output size
49	size_t outputSize(
50		bool 			final = false,
51		size_t 			inSize = 0); 		// output for given input size
52	void minimumProgress(
53		size_t 			&in,
54		size_t 			&out); 				// minimum progress chunks
55
56private:
57    CCCryptorRef    rc4Key;
58
59};	/* RC4Context */
60
61#endif //_RC4_CONTEXT_H_
62