rc4(3tcl) RC4 Stream Cipher rc4(3tcl)
______________________________________________________________________________
NAME
rc4 - Implementation of the RC4 stream cipher
SYNOPSIS
package require Tcl 8.2
package require rc4 ?1.1.0?
::rc4::rc4 ?-hex? -key keyvalue ?-command lst? ?-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 de-
veloped 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 com-
munications. To evade trademark restrictions this cipher is sometimes
known as ARCFOUR.
COMMANDS
::rc4::rc4 ?-hex? -key keyvalue ?-command lst? ?-out channel? [ -in
channel | -infile filename | string ]
Perform the RC4 algorithm on either the data provided by the ar-
gument or on the data read from the -in channel. If an -out
channel is given then the result will be written to this chan-
nel. 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 ar-
gument 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 un-
til the end of file. The channel is not closed. If the -out ar-
gument is given then the processing result is written to this
channel.
If -command is provided then the rc4 command does not return
anything. Instead the command provided is called with the rc4
result data appended as the final parameter. This is most useful
when reading from Tcl channels as a fileevent is setup on the
channel and the data processed in chunks
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
proc ::Finish {myState data} {
DoStuffWith $myState $data
}
rc4::rc4 -in $socket -command [list ::Finish $ApplicationState]
AUTHORS
Pat Thoyts
BUGS, IDEAS, FEEDBACK
This document, and the package it describes, will undoubtedly contain
bugs and other problems. Please report such in the category rc4 of the
Tcllib Trackers [http://core.tcl.tk/tcllib/reportlist]. Please also
report any ideas for enhancements you may have for either package
and/or documentation.
When proposing code changes, please provide unified diffs, i.e the out-
put of diff -u.
Note further that attachments are strongly preferred over inlined
patches. Attachments can be made by going to the Edit form of the
ticket immediately after its creation, and then using the left-most
button in the secondary navigation bar.
SEE ALSO
aes(3tcl), blowfish(3tcl), des(3tcl)
KEYWORDS
arcfour, data integrity, encryption, rc4, security, stream cipher
CATEGORY
Hashes, checksums, and encryption
COPYRIGHT
Copyright (c) 2003, Pat Thoyts <patthoyts@users.sourceforge.net>
tcllib 1.1.0 rc4(3tcl)