Safe Haskell | None |
---|---|
Language | Haskell2010 |
Implementation of the CipherSaber-2 RC4 encryption format. Also provides a raw RC4 keystream generator.
This work is licensed under the "MIT License". Please see the file LICENSE in the source distribution of this software for license terms.
- data ByteString :: *
- rc4 :: Int -> Int -> ByteString -> ByteString
- encrypt :: Int -> ByteString -> ByteString -> ByteString -> ByteString
- decrypt :: Int -> ByteString -> ByteString -> ByteString
- toByteString :: String -> ByteString
- fromByteString :: ByteString -> String
- ivLength :: Int
Documentation
data ByteString :: *
A space-efficient representation of a Word8
vector, supporting many
efficient operations.
A ByteString
contains 8-bit bytes, or by using the operations from
Data.ByteString.Char8 it can be interpreted as containing 8-bit
characters.
rc4 :: Int -> Int -> ByteString -> ByteString Source
Generate an RC4 keystream. CipherSaber recommends a key of less than 54 bytes for best mixing. At most, the first 256 bytes of the key are even used.
This function takes a parameter for the number of times to repeat the key mixing loop ala CipherSaber-2. It should probably be set to at least 20.
This function takes a length of keystream to generate,
which is un-Haskellike but hard to avoid given the
strictness of STUArray
. An alternative would be to pass
the plaintext in and combine it here, but this interface
was chosen as "simpler". Another choice would be to leave
whole rc4 function in the ST
monad, but that seemed
obnoxious. The performance and usability implications of
these choices need to be explored.
encrypt :: Int -> ByteString -> ByteString -> ByteString -> ByteString Source
CipherSaber requires using a 10-byte initial value (IV) to protect against keystream recovery. Given the key and IV, this code will turn a a sequence of plaintext message bytes into a sequence of ciphertext bytes.
decrypt :: Int -> ByteString -> ByteString -> ByteString Source
CipherSaber recovers the 10-byte IV from the start of the ciphertext. Given the key, this code will turn a sequence of ciphertext bytes into a sequence of plaintext bytes.
toByteString :: String -> ByteString Source
Convert a String
to a ByteString
.
fromByteString :: ByteString -> String Source
Convert a ByteString
to a String
.