summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--challenge/ch13.go30
-rw-r--r--cryptopals.go2
2 files changed, 32 insertions, 0 deletions
diff --git a/challenge/ch13.go b/challenge/ch13.go
new file mode 100644
index 0000000..357a802
--- /dev/null
+++ b/challenge/ch13.go
@@ -0,0 +1,30 @@
+// Copyright © 2020 rsiddharth <s@ricketyspace.net>
+// SPDX-License-Identifier: ISC
+
+package challenge
+
+import (
+ "fmt"
+ "ricketyspace.net/cryptopals/lib"
+)
+
+func C13() {
+ adminBlock := lib.BytesToStr(lib.Pkcs7Padding(lib.StrToBytes("admin"), 16))
+ ep := lib.WebProfileFor("foo@abacus" + adminBlock)
+ encryptedEP := lib.WebEncryptProfile(ep)
+ adminBlockCipher := encryptedEP[16:32] // Second block in the cipher
+
+ ep = lib.WebProfileFor("foo@abacus")
+ encryptedEP = lib.WebEncryptProfile(ep)
+ for i := 0; i < 16; i++ { // Replace last block with the admin cipher block.
+ encryptedEP[32+i] = adminBlockCipher[i]
+ }
+ adminEP := lib.WebDecryptProfile(encryptedEP)
+ adminProfile := lib.WebDecodeProfile(adminEP)
+ fmt.Printf("Admin Encoded Profile: %v\n", adminEP)
+ fmt.Printf("Admin Profile: %v\n", adminProfile)
+}
+
+// Output:
+// Admin Encoded Profile: email=foo@abacus&uid=10001&role=admin
+// Admin Profile: map[email:foo@abacus role:admin uid:10001]
diff --git a/cryptopals.go b/cryptopals.go
index 3100115..1ae8c8d 100644
--- a/cryptopals.go
+++ b/cryptopals.go
@@ -42,5 +42,7 @@ func main() {
challenge.C11()
case 12:
challenge.C12()
+ case 13:
+ challenge.C13()
}
}