With a brand new adventure
Fri, 25 May 2018 13:13:29 +0000
There has been no nixwrt update this week because no nixwrt changes this week. I've done a little bit of refactoring though nothing really worth writing about - mostly I've been treating the last week or two as a nixbreak.
Instead I've been learning some cryptography and some Haskell, by means of trying to write programs that do one, using the other. Specifically, the Cryptopals challenges . Lessons:
Give me docs or give me death, I am undecided which
I have not yet reached the point of "I have type signatures, why do I need docs?". I need docs, preferably with examples. Crypto libraries, I am looking at you specifically here.
In the interests of being vaguely constructive in this criticism, here is what you do to get AES128-ECB decryption with whatever the default crypto that ships with GHC 8.2.2 is.
(Note that, as far as I understand it, there is no reason ever to use ECB mode except in educational examples which will demonstrate to you just how awful a choice it is)
import qualified Crypto.Cipher.AES as AES
decode' keytext payload = let key = AES.initAES keytext in AES.decryptECB key payload
It accepts ByteString arguments. There are probably good ways to get ByteStrings that I haven't found yet, but if you start with an ordinary string you could try
toByteString text = BS.pack (map (\c -> fromIntegral (ord c)) text)
"Yippee, strings!" said Teal
See above. There seem to be an awful lot of incompatible ways to
represent "sequences of small integers that map onto ASCII characters"
in Haskell. At the moment I'm using arrays of
Word8 as my "primary"
represnetation and converting to and from other formats when I need to
do so to call library functions and stuff.
"Stop, collaborate and listen"
They're not messing about when they say "an appreciation for early-90's MTV hip-hop can't hurt either". A lot of the examples are a bit ... Vanilla?
I have implemented a plausible AES-CBC mode (using ECB as a building block), currently working on challenge 11.
Back to Nix next week