]> andersk Git - openssh.git/blame - rc4.h
- Fix PAM account and session being called multiple times. Problem
[openssh.git] / rc4.h
CommitLineData
8efc0c15 1/*! \file rc4.h
2 \brief Header file for RC4 stream cipher routines
3 \author Damien Miller <djm@mindrot.org>
4 \version 0.0.0
5 \date 1999
6
7 A simple implementation of the RC4 stream cipher, based on the
8 description given in _Bruce Schneier's_ "Applied Cryptography"
9 2nd edition.
10
11 Copyright 1999 Damien Miller
12
13 Permission is hereby granted, free of charge, to any person
14 obtaining a copy of this software and associated documentation
15 files (the "Software"), to deal in the Software without
16 restriction, including without limitation the rights to use, copy,
17 modify, merge, publish, distribute, sublicense, and/or sell copies
18 of the Software, and to permit persons to whom the Software is
19 furnished to do so, subject to the following conditions:
20
21 The above copyright notice and this permission notice shall be
22 included in all copies or substantial portions of the Software.
23
24 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
25 KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
26 WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
27 AND NONINFRINGEMENT. IN NO EVENT SHALL DAMIEN MILLER BE LIABLE
28 FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
29 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31
32 \warning None of these functions clears its memory after use. It
33 \warning is the responsability of the calling routines to ensure
34 \warning that any sensitive data (keystream, key or plaintext) is
35 \warning properly erased after use.
36
37 \warning The name "RC4" is trademarked in the United States,
38 \warning you may need to use "RC4 compatible" or "ARC4"
39 \warning (Alleged RC4).
40*/
41
42/* $Id$ */
43
44#ifndef _RC4_H
45#define _RC4_H
46
fb723d82 47#include "config.h"
48#ifndef HAVE_ARC4RANDOM
49
8efc0c15 50/*! \struct rc4_t
51 \brief RC4 stream cipher state object
52 \var s State array
53 \var i Monotonic index
54 \var j Randomised index
55
56 \warning This structure should not be accessed directly. To
57 \warning initialise a rc4_t object, you should use the rc4_key()
58 \warning function
59
60 This structure holds the current state of the RC4 algorithm.
61*/
62typedef struct
63{
64 unsigned int s[256];
65 int i;
66 int j;
67} rc4_t;
68
69/*! \fn void rc4_key(rc4_t *r, unsigned char *key, int len);
70 \brief Set up key structure of RC4 stream cipher
71 \param r pointer to RC4 structure to be seeded
72 \param key pointer to buffer containing raw key
73 \param len length of key
74
75 This function set the internal state of the RC4 data structure
76 pointed to by \a r using the specified \a key of length \a len.
77
78 This function can use up to 256 bytes of key, any more are ignored.
79
80 \warning Stream ciphers (such as RC4) can be insecure if the same
81 \warning key is used repeatedly. Ensure that any key specified has
82 \warning an reasonably sized Initialisation Vector component.
83*/
84void rc4_key(rc4_t *r, unsigned char *key, int len);
85
86/*! \fn rc4_crypt(rc4_t *r, unsigned char *plaintext, int len);
87 \brief Crypt bytes using RC4 algorithm
88 \param r pointer to RC4 structure to be used
89 \param plaintext Pointer to bytes to encrypt
90 \param len number of bytes to crypt
91
92 This function encrypts one or more bytes (pointed to by \a plaintext)
93 using the RC4 algorithm. \a r is a state structure that must be
94 initialiased using the rc4_key() function prior to use.
95
96 Since RC4 XORs each byte of plaintext with a byte of keystream,
97 this function can be used for both encryption and decryption.
98*/
99void rc4_crypt(rc4_t *r, unsigned char *plaintext, int len);
100
101/*! \fn rc4_getbytes(rc4_t *r, unsigned char *buffer, int len);
102 \brief Generate key stream using the RC4 stream cipher
103 \param r pointer to RC4 structure to be used
104 \param buffer pointer to buffer in which to deposit keystream
105 \param len number of bytes to deposit
106
107 This function gives access to the raw RC4 key stream. In this
108 consiguration RC4 can be used as a fast, strong pseudo-random
109 number generator with a very long period.
110*/
111void rc4_getbytes(rc4_t *r, unsigned char *buffer, int len);
112
fb723d82 113#endif /* !HAVE_ARC4RANDOM */
114
8efc0c15 115#endif /* _RC4_H */
This page took 0.063068 seconds and 5 git commands to generate.