summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--challenge/c11.go34
-rw-r--r--lib/oracle.go32
-rw-r--r--lib/rand.go2
3 files changed, 34 insertions, 34 deletions
diff --git a/challenge/c11.go b/challenge/c11.go
index 703b959..211d48c 100644
--- a/challenge/c11.go
+++ b/challenge/c11.go
@@ -10,11 +10,43 @@ import (
)
func C11() {
+ // Given an input `in`, this function AES encrypts `in` using a
+ // randomly generate 16-byte key using ECB or CBC mode and returns the
+ // cipher.
+ encrypt := func(in []byte) []byte {
+ // Generate random key.
+ key, err := lib.RandomBytes(16)
+ if err != nil {
+ panic(err)
+ }
+ // Generate random initialization vector; needed for AES CBC.
+ iv, err := lib.RandomBytes(16)
+ if err != nil {
+ panic(err)
+ }
+
+ // Add 5-10 bytes at the beginning and end of `in`
+ in = append(lib.RandomBytesWithLengthBetween(5, 10), in...)
+ in = append(in, lib.RandomBytesWithLengthBetween(5, 10)...)
+
+ // Randomly encrypt `in` with AES in ECB or CBC mode.
+ m := lib.RandomInt(0, 1)
+ var out []byte
+ if m == 0 {
+ // Encrypt with AES in ECB mode.
+ out = lib.AESEncryptECB(in, key)
+ } else {
+ // Encrypt with AES in CBC mode.
+ out = lib.AESEncryptCBC(in, key, iv)
+ }
+ return out
+ }
+
p := lib.StrToBytes("YellowSubmarine YellowSubmarine YellowSubmarine")
fmt.Printf("Input: %v (%d)\n", p, len(p))
for i := 0; i < 10; i++ {
- o := lib.OracleAESRandomEncrypt(p)
+ o := encrypt(p)
if lib.CipherUsesECB(o) != nil {
fmt.Printf("%d -> Enciphered with ECB: %v (%d)\n", i, o, len(o))
} else {
diff --git a/lib/oracle.go b/lib/oracle.go
index 29338ff..8a449a1 100644
--- a/lib/oracle.go
+++ b/lib/oracle.go
@@ -25,38 +25,6 @@ func init() {
}
}
-// Given an input `in`, this function AES encrypts `in` using a
-// randomly generate 16-byte key using ECB or CBC mode and returns the
-// cipher.
-func OracleAESRandomEncrypt(in []byte) []byte {
- // Generate random key.
- key, err := RandomBytes(16)
- if err != nil {
- panic(err)
- }
- // Generate random initialization vector; needed for AES CBC.
- iv, err := RandomBytes(16)
- if err != nil {
- panic(err)
- }
-
- // Add 5-10 bytes at the beginning and end of `in`
- in = append(randomBytesWithLengthBetween(5, 10), in...)
- in = append(in, randomBytesWithLengthBetween(5, 10)...)
-
- // Randomly encrypt `in` with AES in ECB or CBC mode.
- m := RandomInt(0, 1)
- var out []byte
- if m == 0 {
- // Encrypt with AES in ECB mode.
- out = AESEncryptECB(in, key)
- } else {
- // Encrypt with AES in CBC mode.
- out = AESEncryptCBC(in, key, iv)
- }
- return out
-}
-
func OracleAESEncryptECB(in []byte) []byte {
return AESEncryptECB(append(in, Base64ToBytes(oracleUnknown)...), oracleKey)
}
diff --git a/lib/rand.go b/lib/rand.go
index 1ba1679..be95366 100644
--- a/lib/rand.go
+++ b/lib/rand.go
@@ -37,7 +37,7 @@ func RandomBytes(size int) ([]byte, error) {
}
// Randomly generates `min` to `max` bytes.
-func randomBytesWithLengthBetween(min, max int64) []byte {
+func RandomBytesWithLengthBetween(min, max int64) []byte {
bs := make([]byte, RandomInt(min, max))
_, err := rand.Read(bs)
if err != nil {