rc4(3tcl)
π 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,-inor string should be given. Pick ONE. Do not be greedy.
π PROGRAMMING INTERFACE π
::rc4::RC4Init keydataβ Initialize a new RC4 key. Thekeydatais 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 callingRC4Init. both directions, one function, we love efficiency π::rc4::RC4Final Keyβ This should be called to clean up resources associated withKey. 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 π
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
- debian trixie: tcllib 2.0+dfsg-4 Β· Tcl
- ubuntu questing: tcllib 2.0+dfsg-4
- ubuntu resolute: tcllib 2.0+dfsg-5 Β· Tcl
- ubuntu stonking: tcllib 2.0+dfsg-6 Β· Tcl
- Copyright (c) 2003, Pat Thoyts <patthoyts@users\&.sourceforge\&.net>
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms