aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoachim StroĢˆmbergson <joachim@secworks.se>2018-07-03 10:12:29 +0200
committerJoachim StroĢˆmbergson <joachim@secworks.se>2018-07-03 10:12:29 +0200
commit86a438f988094007cf9ee0832dde823a4ebcba36 (patch)
treedbe48c67bbc36317969f28a4a5a57c793c873076
parent5eb133ca96cade7fd8c462d734723d89dc7ae7ec (diff)
Adding a lot of verbose output to get the internal values we need.
-rwxr-xr-xsrc/model/aes_keywrap.py29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/model/aes_keywrap.py b/src/model/aes_keywrap.py
index ef83baa..8b9d2b0 100755
--- a/src/model/aes_keywrap.py
+++ b/src/model/aes_keywrap.py
@@ -118,23 +118,45 @@ class AESKeyWrapWithPadding(object):
else:
# RFC 3394 section 2.2.1
+ if verbose:
+ print("")
+ print("Number of blocks to wrap: %d" % (n - 1))
+ print("Blocks before wrap:")
+ for i in self._start_stop(1, n):
+ print("R[%d] = %s" % (i, self.bin2hex(R[i])))
+ print("A before wrap: %s" % (self.bin2hex(R[0])))
+ print("")
+
+
for j in self._start_stop(0, 5):
for i in self._start_stop(1, n):
if verbose:
+ print("")
print("Iteration %d, %d" % (j, i))
if verbose:
- print("Before encrypt: R[0] = %s R[i] = %s" % (self.bin2hex(R[0]), self.bin2hex(R[i])))
+ print("Before encrypt: R[0] = %s R[%d] = %s" % (self.bin2hex(R[0]), i, self.bin2hex(R[i])))
R[0], R[i] = self._encrypt(R[0], R[i])
if verbose:
- print("After encrypt: R[0] = %s R[i] = %s" % (self.bin2hex(R[0]), self.bin2hex(R[i])))
+ print("After encrypt: R[0] = %s R[%d] = %s" % (self.bin2hex(R[0]), i, self.bin2hex(R[i])))
W0, W1 = unpack(">LL", R[0])
xorval = n * j + i
W1 ^= xorval
R[0] = pack(">LL", W0, W1)
+ if verbose:
+ print("xorval = 0x%016x" % (xorval))
+
+ if verbose:
+ print("")
+ print("Blocks after wrap:")
+ for i in self._start_stop(1, n):
+ print("R[%d] = %s" % (i, self.bin2hex(R[i])))
+ print("A after wrap: %s" % (self.bin2hex(R[0])))
+ print("")
+
assert len(R) == (n + 1) and all(len(r) == 8 for r in R)
return "".join(R)
@@ -211,6 +233,9 @@ if __name__ == "__main__":
Q = self.hex2bin(Q)
C = self.hex2bin(C)
c = K.wrap_key(Q)
+ if verbose:
+ print("Wrapped result: %s" % (self.bin2hex(c)))
+
q = K.unwrap_key(C)
self.assertEqual(q, Q, "Input and output plaintext did not match: {} <> {}".format(self.bin2hex(Q), self.bin2hex(q)))
self.assertEqual(c, C, "Input and output ciphertext did not match: {} <> {}".format(self.bin2hex(C), self.bin2hex(c)))