summaryrefslogtreecommitdiffstats
path: root/challenge/c13.go
diff options
context:
space:
mode:
authorrsiddharth <s@ricketyspace.net>2020-12-21 12:54:37 -0500
committerrsiddharth <s@ricketyspace.net>2020-12-21 12:54:37 -0500
commit5967931a29a8588b79ecb732ecc81571f518eed2 (patch)
tree70e7c7c1ae4b477fea74915779321bdb4d1a47fb /challenge/c13.go
parent5a03bb77ffaef47ab109b7b5284d0158f9eafb9c (diff)
challenge/ch13.go -> challenge/c13.go
Diffstat (limited to 'challenge/c13.go')
-rw-r--r--challenge/c13.go30
1 files changed, 30 insertions, 0 deletions
diff --git a/challenge/c13.go b/challenge/c13.go
new file mode 100644
index 0000000..357a802
--- /dev/null
+++ b/challenge/c13.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]