22
33import java .io .IOException ;
44import java .security .SecureRandom ;
5- import java . util . Arrays ;
5+
66
77import junit .framework .TestCase ;
88
99import org .bouncycastle .crypto .threshold .ShamirSecretSplitter ;
1010import org .bouncycastle .crypto .threshold .ShamirSplitSecret ;
1111import org .bouncycastle .crypto .threshold .ShamirSplitSecretShare ;
12+ import org .bouncycastle .util .encoders .Hex ;
1213import org .bouncycastle .util .test .FixedSecureRandom ;
14+ import org .bouncycastle .util .Arrays ;
1315
1416import org .junit .Assert ;
1517
@@ -26,45 +28,124 @@ public static void main(String[] args)
2628 public void performTest ()
2729 throws IOException
2830 {
31+ testShamirSecretResplit ();
32+ testShamirSecretMultipleDivide ();
2933 testShamirSecretSplitterSplitAround ();
3034 testPolynomial ();
3135 testShamirSecretSplitter ();
3236 }
3337
38+ public void testShamirSecretResplit ()
39+ throws IOException
40+ {
41+ int l = 9 , m = 3 , n = 9 ;
42+ SecureRandom random = new SecureRandom ();
43+ ShamirSecretSplitter .Algorithm algorithm = ShamirSecretSplitter .Algorithm .AES ;
44+ ShamirSecretSplitter .Mode mode = ShamirSecretSplitter .Mode .Table ;
45+ ShamirSecretSplitter splitter = new ShamirSecretSplitter (algorithm , mode , l , m , n , random );//, secretshare);
46+
47+ ShamirSplitSecret splitSecret = splitter .split ();
48+ ShamirSplitSecretShare [] secretShares = splitSecret .getSecretShares ();
49+
50+ ShamirSplitSecretShare [] secretShares1 = new ShamirSplitSecretShare []{secretShares [0 ], secretShares [1 ], secretShares [2 ]};
51+ ShamirSplitSecret splitSecret1 = new ShamirSplitSecret (algorithm , mode , secretShares1 );
52+ byte [] secret1 = splitSecret1 .getSecret ();
53+
54+
55+ ShamirSplitSecret splitSecret2 = splitter .resplit (secret1 );
56+ ShamirSplitSecretShare [] secretShares2 = splitSecret2 .getSecretShares ();
57+ ShamirSplitSecretShare [] secretShares3 = new ShamirSplitSecretShare []{secretShares2 [0 ], secretShares2 [1 ], secretShares2 [2 ]};
58+ ShamirSplitSecret splitSecret3 = new ShamirSplitSecret (algorithm , mode , secretShares3 );
59+ byte [] secret3 = splitSecret3 .getSecret ();
60+
61+
62+ Assert .assertArrayEquals (secret1 , secret3 );
63+ Assert .assertFalse (Arrays .areEqual (Arrays .concatenate (secretShares [0 ].getEncoded (), secretShares [1 ].getEncoded (), secretShares [2 ].getEncoded ()),
64+ Arrays .concatenate (secretShares2 [0 ].getEncoded (), secretShares2 [1 ].getEncoded (), secretShares2 [2 ].getEncoded ())));
65+
66+ }
67+
68+ public void testShamirSecretMultipleDivide ()
69+ throws IOException
70+ {
71+ int l = 9 , m = 3 , n = 9 ;
72+ SecureRandom random = new SecureRandom ();
73+ ShamirSecretSplitter .Algorithm algorithm = ShamirSecretSplitter .Algorithm .AES ;
74+ ShamirSecretSplitter .Mode mode = ShamirSecretSplitter .Mode .Table ;
75+ ShamirSecretSplitter splitter = new ShamirSecretSplitter (algorithm , mode , l , m , n , random );//, secretshare);
76+
77+ ShamirSplitSecret splitSecret = splitter .split ();
78+ ShamirSplitSecretShare [] secretShares = splitSecret .getSecretShares ();
79+
80+ ShamirSplitSecretShare [] secretShares1 = new ShamirSplitSecretShare []{secretShares [0 ], secretShares [1 ], secretShares [2 ]};
81+ ShamirSplitSecret splitSecret1 = new ShamirSplitSecret (algorithm , mode , secretShares1 );
82+ byte [] secret1 = splitSecret1 .getSecret ();
83+
84+ int mul = random .nextInt (255 );
85+ splitSecret .multiple (mul );
86+ secretShares = splitSecret .getSecretShares ();
87+ ShamirSplitSecretShare [] secretShares4 = new ShamirSplitSecretShare []{secretShares [1 ], secretShares [2 ], secretShares [5 ]};
88+ ShamirSplitSecret splitSecret4 = new ShamirSplitSecret (algorithm , mode , secretShares4 );
89+ byte [] secret4 = splitSecret4 .getSecret ();
90+
91+ splitSecret .divide (mul );
92+ secretShares = splitSecret .getSecretShares ();
93+ ShamirSplitSecretShare [] secretShares2 = new ShamirSplitSecretShare []{secretShares [4 ], secretShares [7 ], secretShares [8 ]};
94+ ShamirSplitSecret splitSecret2 = new ShamirSplitSecret (algorithm , mode , secretShares2 );
95+ byte [] secret2 = splitSecret2 .getSecret ();
96+
97+ Assert .assertArrayEquals (secret1 , secret2 );
98+
99+
100+ // not enough secret shares cannot correctly recover the secret
101+ ShamirSplitSecretShare [] secretShares3 = new ShamirSplitSecretShare []{secretShares [3 ], secretShares [6 ]};
102+ ShamirSplitSecret splitSecret3 = new ShamirSplitSecret (algorithm , mode , secretShares3 );
103+ byte [] secret3 = splitSecret3 .getSecret ();
104+ Assert .assertFalse (Arrays .areEqual (secret1 , secret3 ));
105+ }
106+
34107 public void testShamirSecretSplitterSplitAround ()
35108 throws IOException
36109 {
37110 int l = 9 , m = 3 , n = 9 ;
38111 ShamirSecretSplitter .Algorithm algorithm = ShamirSecretSplitter .Algorithm .AES ;
39112 ShamirSecretSplitter .Mode mode = ShamirSecretSplitter .Mode .Table ;
40113 ShamirSecretSplitter splitter = new ShamirSecretSplitter (algorithm , mode , l , m , n , new SecureRandom ());//, secretshare);
41- byte [] seed = new byte [l ];
42- SecureRandom random = new SecureRandom ();
43- random .nextBytes (seed );
114+ byte [] seed = Hex .decode ("010203040506070809" );
115+ //SecureRandom random = new SecureRandom();
116+
117+ //random.nextBytes(seed);
118+ //System.out.println(Hex.decode(seed));
44119 ShamirSplitSecretShare ss = new ShamirSplitSecretShare (seed );
45120 ShamirSplitSecret splitSecret = splitter .splitAround (ss );
46121 ShamirSplitSecretShare [] secretShares = splitSecret .getSecretShares ();
47- Assert .assertTrue ( Arrays . equals ( secretShares [0 ].getEncoded (), seed ) );
122+ Assert .assertArrayEquals ( secretShares [0 ].getEncoded (), seed );
48123
49124 ShamirSplitSecretShare [] secretShares1 = new ShamirSplitSecretShare []{secretShares [0 ], secretShares [1 ], secretShares [2 ]};
50125 ShamirSplitSecret splitSecret1 = new ShamirSplitSecret (algorithm , mode , secretShares1 );
51- byte [] secret1 = splitSecret1 .recombine ();
126+ byte [] secret1 = splitSecret1 .getSecret ();
52127
53128 ShamirSplitSecretShare [] secretShares4 = new ShamirSplitSecretShare []{secretShares [1 ], secretShares [2 ], secretShares [5 ]};
54129 ShamirSplitSecret splitSecret4 = new ShamirSplitSecret (algorithm , mode , secretShares4 );
55- byte [] secret4 = splitSecret4 .recombine ();
130+ byte [] secret4 = splitSecret4 .getSecret ();
56131
57132 ShamirSplitSecretShare [] secretShares2 = new ShamirSplitSecretShare []{secretShares [4 ], secretShares [7 ], secretShares [8 ]};
58133 ShamirSplitSecret splitSecret2 = new ShamirSplitSecret (algorithm , mode , secretShares2 );
59- byte [] secret2 = splitSecret2 .recombine ();
134+ byte [] secret2 = splitSecret2 .getSecret ();
60135
61- Assert .assertTrue (Arrays .equals (secret1 , secret2 ));
136+ Assert .assertArrayEquals (secret1 , secret2 );
137+ Assert .assertArrayEquals (secret1 , secret4 );
62138
63139 // not enough secret shares cannot correctly recover the secret
64140 ShamirSplitSecretShare [] secretShares3 = new ShamirSplitSecretShare []{secretShares [3 ], secretShares [6 ]};
65141 ShamirSplitSecret splitSecret3 = new ShamirSplitSecret (algorithm , mode , secretShares3 );
66- byte [] secret3 = splitSecret3 .recombine ();
67- Assert .assertFalse (Arrays .equals (secret1 , secret3 ));
142+ byte [] secret3 = splitSecret3 .getSecret ();
143+ Assert .assertFalse (Arrays .areEqual (secret1 , secret3 ));
144+
145+ secretShares3 = new ShamirSplitSecretShare []{secretShares [0 ], secretShares [1 ]};
146+ splitSecret3 = new ShamirSplitSecret (algorithm , mode , secretShares3 );
147+ secret3 = splitSecret3 .getSecret ();
148+ Assert .assertFalse (Arrays .areEqual (secret1 , secret3 ));
68149 }
69150
70151 public void testShamirSecretSplitter ()
@@ -79,19 +160,19 @@ public void testShamirSecretSplitter()
79160
80161 ShamirSplitSecretShare [] secretShares1 = new ShamirSplitSecretShare []{secretShares [0 ], secretShares [1 ], secretShares [2 ]};
81162 ShamirSplitSecret splitSecret1 = new ShamirSplitSecret (algorithm , mode , secretShares1 );
82- byte [] secret1 = splitSecret1 .recombine ();
163+ byte [] secret1 = splitSecret1 .getSecret ();
83164
84165 ShamirSplitSecretShare [] secretShares2 = new ShamirSplitSecretShare []{secretShares [4 ], secretShares [7 ], secretShares [8 ]};
85166 ShamirSplitSecret splitSecret2 = new ShamirSplitSecret (algorithm , mode , secretShares2 );
86- byte [] secret2 = splitSecret2 .recombine ();
167+ byte [] secret2 = splitSecret2 .getSecret ();
87168
88- Assert .assertTrue ( Arrays . equals ( secret1 , secret2 ) );
169+ Assert .assertArrayEquals ( secret1 , secret2 );
89170
90171 // not enough secret shares cannot correctly recover the secret
91172 ShamirSplitSecretShare [] secretShares3 = new ShamirSplitSecretShare []{secretShares [3 ], secretShares [6 ]};
92173 ShamirSplitSecret splitSecret3 = new ShamirSplitSecret (algorithm , mode , secretShares3 );
93- byte [] secret3 = splitSecret3 .recombine ();
94- Assert .assertFalse (Arrays .equals (secret1 , secret3 ));
174+ byte [] secret3 = splitSecret3 .getSecret ();
175+ Assert .assertFalse (Arrays .areEqual (secret1 , secret3 ));
95176 }
96177// private static Polynomial polynomial1 = new PolynomialTable(Polynomial.AES);
97178// private static Polynomial polynomial2 = new PolynomialTable(Polynomial.RSA);
@@ -1020,13 +1101,13 @@ static void testMatrixMultiplication(ShamirSecretSplitter poly, byte[][] splits)
10201101 {
10211102 result [i ] = secretShares [i ].getEncoded ();
10221103 }
1023- assertEquals (Arrays .deepToString (splits ), Arrays .deepToString (result ));
1104+ assertEquals (java . util . Arrays .deepToString (splits ), java . util . Arrays .deepToString (result ));
10241105 }
10251106
10261107 public void testRecombine (ShamirSplitSecret splitSecret , byte [] secret )
10271108 throws IOException
10281109 {
1029- byte [] result = splitSecret .recombine ();
1030- assertTrue (Arrays .equals (secret , result ));
1110+ byte [] result = splitSecret .getSecret ();
1111+ assertTrue (Arrays .areEqual (secret , result ));
10311112 }
10321113}
0 commit comments