rc4(3tcl)

πŸ“¦
version 2.0 Β· 2 versions
, in debian trixie, ubuntu questing, ubuntu resolute, ubuntu stonking

πŸ’– rc4 β€” bestie's guide to the RC4 stream cipher πŸ’–

okay so welcome to rc4(3tcl), aka the RC4 Stream Cipher page, and yes we're doing this together, grab a snack πŸ“


✨ NAME ✨

rc4 β€” the whole entire implementation of the RC4 stream cipher, no cap πŸ’…


🌸 SYNOPSIS 🌸

package require Tcl 8.5 9

package require rc4 ?1.2.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

look at those signatures, they ate πŸ”₯


πŸ¦‹ DESCRIPTION πŸ¦‹

So this package is an implementation in Tcl of the RC4 stream cipher, which was developed by Ron Rivest of RSA Data Security Inc. Iconic founder energy, honestly. The cipher was a trade secret of RSA but was reverse-engineered and published to the internet in 1994 β€” the way that happened is genuinely wild 😭

It is used in a number of network protocols for securing communications. And to evade trademark restrictions this cipher is sometimes known as ARCFOUR. iykyk.


πŸ‘‘ 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. so many paths, all valid ✨

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. (Yes bestie, the original says "processes", we keep it, we don't fix it πŸ’€) 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 β€” important, don't come for me. 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. chunk-by-chunk processing, main character behavior 🫢

⚠️ Only one of -infile, -in or string should be given. Pick ONE. Do not be greedy.

πŸ’œ 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. baby's first cipher state πŸŽ€
  • ::rc4::RC4 Key data β€” Encrypt or decrypt the input data using the key obtained by calling RC4Init. both directions, one function, we love efficiency πŸ’…
  • ::rc4::RC4Final Key β€” This should be called to clean up resources associated with Key. Once this function has been called the key is destroyed. Gone. Deleted. Poof. Don't try to use it after, bestie 😭

🌈 EXAMPLES 🌈

the goods, the showstopper section:

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

look at it round-trip back to HelloWorld, that's poetry fr fr ✨

 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]

streaming from a socket straight into your callback, that's the -command magic right there πŸ¦‹


πŸŽ€ AUTHORS πŸŽ€

Pat Thoyts β€” the icon, the legend, the moment πŸ‘‘


πŸ’€ BUGS, IDEAS, FEEDBACK πŸ’€

This document, and the package it describes, will undoubtedly contain bugs and other problems. ngl, they're being real about it and I respect that. Please report such in the category rc4 of the Tcllib Trackers [http://core.tcl.tk/tcllib/reportlist](http://core.tcl.tk/tcllib/reportlist). Please also report any ideas for enhancements you may have for either package and/or documentation. they want your ideas, bestie, don't be shy 🫢

When proposing code changes, please provide unified diffs, 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. left-most button. remember it. that's the whole quest 🧚


⭐ SEE ALSO ⭐

aes(3tcl), blowfish(3tcl), des(3tcl) β€” the cipher friend group, go say hi πŸ’–


πŸ”₯ KEYWORDS πŸ”₯

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


🌸 CATEGORY 🌸

Hashes, checksums, and encryption


Copyright (c) 2003, Pat Thoyts <patthoyts@users.sourceforge.net>

and that's the page!! this was tcllib version 1.2.0, filed under rc4(3tcl), and honestly? she served. go encrypt something responsibly bestie, mwah πŸ’…βœ¨πŸ¦‹

πŸ“¦ where this page comes from