NAME

rc4 -
Impementation of the RC4 stream cipher

SYNOPSIS

package require Tcl 8.2
package require rc4  ? 1.0.1 ? 
::rc4::rc4  ? -hex ?  -key keyvalue  ? -out channel ?  [ -in channel | -infile filename | string ]
::rc4::RC4Init keydata
::rc4::RC4 Key data
::rc4::RC4Final Key

DESCRIPTION

This package is an implementation in Tcl of the RC4 stream cipher developed by Ron Rivest of RSA Data Security Inc. The cipher was a trade secret of RSA but was reverse-engineered and published to the internet in 1994. It is used in a number of network protocols for securing communications. To evade trademark restrictions this cipher is sometimes known as ARCFOUR.

COMMANDS

::rc4::rc4 ? -hex ? -key keyvalue ? -out channel ? [ -in channel | -infile filename | string ]
Perform the RC4 algorithm on either the data provided by the argument or on the data read from the -in channel. If an -out channel is given then the result will be written to this channel. Giving the -hex option will return a hexadecimal encoded version of the result if not using an -out channel.
The data to be processes can be specified either as a string argument to the rc4 command, or as a filename or a pre-opened channel. If the -infile argument is given then the file is opened, the data read and processed and the file is closed. If the -in argument is given then data is read from the channel until the end of file. The channel is not closed. If the -out argument is given then the processing result is written to this channel.
Only one of -infile, -in or string should be given.

PROGRAMMING INTERFACE

::rc4::RC4Init keydata
Initialize a new RC4 key. The keydata is any amount of binary data and is used to initialize the cipher internal state.
::rc4::RC4 Key data
Encrypt or decrypt the input data using the key obtained by calling RC4Init.
::rc4::RC4Final Key
This should be called to clean up resources associated with Key. Once this function has been called the key is destroyed.

EXAMPLES

% set keydata [binary format H* 0123456789abcdef]
% rc4::rc4 -hex -key $keydata HelloWorld
3cf1ae8b7f1c670b612f
% rc4::rc4 -hex -key $keydata [binary format H* 3cf1ae8b7f1c670b612f]
HelloWorld

 set Key [rc4::RC4Init "key data"]
 append ciphertext [rc4::RC4 $Key $plaintext]
 append ciphertext [rc4::RC4 $Key $additional_plaintext]
 rc4::RC4Final $Key

AUTHORS

Pat Thoyts

SEE ALSO

des(n), aes(n), blowfish(n)

KEYWORDS

rc4, arcfour,, stream cipher, security, encryption, data integrity