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>