summaryrefslogtreecommitdiff
path: root/test/Gloria.scala
diff options
context:
space:
mode:
Diffstat (limited to 'test/Gloria.scala')
-rw-r--r--test/Gloria.scala33
1 files changed, 33 insertions, 0 deletions
diff --git a/test/Gloria.scala b/test/Gloria.scala
new file mode 100644
index 0000000..3141a3a
--- /dev/null
+++ b/test/Gloria.scala
@@ -0,0 +1,33 @@
+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
+
+}