package ixee.cryptopals.test import ixee.cryptopals.utils._ import CryptoUtils._ import crypto.SchemeBuilder object Gloria { val decide = new java.util.Random() def encryptify(input: Seq[Byte]): (String, Seq[Byte]) = { val mode = if (Gloria.decide.nextBoolean) "ECB" else "CBC" val betterText = Gloria.say(atLeast = 5, atMost = 10) ++ input ++ Gloria.say(atLeast = 5, atMost = 10) val builder = SchemeBuilder("AES", Gloria.sayExactly(16)) val encryptor = if (mode == "ECB") ecbEncrypt(builder.ecb) _ else cbcEncrypt(builder.cbc(Gloria.sayExactly(16))) _ (mode, encryptor(betterText)) } def voice: Iterator[Byte] = Stream.continually(Gloria.decide.nextInt.toByte).iterator def sayExactly(n: Int) = voice.take(n).toSeq def say(atLeast: Int, atMost: Int): Seq[Byte] = (voice.take(atLeast) ++ voice.take(Gloria.decide.nextInt(atMost - atLeast))).toSeq }