Provided by: tcllib_1.17-dfsg-1_all bug

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 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 ?-command lst? ?-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.

              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.

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>