src/eric7/Utilities/crypto/py3AES.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9473
3f23dbf37dbe
diff -r e9e7eca7efee -r bf71ee032bb4 src/eric7/Utilities/crypto/py3AES.py
--- a/src/eric7/Utilities/crypto/py3AES.py	Wed Jul 13 11:16:20 2022 +0200
+++ b/src/eric7/Utilities/crypto/py3AES.py	Wed Jul 13 14:55:47 2022 +0200
@@ -32,7 +32,7 @@
 def append_PKCS7_padding(b):
     """
     Function to pad the given data to a multiple of 16-bytes by PKCS7 padding.
-    
+
     @param b data to be padded (bytes)
     @return padded data (bytes)
     """
@@ -43,18 +43,16 @@
 def strip_PKCS7_padding(b):
     """
     Function to strip off PKCS7 padding.
-    
+
     @param b data to be stripped (bytes)
     @return stripped data (bytes)
     @exception ValueError data padding is invalid
     """
     if len(b) % 16 or not b:
-        raise ValueError(
-            "Data of len {0} can't be PCKS7-padded".format(len(b)))
+        raise ValueError("Data of len {0} can't be PCKS7-padded".format(len(b)))
     numpads = b[-1]
     if numpads > 16:
-        raise ValueError(
-            "Data ending with {0} can't be PCKS7-padded".format(b[-1]))
+        raise ValueError("Data ending with {0} can't be PCKS7-padded".format(b[-1]))
     return b[:-numpads]
 
 
@@ -62,6 +60,7 @@
     """
     Class implementing the Advanced Encryption Standard algorithm.
     """
+
     # valid key sizes
     KeySize = {
         "SIZE_128": 16,
@@ -70,87 +69,788 @@
     }
 
     # Rijndael S-box
-    sbox = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67,
-            0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59,
-            0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7,
-            0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1,
-            0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05,
-            0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83,
-            0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29,
-            0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b,
-            0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa,
-            0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c,
-            0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc,
-            0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec,
-            0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19,
-            0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee,
-            0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49,
-            0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
-            0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4,
-            0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6,
-            0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70,
-            0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9,
-            0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e,
-            0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1,
-            0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0,
-            0x54, 0xbb, 0x16]
+    sbox = [
+        0x63,
+        0x7C,
+        0x77,
+        0x7B,
+        0xF2,
+        0x6B,
+        0x6F,
+        0xC5,
+        0x30,
+        0x01,
+        0x67,
+        0x2B,
+        0xFE,
+        0xD7,
+        0xAB,
+        0x76,
+        0xCA,
+        0x82,
+        0xC9,
+        0x7D,
+        0xFA,
+        0x59,
+        0x47,
+        0xF0,
+        0xAD,
+        0xD4,
+        0xA2,
+        0xAF,
+        0x9C,
+        0xA4,
+        0x72,
+        0xC0,
+        0xB7,
+        0xFD,
+        0x93,
+        0x26,
+        0x36,
+        0x3F,
+        0xF7,
+        0xCC,
+        0x34,
+        0xA5,
+        0xE5,
+        0xF1,
+        0x71,
+        0xD8,
+        0x31,
+        0x15,
+        0x04,
+        0xC7,
+        0x23,
+        0xC3,
+        0x18,
+        0x96,
+        0x05,
+        0x9A,
+        0x07,
+        0x12,
+        0x80,
+        0xE2,
+        0xEB,
+        0x27,
+        0xB2,
+        0x75,
+        0x09,
+        0x83,
+        0x2C,
+        0x1A,
+        0x1B,
+        0x6E,
+        0x5A,
+        0xA0,
+        0x52,
+        0x3B,
+        0xD6,
+        0xB3,
+        0x29,
+        0xE3,
+        0x2F,
+        0x84,
+        0x53,
+        0xD1,
+        0x00,
+        0xED,
+        0x20,
+        0xFC,
+        0xB1,
+        0x5B,
+        0x6A,
+        0xCB,
+        0xBE,
+        0x39,
+        0x4A,
+        0x4C,
+        0x58,
+        0xCF,
+        0xD0,
+        0xEF,
+        0xAA,
+        0xFB,
+        0x43,
+        0x4D,
+        0x33,
+        0x85,
+        0x45,
+        0xF9,
+        0x02,
+        0x7F,
+        0x50,
+        0x3C,
+        0x9F,
+        0xA8,
+        0x51,
+        0xA3,
+        0x40,
+        0x8F,
+        0x92,
+        0x9D,
+        0x38,
+        0xF5,
+        0xBC,
+        0xB6,
+        0xDA,
+        0x21,
+        0x10,
+        0xFF,
+        0xF3,
+        0xD2,
+        0xCD,
+        0x0C,
+        0x13,
+        0xEC,
+        0x5F,
+        0x97,
+        0x44,
+        0x17,
+        0xC4,
+        0xA7,
+        0x7E,
+        0x3D,
+        0x64,
+        0x5D,
+        0x19,
+        0x73,
+        0x60,
+        0x81,
+        0x4F,
+        0xDC,
+        0x22,
+        0x2A,
+        0x90,
+        0x88,
+        0x46,
+        0xEE,
+        0xB8,
+        0x14,
+        0xDE,
+        0x5E,
+        0x0B,
+        0xDB,
+        0xE0,
+        0x32,
+        0x3A,
+        0x0A,
+        0x49,
+        0x06,
+        0x24,
+        0x5C,
+        0xC2,
+        0xD3,
+        0xAC,
+        0x62,
+        0x91,
+        0x95,
+        0xE4,
+        0x79,
+        0xE7,
+        0xC8,
+        0x37,
+        0x6D,
+        0x8D,
+        0xD5,
+        0x4E,
+        0xA9,
+        0x6C,
+        0x56,
+        0xF4,
+        0xEA,
+        0x65,
+        0x7A,
+        0xAE,
+        0x08,
+        0xBA,
+        0x78,
+        0x25,
+        0x2E,
+        0x1C,
+        0xA6,
+        0xB4,
+        0xC6,
+        0xE8,
+        0xDD,
+        0x74,
+        0x1F,
+        0x4B,
+        0xBD,
+        0x8B,
+        0x8A,
+        0x70,
+        0x3E,
+        0xB5,
+        0x66,
+        0x48,
+        0x03,
+        0xF6,
+        0x0E,
+        0x61,
+        0x35,
+        0x57,
+        0xB9,
+        0x86,
+        0xC1,
+        0x1D,
+        0x9E,
+        0xE1,
+        0xF8,
+        0x98,
+        0x11,
+        0x69,
+        0xD9,
+        0x8E,
+        0x94,
+        0x9B,
+        0x1E,
+        0x87,
+        0xE9,
+        0xCE,
+        0x55,
+        0x28,
+        0xDF,
+        0x8C,
+        0xA1,
+        0x89,
+        0x0D,
+        0xBF,
+        0xE6,
+        0x42,
+        0x68,
+        0x41,
+        0x99,
+        0x2D,
+        0x0F,
+        0xB0,
+        0x54,
+        0xBB,
+        0x16,
+    ]
 
     # Rijndael Inverted S-box
-    rsbox = [0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3,
-             0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f,
-             0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54,
-             0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b,
-             0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24,
-             0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8,
-             0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d,
-             0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda,
-             0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab,
-             0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3,
-             0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1,
-             0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41,
-             0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6,
-             0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9,
-             0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d,
-             0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
-             0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0,
-             0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07,
-             0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60,
-             0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f,
-             0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5,
-             0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b,
-             0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55,
-             0x21, 0x0c, 0x7d]
+    rsbox = [
+        0x52,
+        0x09,
+        0x6A,
+        0xD5,
+        0x30,
+        0x36,
+        0xA5,
+        0x38,
+        0xBF,
+        0x40,
+        0xA3,
+        0x9E,
+        0x81,
+        0xF3,
+        0xD7,
+        0xFB,
+        0x7C,
+        0xE3,
+        0x39,
+        0x82,
+        0x9B,
+        0x2F,
+        0xFF,
+        0x87,
+        0x34,
+        0x8E,
+        0x43,
+        0x44,
+        0xC4,
+        0xDE,
+        0xE9,
+        0xCB,
+        0x54,
+        0x7B,
+        0x94,
+        0x32,
+        0xA6,
+        0xC2,
+        0x23,
+        0x3D,
+        0xEE,
+        0x4C,
+        0x95,
+        0x0B,
+        0x42,
+        0xFA,
+        0xC3,
+        0x4E,
+        0x08,
+        0x2E,
+        0xA1,
+        0x66,
+        0x28,
+        0xD9,
+        0x24,
+        0xB2,
+        0x76,
+        0x5B,
+        0xA2,
+        0x49,
+        0x6D,
+        0x8B,
+        0xD1,
+        0x25,
+        0x72,
+        0xF8,
+        0xF6,
+        0x64,
+        0x86,
+        0x68,
+        0x98,
+        0x16,
+        0xD4,
+        0xA4,
+        0x5C,
+        0xCC,
+        0x5D,
+        0x65,
+        0xB6,
+        0x92,
+        0x6C,
+        0x70,
+        0x48,
+        0x50,
+        0xFD,
+        0xED,
+        0xB9,
+        0xDA,
+        0x5E,
+        0x15,
+        0x46,
+        0x57,
+        0xA7,
+        0x8D,
+        0x9D,
+        0x84,
+        0x90,
+        0xD8,
+        0xAB,
+        0x00,
+        0x8C,
+        0xBC,
+        0xD3,
+        0x0A,
+        0xF7,
+        0xE4,
+        0x58,
+        0x05,
+        0xB8,
+        0xB3,
+        0x45,
+        0x06,
+        0xD0,
+        0x2C,
+        0x1E,
+        0x8F,
+        0xCA,
+        0x3F,
+        0x0F,
+        0x02,
+        0xC1,
+        0xAF,
+        0xBD,
+        0x03,
+        0x01,
+        0x13,
+        0x8A,
+        0x6B,
+        0x3A,
+        0x91,
+        0x11,
+        0x41,
+        0x4F,
+        0x67,
+        0xDC,
+        0xEA,
+        0x97,
+        0xF2,
+        0xCF,
+        0xCE,
+        0xF0,
+        0xB4,
+        0xE6,
+        0x73,
+        0x96,
+        0xAC,
+        0x74,
+        0x22,
+        0xE7,
+        0xAD,
+        0x35,
+        0x85,
+        0xE2,
+        0xF9,
+        0x37,
+        0xE8,
+        0x1C,
+        0x75,
+        0xDF,
+        0x6E,
+        0x47,
+        0xF1,
+        0x1A,
+        0x71,
+        0x1D,
+        0x29,
+        0xC5,
+        0x89,
+        0x6F,
+        0xB7,
+        0x62,
+        0x0E,
+        0xAA,
+        0x18,
+        0xBE,
+        0x1B,
+        0xFC,
+        0x56,
+        0x3E,
+        0x4B,
+        0xC6,
+        0xD2,
+        0x79,
+        0x20,
+        0x9A,
+        0xDB,
+        0xC0,
+        0xFE,
+        0x78,
+        0xCD,
+        0x5A,
+        0xF4,
+        0x1F,
+        0xDD,
+        0xA8,
+        0x33,
+        0x88,
+        0x07,
+        0xC7,
+        0x31,
+        0xB1,
+        0x12,
+        0x10,
+        0x59,
+        0x27,
+        0x80,
+        0xEC,
+        0x5F,
+        0x60,
+        0x51,
+        0x7F,
+        0xA9,
+        0x19,
+        0xB5,
+        0x4A,
+        0x0D,
+        0x2D,
+        0xE5,
+        0x7A,
+        0x9F,
+        0x93,
+        0xC9,
+        0x9C,
+        0xEF,
+        0xA0,
+        0xE0,
+        0x3B,
+        0x4D,
+        0xAE,
+        0x2A,
+        0xF5,
+        0xB0,
+        0xC8,
+        0xEB,
+        0xBB,
+        0x3C,
+        0x83,
+        0x53,
+        0x99,
+        0x61,
+        0x17,
+        0x2B,
+        0x04,
+        0x7E,
+        0xBA,
+        0x77,
+        0xD6,
+        0x26,
+        0xE1,
+        0x69,
+        0x14,
+        0x63,
+        0x55,
+        0x21,
+        0x0C,
+        0x7D,
+    ]
 
     # Rijndael Rcon
-    Rcon = [0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36,
-            0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97,
-            0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72,
-            0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66,
-            0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04,
-            0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d,
-            0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3,
-            0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61,
-            0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a,
-            0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40,
-            0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc,
-            0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5,
-            0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a,
-            0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d,
-            0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c,
-            0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35,
-            0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4,
-            0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc,
-            0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08,
-            0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a,
-            0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d,
-            0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2,
-            0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74,
-            0xe8, 0xcb]
+    Rcon = [
+        0x8D,
+        0x01,
+        0x02,
+        0x04,
+        0x08,
+        0x10,
+        0x20,
+        0x40,
+        0x80,
+        0x1B,
+        0x36,
+        0x6C,
+        0xD8,
+        0xAB,
+        0x4D,
+        0x9A,
+        0x2F,
+        0x5E,
+        0xBC,
+        0x63,
+        0xC6,
+        0x97,
+        0x35,
+        0x6A,
+        0xD4,
+        0xB3,
+        0x7D,
+        0xFA,
+        0xEF,
+        0xC5,
+        0x91,
+        0x39,
+        0x72,
+        0xE4,
+        0xD3,
+        0xBD,
+        0x61,
+        0xC2,
+        0x9F,
+        0x25,
+        0x4A,
+        0x94,
+        0x33,
+        0x66,
+        0xCC,
+        0x83,
+        0x1D,
+        0x3A,
+        0x74,
+        0xE8,
+        0xCB,
+        0x8D,
+        0x01,
+        0x02,
+        0x04,
+        0x08,
+        0x10,
+        0x20,
+        0x40,
+        0x80,
+        0x1B,
+        0x36,
+        0x6C,
+        0xD8,
+        0xAB,
+        0x4D,
+        0x9A,
+        0x2F,
+        0x5E,
+        0xBC,
+        0x63,
+        0xC6,
+        0x97,
+        0x35,
+        0x6A,
+        0xD4,
+        0xB3,
+        0x7D,
+        0xFA,
+        0xEF,
+        0xC5,
+        0x91,
+        0x39,
+        0x72,
+        0xE4,
+        0xD3,
+        0xBD,
+        0x61,
+        0xC2,
+        0x9F,
+        0x25,
+        0x4A,
+        0x94,
+        0x33,
+        0x66,
+        0xCC,
+        0x83,
+        0x1D,
+        0x3A,
+        0x74,
+        0xE8,
+        0xCB,
+        0x8D,
+        0x01,
+        0x02,
+        0x04,
+        0x08,
+        0x10,
+        0x20,
+        0x40,
+        0x80,
+        0x1B,
+        0x36,
+        0x6C,
+        0xD8,
+        0xAB,
+        0x4D,
+        0x9A,
+        0x2F,
+        0x5E,
+        0xBC,
+        0x63,
+        0xC6,
+        0x97,
+        0x35,
+        0x6A,
+        0xD4,
+        0xB3,
+        0x7D,
+        0xFA,
+        0xEF,
+        0xC5,
+        0x91,
+        0x39,
+        0x72,
+        0xE4,
+        0xD3,
+        0xBD,
+        0x61,
+        0xC2,
+        0x9F,
+        0x25,
+        0x4A,
+        0x94,
+        0x33,
+        0x66,
+        0xCC,
+        0x83,
+        0x1D,
+        0x3A,
+        0x74,
+        0xE8,
+        0xCB,
+        0x8D,
+        0x01,
+        0x02,
+        0x04,
+        0x08,
+        0x10,
+        0x20,
+        0x40,
+        0x80,
+        0x1B,
+        0x36,
+        0x6C,
+        0xD8,
+        0xAB,
+        0x4D,
+        0x9A,
+        0x2F,
+        0x5E,
+        0xBC,
+        0x63,
+        0xC6,
+        0x97,
+        0x35,
+        0x6A,
+        0xD4,
+        0xB3,
+        0x7D,
+        0xFA,
+        0xEF,
+        0xC5,
+        0x91,
+        0x39,
+        0x72,
+        0xE4,
+        0xD3,
+        0xBD,
+        0x61,
+        0xC2,
+        0x9F,
+        0x25,
+        0x4A,
+        0x94,
+        0x33,
+        0x66,
+        0xCC,
+        0x83,
+        0x1D,
+        0x3A,
+        0x74,
+        0xE8,
+        0xCB,
+        0x8D,
+        0x01,
+        0x02,
+        0x04,
+        0x08,
+        0x10,
+        0x20,
+        0x40,
+        0x80,
+        0x1B,
+        0x36,
+        0x6C,
+        0xD8,
+        0xAB,
+        0x4D,
+        0x9A,
+        0x2F,
+        0x5E,
+        0xBC,
+        0x63,
+        0xC6,
+        0x97,
+        0x35,
+        0x6A,
+        0xD4,
+        0xB3,
+        0x7D,
+        0xFA,
+        0xEF,
+        0xC5,
+        0x91,
+        0x39,
+        0x72,
+        0xE4,
+        0xD3,
+        0xBD,
+        0x61,
+        0xC2,
+        0x9F,
+        0x25,
+        0x4A,
+        0x94,
+        0x33,
+        0x66,
+        0xCC,
+        0x83,
+        0x1D,
+        0x3A,
+        0x74,
+        0xE8,
+        0xCB,
+    ]
 
     def __getSBoxValue(self, num):
         """
         Private method to retrieve a given S-Box value.
-        
+
         @param num position of the value (integer)
         @return value of the S-Box (integer)
         """
@@ -159,7 +859,7 @@
     def __getSBoxInvert(self, num):
         """
         Private method to retrieve a given Inverted S-Box value.
-        
+
         @param num position of the value (integer)
         @return value of the Inverted S-Box (integer)
         """
@@ -171,7 +871,7 @@
 
         Rotate the data word eight bits to the left: eg,
         rotate(1d2c3a4f) == 2c3a4f1d.
-        
+
         @param data data of size 4 (bytearray)
         @return rotated data (bytearray)
         """
@@ -180,7 +880,7 @@
     def __getRconValue(self, num):
         """
         Private method to retrieve a given Rcon value.
-        
+
         @param num position of the value (integer)
         @return Rcon value (integer)
         """
@@ -189,7 +889,7 @@
     def __core(self, data, iteration):
         """
         Private method performing the key schedule core operation.
-        
+
         @param data data to operate on (bytearray)
         @param iteration iteration counter (integer)
         @return modified data (bytearray)
@@ -209,7 +909,7 @@
         Private method performing Rijndael's key expansion.
 
         Expands a 128, 192 or 256 bit key into a 176, 208 or 240 bit key.
-        
+
         @param key key to be expanded (bytes or bytearray)
         @param size size of the key in bytes (16, 24 or 32)
         @param expandedKeySize size of the expanded key (integer)
@@ -227,7 +927,7 @@
 
         while currentSize < expandedKeySize:
             # assign the previous 4 bytes to the temporary value t
-            t = expandedKey[currentSize - 4:currentSize]
+            t = expandedKey[currentSize - 4 : currentSize]
 
             # every 16, 24, 32 bytes we apply the core schedule to t
             # and increment rconIteration afterwards
@@ -235,10 +935,7 @@
                 t = self.__core(t, rconIteration)
                 rconIteration += 1
             # For 256-bit keys, we add an extra sbox to the calculation
-            if (
-                size == self.KeySize["SIZE_256"] and
-                ((currentSize % size) == 16)
-            ):
+            if size == self.KeySize["SIZE_256"] and ((currentSize % size) == 16):
                 for ll in range(4):
                     t[ll] = self.__getSBoxValue(t[ll])
 
@@ -246,17 +943,15 @@
             # expanded key. This becomes the next four bytes in the expanded
             # key.
             for m in range(4):
-                expandedKey[currentSize] = (
-                    expandedKey[currentSize - size] ^ t[m]
-                )
-                currentSize += 1        # __IGNORE_WARNING_Y113__
+                expandedKey[currentSize] = expandedKey[currentSize - size] ^ t[m]
+                currentSize += 1  # __IGNORE_WARNING_Y113__
 
         return expandedKey
 
     def __addRoundKey(self, state, roundKey):
         """
         Private method to add (XORs) the round key to the state.
-        
+
         @param state state to be changed (bytearray)
         @param roundKey key to be used for the modification (bytearray)
         @return modified state (bytearray)
@@ -269,7 +964,7 @@
     def __createRoundKey(self, expandedKey, roundKeyPointer):
         """
         Private method to create a round key.
-        
+
         @param expandedKey expanded key to be used (bytearray)
         @param roundKeyPointer position within the expanded key (integer)
         @return round key (bytearray)
@@ -284,7 +979,7 @@
         """
         Private method to perform a Galois multiplication of 8 bit characters
         a and b.
-        
+
         @param a first factor (byte)
         @param b second factor (byte)
         @return result (byte)
@@ -298,7 +993,7 @@
             # keep a 8 bit
             a &= 0xFF
             if hi_bit_set:
-                a ^= 0x1b
+                a ^= 0x1B
             b >>= 1
         return p
 
@@ -306,7 +1001,7 @@
         """
         Private method to substitute all the values from the state with the
         value in the SBox using the state value as index for the SBox.
-        
+
         @param state state to be worked on (bytearray)
         @param isInv flag indicating an inverse operation (boolean)
         @return modified state (bytearray)
@@ -321,7 +1016,7 @@
         """
         Private method to iterate over the 4 rows and call __shiftRow() with
         that row.
-        
+
         @param state state to be worked on (bytearray)
         @param isInv flag indicating an inverse operation (boolean)
         @return modified state (bytearray)
@@ -334,7 +1029,7 @@
     def __shiftRow(self, state, statePointer, nbr, isInv):
         """
         Private method to shift the bytes of a row to the left.
-        
+
         @param state state to be worked on (bytearray)
         @param statePointer index into the state (integer)
         @param nbr number of positions to shift (integer)
@@ -344,21 +1039,21 @@
         state = state[:]
         for _ in range(nbr):
             if isInv:
-                state[statePointer:statePointer + 4] = (
-                    state[statePointer + 3:statePointer + 4] +
-                    state[statePointer:statePointer + 3]
+                state[statePointer : statePointer + 4] = (
+                    state[statePointer + 3 : statePointer + 4]
+                    + state[statePointer : statePointer + 3]
                 )
             else:
-                state[statePointer:statePointer + 4] = (
-                    state[statePointer + 1:statePointer + 4] +
-                    state[statePointer:statePointer + 1]
+                state[statePointer : statePointer + 4] = (
+                    state[statePointer + 1 : statePointer + 4]
+                    + state[statePointer : statePointer + 1]
                 )
         return state
 
     def __mixColumns(self, state, isInv):
         """
         Private method to perform a galois multiplication of the 4x4 matrix.
-        
+
         @param state state to be worked on (bytearray)
         @param isInv flag indicating an inverse operation (boolean)
         @return modified state (bytearray)
@@ -367,11 +1062,11 @@
         # iterate over the 4 columns
         for i in range(4):
             # construct one column by slicing over the 4 rows
-            column = state[i:i + 16:4]
+            column = state[i : i + 16 : 4]
             # apply the __mixColumn on one column
             column = self.__mixColumn(column, isInv)
             # put the values back into the state
-            state[i:i + 16:4] = column
+            state[i : i + 16 : 4] = column
 
         return state
 
@@ -380,7 +1075,7 @@
         """
         Private method to perform a galois multiplication of 1 column the
         4x4 matrix.
-        
+
         @param column column to be worked on (bytearray)
         @param isInv flag indicating an inverse operation (boolean)
         @return modified column (bytearray)
@@ -391,20 +1086,28 @@
         g = self.__galois_multiplication
 
         column[0] = (
-            g(cpy[0], mult[0]) ^ g(cpy[3], mult[1]) ^
-            g(cpy[2], mult[2]) ^ g(cpy[1], mult[3])
+            g(cpy[0], mult[0])
+            ^ g(cpy[3], mult[1])
+            ^ g(cpy[2], mult[2])
+            ^ g(cpy[1], mult[3])
         )
         column[1] = (
-            g(cpy[1], mult[0]) ^ g(cpy[0], mult[1]) ^
-            g(cpy[3], mult[2]) ^ g(cpy[2], mult[3])
+            g(cpy[1], mult[0])
+            ^ g(cpy[0], mult[1])
+            ^ g(cpy[3], mult[2])
+            ^ g(cpy[2], mult[3])
         )
         column[2] = (
-            g(cpy[2], mult[0]) ^ g(cpy[1], mult[1]) ^
-            g(cpy[0], mult[2]) ^ g(cpy[3], mult[3])
+            g(cpy[2], mult[0])
+            ^ g(cpy[1], mult[1])
+            ^ g(cpy[0], mult[2])
+            ^ g(cpy[3], mult[3])
         )
         column[3] = (
-            g(cpy[3], mult[0]) ^ g(cpy[2], mult[1]) ^
-            g(cpy[1], mult[2]) ^ g(cpy[0], mult[3])
+            g(cpy[3], mult[0])
+            ^ g(cpy[2], mult[1])
+            ^ g(cpy[1], mult[2])
+            ^ g(cpy[0], mult[3])
         )
         return column
 
@@ -412,7 +1115,7 @@
         """
         Private method to apply the 4 operations of the forward round in
         sequence.
-        
+
         @param state state to be worked on (bytearray)
         @param roundKey round key to be used (bytearray)
         @return modified state (bytearray)
@@ -427,7 +1130,7 @@
         """
         Private method to apply the 4 operations of the inverse round in
         sequence.
-        
+
         @param state state to be worked on (bytearray)
         @param roundKey round key to be used (bytearray)
         @return modified state (bytearray)
@@ -441,60 +1144,60 @@
     def __aes_main(self, state, expandedKey, nbrRounds):
         """
         Private method to do the AES encryption for one round.
-        
+
         Perform the initial operations, the standard round, and the
         final operations of the forward AES, creating a round key for
         each round.
-        
+
+        @param state state to be worked on (bytearray)
+        @param expandedKey expanded key to be used (bytearray)
+        @param nbrRounds number of rounds to be done (integer)
+        @return modified state (bytearray)
+        """
+        state = self.__addRoundKey(state, self.__createRoundKey(expandedKey, 0))
+        i = 1
+        while i < nbrRounds:
+            state = self.__aes_round(state, self.__createRoundKey(expandedKey, 16 * i))
+            i += 1
+        state = self.__subBytes(state, False)
+        state = self.__shiftRows(state, False)
+        state = self.__addRoundKey(
+            state, self.__createRoundKey(expandedKey, 16 * nbrRounds)
+        )
+        return state
+
+    def __aes_invMain(self, state, expandedKey, nbrRounds):
+        """
+        Private method to do the inverse AES encryption for one round.
+
+        Perform the initial operations, the standard round, and the
+        final operations of the inverse AES, creating a round key for
+        each round.
+
         @param state state to be worked on (bytearray)
         @param expandedKey expanded key to be used (bytearray)
         @param nbrRounds number of rounds to be done (integer)
         @return modified state (bytearray)
         """
         state = self.__addRoundKey(
-            state, self.__createRoundKey(expandedKey, 0))
-        i = 1
-        while i < nbrRounds:
-            state = self.__aes_round(
-                state, self.__createRoundKey(expandedKey, 16 * i))
-            i += 1
-        state = self.__subBytes(state, False)
-        state = self.__shiftRows(state, False)
-        state = self.__addRoundKey(
-            state, self.__createRoundKey(expandedKey, 16 * nbrRounds))
-        return state
-
-    def __aes_invMain(self, state, expandedKey, nbrRounds):
-        """
-        Private method to do the inverse AES encryption for one round.
-        
-        Perform the initial operations, the standard round, and the
-        final operations of the inverse AES, creating a round key for
-        each round.
-        
-        @param state state to be worked on (bytearray)
-        @param expandedKey expanded key to be used (bytearray)
-        @param nbrRounds number of rounds to be done (integer)
-        @return modified state (bytearray)
-        """
-        state = self.__addRoundKey(
-            state, self.__createRoundKey(expandedKey, 16 * nbrRounds))
+            state, self.__createRoundKey(expandedKey, 16 * nbrRounds)
+        )
         i = nbrRounds - 1
         while i > 0:
             state = self.__aes_invRound(
-                state, self.__createRoundKey(expandedKey, 16 * i))
+                state, self.__createRoundKey(expandedKey, 16 * i)
+            )
             i -= 1
         state = self.__shiftRows(state, True)
         state = self.__subBytes(state, True)
-        state = self.__addRoundKey(
-            state, self.__createRoundKey(expandedKey, 0))
+        state = self.__addRoundKey(state, self.__createRoundKey(expandedKey, 0))
         return state
 
     def encrypt(self, iput, key, size):
         """
         Public method to encrypt a 128 bit input block against the given key
         of size specified.
-        
+
         @param iput input data (bytearray)
         @param key key to be used (bytes or bytearray)
         @param size key size (16, 24 or 32)
@@ -503,7 +1206,7 @@
         """
         if size not in self.KeySize.values():
             raise ValueError("Wrong key size given ({0}).".format(size))
-        
+
         output = bytearray(16)
         # the number of rounds
         nbrRounds = 0
@@ -552,7 +1255,7 @@
         """
         Public method to decrypt a 128 bit input block against the given key
         of size specified.
-        
+
         @param iput input data (bytearray)
         @param key key to be used (bytes or bytearray)
         @param size key size (16, 24 or 32)
@@ -561,14 +1264,14 @@
         """
         if size not in self.KeySize.values():
             raise ValueError("Wrong key size given ({0}).".format(size))
-        
+
         output = bytearray(16)
         # the number of rounds
         nbrRounds = 0
         # the 128 bit block to decode
         block = bytearray(16)
         # set the number of rounds
-        
+
         if size == self.KeySize["SIZE_128"]:
             nbrRounds = 10
         elif size == self.KeySize["SIZE_192"]:
@@ -607,6 +1310,7 @@
     """
     Class implementing the different AES mode of operations.
     """
+
     aes = AES()
 
     # structure of supported modes of operation
@@ -619,7 +1323,7 @@
     def __extractBytes(self, inputData, start, end, mode):
         """
         Private method to extract a range of bytes from the input.
-        
+
         @param inputData input data (bytes)
         @param start start index (integer)
         @param end end index (integer)
@@ -628,8 +1332,7 @@
         """
         if end - start > 16:
             end = start + 16
-        ar = (bytearray(16) if mode == self.ModeOfOperation["CBC"]
-              else bytearray())
+        ar = bytearray(16) if mode == self.ModeOfOperation["CBC"] else bytearray()
 
         i = start
         j = 0
@@ -644,7 +1347,7 @@
     def encrypt(self, inputData, mode, key, size, IV):
         """
         Public method to perform the encryption operation.
-        
+
         @param inputData data to be encrypted (bytes)
         @param mode mode of operation (0, 1 or 2)
         @param key key to be used (bytes)
@@ -655,8 +1358,7 @@
         @exception ValueError key size is invalid or decrypted data is invalid
         """
         if len(key) % size:
-            raise ValueError("Illegal size ({0}) for key '{1}'.".format(
-                size, key))
+            raise ValueError("Illegal size ({0}) for key '{1}'.".format(size, key))
         if len(IV) % 16:
             raise ValueError("IV is not a multiple of 16.")
         # the AES input/output
@@ -733,7 +1435,7 @@
     def decrypt(self, cipherIn, originalsize, mode, key, size, IV):
         """
         Public method to perform the decryption operation.
-        
+
         @param cipherIn data to be decrypted (bytes)
         @param originalsize unencrypted string length (required for CBC)
             (integer)
@@ -745,8 +1447,7 @@
         @exception ValueError key size is invalid or decrypted data is invalid
         """
         if len(key) % size:
-            raise ValueError("Illegal size ({0}) for key '{1}'.".format(
-                size, key))
+            raise ValueError("Illegal size ({0}) for key '{1}'.".format(size, key))
         if len(IV) % 16:
             raise ValueError("IV is not a multiple of 16.")
         # the AES input/output
@@ -822,7 +1523,7 @@
 def encryptData(key, data, mode=AESModeOfOperation.ModeOfOperation["CBC"]):
     """
     Module function to encrypt the given data with the given key.
-    
+
     @param key key to be used for encryption (bytes)
     @param data data to be encrypted (bytes)
     @param mode mode of operations (0, 1 or 2)
@@ -834,7 +1535,7 @@
         data = append_PKCS7_padding(data)
     keysize = len(key)
     if keysize not in AES.KeySize.values():
-        raise ValueError('invalid key size: {0}'.format(keysize))
+        raise ValueError("invalid key size: {0}".format(keysize))
     # create a new iv using random data
     iv = bytearray([i for i in os.urandom(16)])
     moo = AESModeOfOperation()
@@ -848,7 +1549,7 @@
 def decryptData(key, data, mode=AESModeOfOperation.ModeOfOperation["CBC"]):
     """
     Module function to decrypt the given data with the given key.
-    
+
     @param key key to be used for decryption (bytes)
     @param data data to be decrypted (with initialization vector prepended)
         (bytes)
@@ -859,7 +1560,7 @@
     key = bytearray(key)
     keysize = len(key)
     if keysize not in AES.KeySize.values():
-        raise ValueError('invalid key size: {0}'.format(keysize))
+        raise ValueError("invalid key size: {0}".format(keysize))
     # iv is first 16 bytes
     iv = bytearray(data[:16])
     data = bytearray(data[16:])

eric ide

mercurial