ciphersaber2 alternatives and similar packages
Based on the "Data" category.
Alternatively, view ciphersaber2 alternatives based on common mentions on social networks and blogs.

lens
Lenses, Folds, and Traversals  Join us on web.libera.chat #haskelllens 
semanticsource
Parsing, analyzing, and comparing source code across many languages 
text
Haskell library for space and timeefficient operations over Unicode text. 
codebuilder
Packages for defining APIs, running them, generating client code and documentation. 
unorderedcontainers
Efficient hashingbased container types 
compendiumclient
Mu (μ) is a purely functional framework for building micro services. 
cassava
A CSV parsing and encoding library optimized for ease of use and high performance 
holmes
A reference library for constraintsolving with propagators and CDCL. 
primitive
This package provides various primitive memoryrelated operations. 
binary
Efficient, pure binary serialisation using ByteStrings in Haskell. 
resourcepool
A highperformance striped resource pooling implementation for Haskell 
discrimination
Fast linear time sorting and discrimination for a large class of data types 
jsonautotype
Automatic Haskell type inference from JSON input 
audiovisual
Extensible records, variants, structs, effects, tangles 
dependentsum
Dependent sums and supporting typeclasses for comparing and displaying them 
IORefCAS
A collection of different packages for CAS based data structures. 
dependentmap
Dependentlytyped finite maps (partial dependent products) 
reflection
Reifies arbitrary Haskell terms into types that can be reflected back into terms 
orgmodeparse
Attoparsec parser combinators for parsing orgmode structured text! 
streaming
An optimized general monad transformer for streaming applications, with a simple prelude of functions 
protobuf
An implementation of Google's Protocol Buffers in Haskell. 
safecopy
An extension to Data.Serialize with builtin version control 
texticu
This package provides the Haskell Data.Text.ICU library, for performing complex manipulation of Unicode text. 
scientific
Arbitraryprecision floatingpoint numbers represented using scientific notation 
uuidtypes
A Haskell library for creating, printing and parsing UUIDs
ONLYOFFICE Docs — document collaboration in your environment
Do you think we are missing an alternative of ciphersaber2 or a related project?
README
ciphersaber2
Copyright © 2015 Bart Massey
This package provides a Haskell library and driver program implementing CipherSaber2(CS2) stream encryption based on the RC4 stream encryption algorithm. This implementation has been tested against and is compatible with existing CipherSaber implementations.
CS2
The documentation for CS2 is a bit outofdate and scattered.
History
CS2 is based on the RC4 stream cipher. Wikipedia has a nice history of RC4 as well as current reports on its cryptanalysis.
In 1999, Arnold Reinhold suggested using RC4 as the basis for citizens to learn to build their own encryption software, along the lines of Jedi Light Sabers. Reinhold proposed a stream protocol for RC4 ciphertext that he called CipherSaber (Note that the CipherSaber website is mostly abandoned and in some state of disrepair.)
In 2003, after cryptographic attacks were found against RC4 as used in CipherSaber, Reinhold modified the CipherSaber protocol to produce a new parameterized family of protocols known as CS2: the original CipherSaber is a special case of CS2, and is often referred to as CipherSaber1.
Algorithm
Pseudocode for CS2 is available from a variety of places. The pseudocode given here attempts to be clear and normative.
CS2 encryption and decryption both require an RC4 implementation that has been modified to iterate the key schedule a given number of times.
<! This pseudocode translated from rc4.pseu by pseuf >
 Produce an RC4 keystream of length n with
 r rounds of key scheduling given key k
rc4(n, r, k):
l ← length k
 Initialize the array.
S ← zerobased array of 256 bytes
for i in 0..255
S[i] ← i
 Do key scheduling.
j ← 0
repeat r times
for i in 0..255
j ← (j + S[i] + k[i mod l]) mod 256
S[i] ↔ S[j]
 Finally, produce the stream.
keystream ← zerobased array of n bytes
j ← 0
for i in 0..n1
i' ← (i + 1) mod 256
j ← (j + S[i']) mod 256
S[i'] ↔ S[j]
keystream[i] ← S[(S[i'] + S[j]) mod 256]
return keystream
<! End of pseuf translation of rc4.pseu >
CS2 encryption requires a plaintext message (treated as a bytestream), a key, and an "initial value" (IV) of 10 bytes. The key should be no more than 53 bytes, to ensure good mixing during key scheduling.
The IV is a nonce that must be different for each message sent: it should be chosen randomly if possible, but may be chosen pseudorandomly or even just counted if necessary. CS2 appends the IV to the CS2 key to produce an RC4 key. RC4 uses only the first 256 RC4 key bytes. Thus, the CS2 key must be no more than 246 bytes: a longer CS2 key would cause some or all of the IV to not be used by RC4.
<! This pseudocode translated from encrypt.pseu by pseuf >
 Ciphersaber2 encrypt message m with key k and
 r rounds of key scheduling
encrypt(m, r, k):
n ← length m
iv ← appropriatelychosen 10byte IV
k' ← prepend k to iv
keystream ← rc4(n, r, k')
ciphertext ← zerobased array of n + 10 bytes
for i in 0..9
ciphertext[i] ← iv[i]
for i in 0..n
ciphertext[i + 10] ← m[i] xor keystream[i]
return ciphertext
<! End of pseuf translation of encrypt.pseu >
CS2 decryption requires ciphertext and the encryption key used to produce the ciphertext.
<! This pseudocode translated from decrypt.pseu by pseuf >
 Ciphersaber2 decrypt ciphertext m with key k and
 r rounds of key scheduling
decrypt(m, r, k):
n ← length m
iv ← m[0..9]
delete the first 10 characters of m
k' ← prepend k to iv
keystream ← rc4(n  10, r, k')
plaintext ← zerobased array of n  10 bytes
for i in 0..n10
plaintext[i] ← m[i] xor keystream[i]
return plaintext
<! End of pseuf translation of decrypt.pseu >
Library
The CipherSaber2
library provides a relatively straightforward
ByteString
interface. See the haddock
documentation
for details.
Driver
The program cs2
uses the CipherSaber2
library to encrypt
or decrypt stdin
to stdout
.
cs2
is written in Haskell, so you will need a Haskell
installation to run it. It depends on the package
[parseargs](http://hackage.haskell.org/package/parseargs)
from Hackage, as well as the
bytestring
package that should probably have come with
your distribution but may need to be installed. Say "cabal
install parseargs
" and "cabal install bytestring
" to get
things set up. (This in turn may require a cabalinstall
package from your Linux distribution or thereabouts.)
Say "runghc cs2.hs help
" for usage information.
Say "runghc cs2.hs e whee <f.txt >g.cs2
" to encrypt the
file f.txt
with key whee
. An IV will be automatically
chosen.
Say "runghc cs2.hs d whee <g.cs2 >ff.txt
" to decrypt the
file g.cs2
with key whee
.
Test Instances
The test
directory include a bunch of plaintext/ciphertext
pairs taken from the original CS2 materials. Please see
README.md
in that directory for more information.
License
This work is licensed under the "MIT License". Please see the file LICENSE in the source distribution of this software for license terms.
*Note that all licence references and agreements mentioned in the ciphersaber2 README section above
are relevant to that project's source code only.