Show
Ignore:
Timestamp:
09/08/09 22:31:31 (4 years ago)
Author:
qsy
Message:

PM updated with new namespace

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branch/BTSniff/tests/testcrack.py

    r5143 r5396  
    11 
    22 
    3 import unittest 
     3import unittest,sys,time 
    44 
    5 import umit.bluetooth.sniff as sniff 
     5import umit.bluetooth.btsniff as btsniff 
    66import umit.bluetooth.crack as crack 
    77import umit.bluetooth.sniffcommon as sniffcommon 
     8 
     9from umit.bluetooth.btlayers import LMPHeader, BtRaw, BtLayerUnit 
     10 
     11LMP = BtLayerUnit 
     12 
     13def _show(string): 
     14    sys.stderr.write(str(string)) 
     15    sys.stderr.write('\n') 
    816 
    917class CrackTest(unittest.TestCase): 
     
    2634 
    2735    def setUp(self): 
    28         self.session = sniffcommon.SniffSession(sniff.State(),  
    29                                                 self.MASTER_ADD,  
    30                                                 self.SLAVE_ADD,  
    31                                                 'hci0', None)  
    32         self.pincrackdata = sniffcommon.PinCrackData() 
     36#        self.session = sniffcommon.SniffSession(sniff.State(),  
     37#                                                self.MASTER_ADD,  
     38#                                                self.SLAVE_ADD,  
     39#                                                'hci0', None)  
     40        self.pincrackdata = crack.PinCrackData() 
    3341        self.pincrackdata.in_rand  = self.IN_RAND 
    3442        self.pincrackdata.m_comb_key = self.M_COMB_KEY 
     
    4048         
    4149    def tearDown(self): 
    42         del self.session 
     50        del self.pincrackdata 
     51 
     52class pincrackrunnerInternalTest(CrackTest): 
     53     
     54#    pcr = crack._pincrackrunner(self.pincrackdata, self.MASTER_ADD, self.SLAVE_ADD) 
     55     
     56    def testRuncrack(self): 
     57         
     58        import tempfile 
     59        tmpfile = tempfile.TemporaryFile() 
     60#        self.pcr.runcrack(self.pincrackdata, self.MASTER_ADD, self.SLAVE_ADD,  
     61#                          tmpfile) 
     62        self.pcr = crack._pincrackrunner(self.pincrackdata, self.MASTER_ADD, self.SLAVE_ADD) 
     63        self.pcr.run() 
     64        i = 0 
     65        while not self.pcr.is_done(): 
     66            i += 1 
     67            if i < 3: 
     68                _show("Sleep") 
     69                import time 
     70                time.sleep(5) 
     71        pin = self.pcr.getpin() 
     72        _show("testRuncrack: pin: %s" % pin) 
     73        self.assertEqual(pin, '1234') 
     74 
    4375 
    4476class PinCrackRunnerTest(CrackTest): 
    4577     
    46     pcr = crack.PinCrackRunner() 
     78    def setUp(self): 
     79        super(PinCrackRunnerTest, self).setUp() 
     80        self.pcr = crack.PinCrackRunner(self.MASTER_ADD, self.SLAVE_ADD) 
     81        lp1 = BtRaw() 
     82        lp1.rawdata = self.IN_RAND 
     83        lp2 = BtRaw() 
     84        lp2.rawdata = self.M_COMB_KEY 
     85        lp3 = BtRaw() 
     86        lp3.rawdata = self.S_COMB_KEY 
     87        lp4 = BtRaw() 
     88        lp4.rawdata = self.M_AU_RAND 
     89        lp5 = BtRaw() 
     90        lp5.rawdata = self.S_AU_RAND 
     91        lp6 = BtRaw() 
     92        lp6.rawdata = self.M_SRES 
     93        lp7 = BtRaw() 
     94        lp7.rawdata = self.S_SRES 
     95        self.payloads = [lp1, lp2, lp3, lp4, lp5, lp7, lp6] 
     96  
     97        lh1 = LMPHeader(tid=1, op1=8) 
     98        lh2 = LMPHeader(tid=1, op1=9) 
     99        lh3 = LMPHeader(tid=1, op1=9) 
     100        lh4 = LMPHeader(tid=1, op1=11) 
     101        lh5 = LMPHeader(tid=1, op1=11) 
     102        lh6 = LMPHeader(tid=1, op1=12) 
     103        lh7 = LMPHeader(tid=1, op1=12) 
     104         
     105        self.headers = [lh1, lh2, lh3, lh4, lh5, lh7, lh6] 
     106        self.sources = ['M', 'M', 'S', 'M', 'S', 'S', 'M'] 
     107        self.lmps = [] 
     108        for header, payload in zip(self.headers, self.payloads): 
     109            self.lmps.append(LMP(header = header, payload = payload)) 
     110 
    47111     
    48     def testRuncrack(self): 
    49         import tempfile 
    50         tmpfile = tempfile.TemporaryFile() 
    51         self.pcr.runcrack(self.pincrackdata, self.session.master, self.session.slave,  
    52                           tmpfile).wait() 
    53         self.assertEqual(self.pcr.getpin(), '1234') 
     112    def test_try_crack(self): 
     113        for i, lmp in zip(range(len(self.lmps)), self.lmps): 
     114            _show('LMP %d' % i) 
     115            if self.pcr.try_crack(lmp, True if self.sources[i] == 'M' else False): 
     116                pin = self.pcr.getpin() 
     117                _show('try_crack_test: Done! Pin: %s' % pin) 
     118                self.assertEqual(pin, '1234') 
     119            else: 
     120                time.sleep(1) 
     121        # First time failed 
     122        # Keep trying for 30 seconds 
     123        if self.pcr.pincrackdata is not None: 
     124            _show("test_try_crack: pincrackdata ready") 
     125            self.assertEqual(self.pincrackdata.in_rand, self.pcr.pincrackdata.in_rand) 
     126            self.assertEqual(self.pincrackdata.s_comb_key, self.pcr.pincrackdata.s_comb_key) 
     127            self.assertEqual(self.pincrackdata.m_comb_key, self.pcr.pincrackdata.m_comb_key) 
     128            self.assertEqual(self.pincrackdata.s_au_rand, self.pcr.pincrackdata.s_au_rand) 
     129            self.assertEqual(self.pincrackdata.m_au_rand, self.pcr.pincrackdata.m_au_rand) 
     130            self.assertEqual(self.pincrackdata.m_sres, self.pcr.pincrackdata.m_sres) 
     131            self.assertEqual(self.pincrackdata.s_sres, self.pcr.pincrackdata.s_sres) 
    54132 
     133        else: 
     134            _show("test_try_crack: pincrackdata not ready") 
     135            assert False 
     136             
     137        while not self.pcr.try_crack(None, None): 
     138            _show('Sleep') 
     139            time.sleep(3) 
     140         
     141        pin = self.pcr.getpin() 
     142        _show("PIN! %s" % pin) 
     143        self.pcr.terminate() 
     144        self.assertEqual(pin, '1234') 
     145        self.assertTrue(self.pcr.pincrackdata is not None, 'PCD is None') 
     146             
     147     
     148    def tearDown(self): 
     149        super(PinCrackRunnerTest, self).tearDown() 
     150        del self.lmps 
     151        del self.payloads 
     152        del self.headers 
    55153 
    56154 
    57155if __name__ == "__main__": 
     156    print 'running testcrack' 
    58157    unittest.main()