github.com/n00py/Slackor@v0.0.0-20200610224921-d007fcea1740/impacket/tests/misc/test_crypto.py (about) 1 from __future__ import print_function, division 2 import unittest 3 from binascii import hexlify, unhexlify 4 5 from impacket.crypto import Generate_Subkey, AES_CMAC, AES_CMAC_PRF_128 6 7 def by8(s): 8 return [s[i:i+8] for i in range(0,len(s),8)] 9 10 def hex8(b): 11 return ' '.join(by8(hexlify(b).decode('ascii'))) 12 13 def pp(prev ,s): 14 print (prev, end= ' ') 15 for c in by8(s): 16 print(c, end=' ') 17 # for i in range((len(s)//8)): 18 # print("%s" % (s[:8]), end = ' ') 19 # s = s[8:] 20 print() 21 return '' 22 23 class CryptoTests(unittest.TestCase): 24 def test_subkey(self): 25 K = "2b7e151628aed2a6abf7158809cf4f3c" 26 M = "6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" 27 28 K1, K2 = Generate_Subkey(unhexlify(K)) 29 self.assertEqual(hex8(K1),'fbeed618 35713366 7c85e08f 7236a8de') 30 self.assertEqual(hex8(K2),'f7ddac30 6ae266cc f90bc11e e46d513b') 31 32 def test_AES_CMAC(self): 33 K = "2b7e151628aed2a6abf7158809cf4f3c" 34 M = "6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" 35 # Example 1: len = 0 36 self.assertEqual(hex8(AES_CMAC(unhexlify(K),unhexlify(M),0)), 37 'bb1d6929 e9593728 7fa37d12 9b756746') 38 # Example 2: len = 16 39 self.assertEqual(hex8(AES_CMAC(unhexlify(K),unhexlify(M),16)), 40 '070a16b4 6b4d4144 f79bdd9d d04a287c') 41 # Example 3: len = 40 42 self.assertEqual(hex8(AES_CMAC(unhexlify(K),unhexlify(M),40)), 43 'dfa66747 de9ae630 30ca3261 1497c827') 44 # Example 3: len = 64 45 self.assertEqual(hex8(AES_CMAC(unhexlify(K),unhexlify(M),64)), 46 '51f0bebf 7e3b9d92 fc497417 79363cfe') 47 M = "eeab9ac8fb19cb012849536168b5d6c7a5e6c5b2fcdc32bc29b0e3654078a5129f6be2562046766f93eebf146b" 48 K = "6c3473624099e17ff3a39ff6bdf6cc38" 49 # Mac = dbf63fd93c4296609e2d66bf79251cb5 50 # Example 4: len = 45 51 self.assertEqual(hex8(AES_CMAC(unhexlify(K),unhexlify(M),45)), 52 'dbf63fd9 3c429660 9e2d66bf 79251cb5') 53 54 def test_AES_CMAC_PRF_128(self): 55 K = "000102030405060708090a0b0c0d0e0fedcb" 56 M = "000102030405060708090a0b0c0d0e0f10111213" 57 58 # AES-CMAC-PRF-128 Test Vectors 59 # Example 1: len = 0, Key Length 18 60 self.assertEqual(hex8(AES_CMAC_PRF_128(unhexlify(K),unhexlify(M),18,len(unhexlify(M)))), 61 '84a348a4 a45d235b abfffc0d 2b4da09a') 62 # Example 1: len = 0, Key Length 16 63 self.assertEqual(hex8(AES_CMAC_PRF_128(unhexlify(K)[:16],unhexlify(M),16,len(unhexlify(M)))), 64 '980ae87b 5f4c9c52 14f5b6a8 455e4c2d') 65 # Example 1: len = 0, Key Length 10 66 self.assertEqual(hex8(AES_CMAC_PRF_128(unhexlify(K)[:10],unhexlify(M),10,len(unhexlify(M)))), 67 '290d9e11 2edb09ee 141fcf64 c0b72f3d') 68 69 if __name__ == "__main__": 70 unittest.main(verbosity=1)