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)