/*

ARCFOUR cipher (based on a cipher posted on the Usenet in Spring-95).
This cipher is widely believed and has been tested to be equivalent
with the RC4 cipher from RSA Data Security, Inc.  (RC4 is a trademark
of RSA Data Security)

*/

/*
 * $Id: arcfour.h,v 1.2 1995/07/13 01:30:25 ylo Exp $
 * $Log: arcfour.h,v $
 * Revision 1.2  1995/07/13  01:30:25  ylo
 * 	Added cvs log.
 *
 * $Endlog$
 */

#ifndef ARCFOUR_H
#define ARCFOUR_H

typedef struct
{
   unsigned int x;
   unsigned int y;
   unsigned char state[256];
} ArcfourContext;

/* Initializes the context and sets the key. */
void arcfour_init(ArcfourContext *ctx, const unsigned char *key, 
		  unsigned int keylen);

/* Returns the next pseudo-random byte from the arcfour (pseudo-random 
   generator) stream. */
unsigned int arcfour_byte(ArcfourContext *ctx);

/* Encrypts data. */
void arcfour_encrypt(ArcfourContext *ctx, unsigned char *dest, 
		     const unsigned char *src, unsigned int len);

/* Decrypts data. */
void arcfour_decrypt(ArcfourContext *ctx, unsigned char *dest, 
		     const unsigned char *src, unsigned int len);

#endif /* ARCFOUR_H */
