logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

rc4 - Implementation of the RC4 stream cipher

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 TcllibTrackers  [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 unifieddiffs, i.e the output 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.

Category

       Hashes, checksums, and encryption

Commands

::rc4::rc4 ?-hex? -keykeyvalue ?-commandlst? ?-outchannel? [ -inchannel | -infilefilename | 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.

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.

Examples

              % set keydata [binary format H* 0123456789abcdef]
              % rc4::rc4 -hex -key $keydata HelloWorld
              3cf1ae8b7f1c670b612f
              % rc4::rc4 -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]

Keywords

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

Name

       rc4 - Implementation of the RC4 stream cipher

Programming Interface

::rc4::RC4Initkeydata
              Initialize  a  new RC4 key. The keydata is any amount of binary data and is used to initialize the
              cipher internal state.

       ::rc4::RC4Keydata
              Encrypt or decrypt the input data using the key obtained by calling RC4Init.

       ::rc4::RC4FinalKey
              This should be called to clean up resources associated with  Key.  Once  this  function  has  been
              called the key is destroyed.

See Also

aes(3tcl), blowfish(3tcl), des(3tcl)

Synopsis

       package require Tcl8.59

       package require rc4?1.2.0?::rc4::rc4 ?-hex? -keykeyvalue ?-commandlst? ?-outchannel? [ -inchannel | -infilefilename | string ]

       ::rc4::RC4Initkeydata::rc4::RC4Keydata::rc4::RC4FinalKey

________________________________________________________________________________________________________________

See Also