[4a4662]: script.module.cryptopy / lib / crypto / cipher / tkip_encr_test.py  Maximize  Restore  History

Download this file

99 lines (84 with data), 3.5 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#! /usr/bin/env python
# -*- coding: iso-8859-1 -*-
""" crypto.cipher.tkip_encr_test
Tests for tkip encryption (mpdu only, no Michael)
Copyright Š (c) 2002 by Paul A. Lambert
Read LICENSE.txt for license information.
January 2003 May have broken key mixing ...need to validate
November 21, 2002
"""
import unittest
from crypto.cipher.tkip_encr import TKIP_encr
from crypto.keyedHash.tkip_key_mixing import TKIP_Mixer
from binascii_plus import a2b_p, b2a_p
from struct import pack
class TKIP_encr_TestVectors(unittest.TestCase):
""" Test TKIP_encr algorithm using know values """
def checkTKIPtestVector(self, description, key, ta, iv, plainText, cipherText):
""" Process TKIP encryption test vectors (no MIC) """
print '%s %s %s'%('='*((54-len(description))/2),description,'='*((54-len(description))/2))
# Convert from octet lists to string
key = a2b_p(key)
ta = a2b_p(ta)
iv = a2b_p(iv)
pt = a2b_p(plainText)
kct = a2b_p(cipherText)
mixer = TKIP_Mixer(key,ta)
rc4key = mixer.newKey(iv)
alg = TKIP_encr(key)
alg.setTA(ta)
print 'key: %s'%b2a_p(key)[9:]
print 'rc4Key %s'%b2a_p(rc4key)[9:] # calculated
print 'ta: %s'%b2a_p(ta)[9:]
print 'iv: %s'%b2a_p(iv)[9:]
print 'pt: %s'%b2a_p(pt)[9:]
print 'kct: %s'%b2a_p(kct)[9:]
ct = alg.encrypt(pt, iv)
print 'ct: %s'%b2a_p(ct)[9:]
cpt = alg.decrypt(kct)
print 'cpt: %s'%b2a_p(cpt)[9:]
print '========================================================'
self.assertEqual( ct, kct )
alg.setKey(key)
dct = alg.decrypt( ct )
self.assertEqual( dct, pt )
def testTKIP_KnownAnswer_01(self):
""" TKIP Known Answer #1
Hand created from GC example 1 to include MIC in plaintext
note - iv==0 """
description = "TKIP encr test 1 - all zero pn "
key = "00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f"
ta = "10 22 33 44 55 66"
iv = "00 00 00 00 00 00"
plainText = """08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17
18 19 1a 1b
9c 12 11 62 08 e9 a0 83"""
cipherText = """00 20 00 20 00 00 00 00
06 60 91 dc 37 82 31 ca 75 84 82 b6 54 b7 c5 3a
81 4a cb bd 31 1e cc 3b 5c f7 df 69 53 0f c5 1b"""
self.checkTKIPtestVector(description, key, ta, iv, plainText, cipherText)
def XtestTKIP_KnownAnswer_02(self):
""" TKIP Known Answer #2 """
description = "TKIP encr test 2"
key = "36 23 0f 41 40 20 c9 e3 02 cb 5d 5d 28 d5 ff bf"
ta = "01 02 03 04 05 06"
iv = b2a_p(pack('<Q',0x123456785BA0)[:6])
rc4key = "5b 7b a0 31 a1 b0 60 55 f3"
plainText = """aa aa 03 00 00 00 08 00 45 00 00 4e 66 1a 00 00
80 11 be 64 0a 00 01 22 0a ff ff ff 00 89 00 89
00 3a 00 00 80 a6 01 10 00 01 00 00 00 00 00"""
cipherText = """58 11 A0 20 78 56 34 12
12 86 13 90 94 44 88 49 a3 9f e1 48 e0 f4 f3 8f
78 ee de 66 c4 a2 8c a1 bd 39 00 7f 88 9b 95 c6
e6 9d cd 19 31 dc 25 61 c3 e1 9a d4 a6 4d 22
13 9b fa 26"""
protectedMPDU = """08 41 23 01 01 02 03 04 05 06 01 02 03 04 05 06
01 22 33 44 55 66 00 00 a0 7b 5b 20 78 56 34 12
b8 2c 10 90 94 44 80 49 e6 9f e1 06 86 ee f3 8f
f8 ff 60 02 ce a2 8d 83 b7 c6 ff 80 88 12 95 4f
e6 a7 cd 19 b1 7a 24 71 c3 e0 9a d4 a6 4d 22 13
9b fa 26"""
self.checkTKIPtestVector(description, key, ta, iv, plainText, cipherText)
if __name__ == '__main__':
# Run the tests from the command line
unittest.main()