xref: /plan9/sys/src/cmd/gs/src/sarc4.h (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
13ff48bf5SDavid du Colombier /* Copyright (C) 2001 Artifex Software, Inc.  All rights reserved.
23ff48bf5SDavid du Colombier 
3*593dc095SDavid du Colombier   This software is provided AS-IS with no warranty, either express or
4*593dc095SDavid du Colombier   implied.
53ff48bf5SDavid du Colombier 
6*593dc095SDavid du Colombier   This software is distributed under license and may not be copied,
7*593dc095SDavid du Colombier   modified or distributed except as expressly authorized under the terms
8*593dc095SDavid du Colombier   of the license contained in the file LICENSE in this distribution.
93ff48bf5SDavid du Colombier 
10*593dc095SDavid du Colombier   For more information about licensing, please refer to
11*593dc095SDavid du Colombier   http://www.ghostscript.com/licensing/. For information on
12*593dc095SDavid du Colombier   commercial licensing, go to http://www.artifex.com/licensing/ or
13*593dc095SDavid du Colombier   contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14*593dc095SDavid du Colombier   San Rafael, CA  94903, U.S.A., +1(415)492-9861.
153ff48bf5SDavid du Colombier */
163ff48bf5SDavid du Colombier 
17*593dc095SDavid du Colombier /* $Id: sarc4.h,v 1.6 2004/01/14 13:45:56 igor Exp $ */
183ff48bf5SDavid du Colombier /* Definitions for Arcfour cipher and filter */
193ff48bf5SDavid du Colombier /* Requires scommon.h; strimpl.h if any templates are referenced */
203ff48bf5SDavid du Colombier 
213ff48bf5SDavid du Colombier #ifndef sarc4_INCLUDED
223ff48bf5SDavid du Colombier #  define sarc4_INCLUDED
233ff48bf5SDavid du Colombier 
243ff48bf5SDavid du Colombier #include "scommon.h"
253ff48bf5SDavid du Colombier 
263ff48bf5SDavid du Colombier /* Arcfour is a symmetric cipher whose state is maintained
273ff48bf5SDavid du Colombier  * in two indices into an accompanying 8x8 S box. this will
283ff48bf5SDavid du Colombier  * typically be allocated on the stack, and so has no memory
293ff48bf5SDavid du Colombier  * management associated.
303ff48bf5SDavid du Colombier  */
31*593dc095SDavid du Colombier struct stream_arcfour_state_s
323ff48bf5SDavid du Colombier {
333ff48bf5SDavid du Colombier     stream_state_common;	/* a define from scommon.h */
343ff48bf5SDavid du Colombier     unsigned int x, y;
353ff48bf5SDavid du Colombier     unsigned char S[256];
36*593dc095SDavid du Colombier };
37*593dc095SDavid du Colombier 
38*593dc095SDavid du Colombier #ifndef stream_arcfour_state_DEFINED
39*593dc095SDavid du Colombier #define stream_arcfour_state_DEFINED
40*593dc095SDavid du Colombier typedef struct stream_arcfour_state_s stream_arcfour_state;
41*593dc095SDavid du Colombier #endif
423ff48bf5SDavid du Colombier 
433ff48bf5SDavid du Colombier int s_arcfour_set_key(stream_arcfour_state * state, const unsigned char *key,
443ff48bf5SDavid du Colombier 		      int keylength);
453ff48bf5SDavid du Colombier 
463ff48bf5SDavid du Colombier #define private_st_arcfour_state()	/* used in sarc4.c */\
473ff48bf5SDavid du Colombier   gs_private_st_simple(st_arcfour_state, stream_arcfour_state,\
483ff48bf5SDavid du Colombier     "Arcfour filter state")
493ff48bf5SDavid du Colombier extern const stream_template s_arcfour_template;
503ff48bf5SDavid du Colombier 
51*593dc095SDavid du Colombier /* (de)crypt a section of text in a buffer -- the procedure is the same
52*593dc095SDavid du Colombier  * in each direction. see strimpl.h for return codes.
53*593dc095SDavid du Colombier  */
54*593dc095SDavid du Colombier int s_arcfour_process_buffer(stream_arcfour_state *ss, byte *buf, int buf_size);
55*593dc095SDavid du Colombier 
563ff48bf5SDavid du Colombier #endif /* sarc4_INCLUDED */
57