From aaabeb704f200023aa544d70eaca9f363e8da975 Mon Sep 17 00:00:00 2001
From: rsiddharth <s@ricketyspace.net>
Date: Thu, 11 Feb 2021 23:00:49 -0500
Subject: lib: update Pkcs7PaddingUndo, AESDecryptCBC

Add error as the second return value to Pkcs7PaddingUndo and
AESDecryptCBC.
---
 challenge/c10.go |  4 ++--
 challenge/c15.go | 28 +++++++++++++++++++---------
 challenge/c16.go |  2 +-
 3 files changed, 22 insertions(+), 12 deletions(-)

(limited to 'challenge')

diff --git a/challenge/c10.go b/challenge/c10.go
index 18f2db2..0ed473b 100644
--- a/challenge/c10.go
+++ b/challenge/c10.go
@@ -97,11 +97,11 @@ func C10() {
 	fmt.Printf("NIST SP 800-38A F.2.1 (has padding):\n%v\n",
 		lib.PrettifyHexStr(lib.BytesToHexStr(cipher80038A)))
 
-	o := lib.AESDecryptCBC(cipher80038A, key80038A, iv80038A)
+	o, _ := lib.AESDecryptCBC(cipher80038A, key80038A, iv80038A)
 	fmt.Printf("NIST SP 800-38A F.2.2:\n%v\n",
 		lib.PrettifyHexStr(lib.BytesToHexStr(o)))
 
-	o = lib.AESDecryptCBC(cipher10, key10, iv10)
+	o, _ = lib.AESDecryptCBC(cipher10, key10, iv10)
 	fmt.Printf("Cryptopals Ch. 10:\n%v", lib.BytesToStr(o))
 }
 
diff --git a/challenge/c15.go b/challenge/c15.go
index 40892ec..e974d64 100644
--- a/challenge/c15.go
+++ b/challenge/c15.go
@@ -15,7 +15,7 @@ func C15() {
 	padded_ice := lib.Pkcs7Padding(ice, 16)
 	fmt.Printf("ice padded: %v\n", padded_ice)
 
-	unpadded_ice := lib.Pkcs7PaddingUndo(padded_ice)
+	unpadded_ice, _ := lib.Pkcs7PaddingUndo(padded_ice)
 	for i := 0; i < len(ice); i++ {
 		if ice[i] != unpadded_ice[i] {
 			panic("padding undo failed!")
@@ -23,18 +23,28 @@ func C15() {
 	}
 	fmt.Printf("unpadded ice: %v\n", unpadded_ice)
 
-	// Will fail and panic
-	// bad_ice := append(ice, []byte{5, 5, 5, 5}...)
-	// fmt.Printf("bad ice: %v\n", bad_ice)
-	// lib.Pkcs7PaddingUndo(bad_ice)
+	// Will fail.
+	bad_ice := append(ice, []byte{5, 5, 5, 5}...)
+	fmt.Printf("bad ice: %v\n", bad_ice)
+	_, err := lib.Pkcs7PaddingUndo(bad_ice)
+	if err != nil {
+		fmt.Printf("bad ice upadding failed: %s\n", err.Error())
+	}
 
-	// Will fail and panic
-	// evil_ice := append(ice, []byte{1, 2, 3, 4}...)
-	// fmt.Printf("evil ice: %v\n", evil_ice)
-	// lib.Pkcs7PaddingUndo(evil_ice)
+	// Will fail.
+	evil_ice := append(ice, []byte{1, 2, 3, 4}...)
+	fmt.Printf("evil ice: %v\n", evil_ice)
+	_, err = lib.Pkcs7PaddingUndo(evil_ice)
+	if err != nil {
+		fmt.Printf("evil ice upadding failed: %s\n", err.Error())
+	}
 }
 
 // Output:
 // ice: [73 67 69 32 73 67 69 32 66 65 66 89]
 // ice padded: [73 67 69 32 73 67 69 32 66 65 66 89 4 4 4 4]
 // unpadded ice: [73 67 69 32 73 67 69 32 66 65 66 89]
+// bad ice: [73 67 69 32 73 67 69 32 66 65 66 89 5 5 5 5]
+// bad ice upadding failed: input is not pkcs#7 padded
+// evil ice: [73 67 69 32 73 67 69 32 66 65 66 89 1 2 3 4]
+// evil ice upadding failed: input is not pkcs#7 padded
diff --git a/challenge/c16.go b/challenge/c16.go
index 534d9fb..155fbaa 100644
--- a/challenge/c16.go
+++ b/challenge/c16.go
@@ -60,7 +60,7 @@ func cbcBitFlipEncrypt(s string) []byte {
 }
 
 func cbcBitFlipDecryptHasAdmin(c []byte) bool {
-	b := lib.AESDecryptCBC(c, cbcBitFlipKey, cbcBitFlipIV)
+	b, _ := lib.AESDecryptCBC(c, cbcBitFlipKey, cbcBitFlipIV)
 	s := lib.BytesToStr(b)
 
 	// Convert to a map
-- 
cgit v1.2.3