~ubuntu-branches/debian/jessie/armory/jessie

« back to all changes in this revision

Viewing changes to pytest/testSplitSecret.py

  • Committer: Package Import Robot
  • Author(s): Joseph Bisch
  • Date: 2014-10-07 10:22:45 UTC
  • Revision ID: package-import@ubuntu.com-20141007102245-2s3x3rhjxg689hek
Tags: upstream-0.92.3
ImportĀ upstreamĀ versionĀ 0.92.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
'''
 
2
Created on Aug 4, 2013
 
3
 
 
4
@author: Andy
 
5
'''
 
6
import sys
 
7
sys.path.append('..')
 
8
from pytest.Tiab import TiabTest
 
9
 
 
10
from random import shuffle
 
11
import unittest
 
12
 
 
13
from armoryengine.ArmoryUtils import FiniteField, FiniteFieldError, SplitSecret, \
 
14
   hex_to_binary, RightNow, binary_to_hex, ReconstructSecret
 
15
 
 
16
 
 
17
sys.argv.append('--nologging')
 
18
sys.argv.append('--nologging')
 
19
 
 
20
TEST_A = 200
 
21
TEST_B = 100
 
22
TEST_ADD_RESULT = 49
 
23
TEST_SUB_RESULT = 100
 
24
TEST_MULT_RESULT = 171
 
25
TEST_DIV_RESULT = 2
 
26
TEST_MTRX = [[1, 2, 3], [3,4,5], [6,7,8] ]
 
27
TEST_VECTER = [1, 2, 3]
 
28
TEST_3_BY_2_MTRX = [[1, 2, 3], [3,4,5]]
 
29
TEST_2_BY_3_MTRX = [[1, 2], [3,4], [5, 6]]
 
30
TEST_RMROW1CO1L_RESULT = [[1, 3], [6, 8]]
 
31
TEST_DET_RESULT = 0
 
32
TEST_MULT_VECT_RESULT = [14, 26, 44]
 
33
TEST_MULT_VECT_RESULT2 = [5, 11, 17]
 
34
TEST_MULT_VECT_RESULT3 = [[7, 10], [15, 22], [23, 34]]
 
35
TEST_MULT_VECT_RESULT4 = [[248, 5, 249], [6, 241, 4], [248, 5, 249]]
 
36
TEST_MULT_VECT_RESULT5 = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
 
37
 
 
38
class SplitSecretTest(TiabTest):
 
39
 
 
40
 
 
41
   def testFiniteFieldTest(self):
 
42
      ff1 = FiniteField(1)
 
43
      self.assertRaises(FiniteFieldError, FiniteField, 257)
 
44
 
 
45
      self.assertEqual(ff1.add(TEST_A, TEST_B), TEST_ADD_RESULT)
 
46
      self.assertEqual(ff1.subtract(TEST_A, TEST_B), TEST_SUB_RESULT)
 
47
      self.assertEqual(ff1.mult(TEST_A, TEST_B), TEST_MULT_RESULT)
 
48
      self.assertEqual(ff1.divide(TEST_A, TEST_B), TEST_DIV_RESULT)
 
49
      self.assertEqual(ff1.mtrxrmrowcol(TEST_MTRX, 1, 1), TEST_RMROW1CO1L_RESULT)
 
50
      self.assertEqual(ff1.mtrxrmrowcol(TEST_3_BY_2_MTRX, 1, 1), [])
 
51
      self.assertEqual(ff1.mtrxdet([[1]]), 1)
 
52
      self.assertEqual(ff1.mtrxdet(TEST_3_BY_2_MTRX), -1)
 
53
      self.assertEqual(ff1.mtrxdet(TEST_MTRX), TEST_DET_RESULT)
 
54
      self.assertEqual(ff1.mtrxmultvect(TEST_MTRX, TEST_VECTER), TEST_MULT_VECT_RESULT)
 
55
      self.assertEqual(ff1.mtrxmultvect(TEST_3_BY_2_MTRX, TEST_VECTER), TEST_MULT_VECT_RESULT[:2])
 
56
      self.assertEqual(ff1.mtrxmultvect(TEST_2_BY_3_MTRX, TEST_VECTER), TEST_MULT_VECT_RESULT2)
 
57
      self.assertEqual(ff1.mtrxmult(TEST_2_BY_3_MTRX, TEST_3_BY_2_MTRX), TEST_MULT_VECT_RESULT3)
 
58
      self.assertEqual(ff1.mtrxmult(TEST_2_BY_3_MTRX, TEST_2_BY_3_MTRX), TEST_MULT_VECT_RESULT3)
 
59
      self.assertEqual(ff1.mtrxadjoint(TEST_MTRX), TEST_MULT_VECT_RESULT4)
 
60
      self.assertEqual(ff1.mtrxinv(TEST_MTRX), TEST_MULT_VECT_RESULT5)
 
61
 
 
62
   def testSplitSecret(self):
 
63
      self.callSplitSecret('9f', 2,3)
 
64
      self.callSplitSecret('9f', 3,5)
 
65
      self.callSplitSecret('9f', 4,7)
 
66
      self.callSplitSecret('9f', 5,9)
 
67
      self.callSplitSecret('9f', 6,7)
 
68
      self.callSplitSecret('9f'*16, 3,5, 16)
 
69
      self.callSplitSecret('9f'*16, 7,10, 16)
 
70
      self.assertRaises(FiniteFieldError, SplitSecret, '9f'*16, 3, 5, 8)
 
71
      self.assertRaises(FiniteFieldError, SplitSecret, '9f', 5,4)
 
72
      self.assertRaises(FiniteFieldError, SplitSecret, '9f', 1,1)
 
73
 
 
74
   
 
75
   def callSplitSecret(self, secretHex, M, N, nbytes=1):
 
76
      secret = hex_to_binary(secretHex)
 
77
      print '\nSplitting secret into %d-of-%d: secret=%s' % (M,N,secretHex)
 
78
      tstart = RightNow() 
 
79
      out = SplitSecret(secret, M, N)
 
80
      tsplit = RightNow() - tstart
 
81
      print 'Fragments:'
 
82
      for i in range(len(out)):
 
83
         x = binary_to_hex(out[i][0])
 
84
         y = binary_to_hex(out[i][1])
 
85
         print '   Fragment %d: [%s, %s]' % (i+1,x,y)
 
86
      trecon = 0
 
87
      print 'Reconstructing secret from various subsets of fragments...'
 
88
      for i in range(10):
 
89
         shuffle(out)
 
90
         tstart = RightNow()
 
91
         reconstruct = ReconstructSecret(out, M, nbytes)
 
92
         trecon += RightNow() - tstart
 
93
         print '   The reconstructed secret is:', binary_to_hex(reconstruct)
 
94
         self.assertEqual(binary_to_hex(reconstruct), secretHex)
 
95
      print 'Splitting secret took: %0.5f sec' % tsplit
 
96
      print 'Reconstructing takes:  %0.5f sec' % (trecon/10)
 
97
 
 
98
# Running tests with "python <module name>" will NOT work for any Armory tests
 
99
# You must run tests with "python -m unittest <module name>" or run all tests with "python -m unittest discover"
 
100
# if __name__ == "__main__":
 
101
#    unittest.main()
 
 
b'\\ No newline at end of file'