99import org .bouncycastle .crypto .threshold .ShamirSplitSecret ;
1010import org .bouncycastle .crypto .threshold .ShamirSplitSecretShare ;
1111import org .bouncycastle .util .test .FixedSecureRandom ;
12+ import org .junit .Assert ;
1213
1314public class ShamirSecretSplitterTest
1415 extends TestCase
1516{
17+ public static void main (String [] args )
18+ {
19+ ShamirSecretSplitterTest test = new ShamirSecretSplitterTest ();
20+ test .performTest ();
21+ }
22+
23+ public void performTest ()
24+ {
25+ testPolynomial ();
26+ testShamirSecretSplitter ();
27+ }
28+
29+ private void testShamirSecretSplitter ()
30+ {
31+ int l = 9 , m = 3 , n = 9 ;
32+ ShamirSecretSplitter .Algorithm algorithm = ShamirSecretSplitter .Algorithm .AES ;
33+ ShamirSecretSplitter .Mode mode = ShamirSecretSplitter .Mode .Table ;
34+ ShamirSecretSplitter splitter = new ShamirSecretSplitter (algorithm , mode , l , m , n , new SecureRandom ());
35+ ShamirSplitSecret splitSecret = splitter .split ();
36+ ShamirSplitSecretShare [] secretShares = splitSecret .getSecretShare ();
37+
38+ ShamirSplitSecretShare [] secretShares1 = new ShamirSplitSecretShare []{secretShares [0 ], secretShares [1 ], secretShares [2 ]};
39+ ShamirSplitSecret splitSecret1 = new ShamirSplitSecret (algorithm , mode , secretShares1 );
40+ byte [] secret1 = splitSecret1 .recombine ();
41+
42+ ShamirSplitSecretShare [] secretShares2 = new ShamirSplitSecretShare []{secretShares [4 ], secretShares [7 ], secretShares [8 ]};
43+ ShamirSplitSecret splitSecret2 = new ShamirSplitSecret (algorithm , mode , secretShares2 );
44+ byte [] secret2 = splitSecret2 .recombine ();
45+
46+ Assert .assertTrue (Arrays .equals (secret1 , secret2 ));
47+
48+ // not enough secret shares cannot correctly recover the secret
49+ ShamirSplitSecretShare [] secretShares3 = new ShamirSplitSecretShare []{secretShares [3 ], secretShares [6 ]};
50+ ShamirSplitSecret splitSecret3 = new ShamirSplitSecret (algorithm , mode , secretShares3 );
51+ byte [] secret3 = splitSecret3 .recombine ();
52+ Assert .assertFalse (Arrays .equals (secret1 , secret3 ));
53+ }
1654// private static Polynomial polynomial1 = new PolynomialTable(Polynomial.AES);
1755// private static Polynomial polynomial2 = new PolynomialTable(Polynomial.RSA);
1856 // Test test vectors for Polynomial 1 (x^^8 + x^^4 + x^^3 + x + 1)
@@ -773,12 +811,6 @@ public class ShamirSecretSplitterTest
773811 private static final byte [] TV011D_TV6_SECRET =
774812 {(byte )0x01 , (byte )0x02 , (byte )0x03 , (byte )0x04 , (byte )0x05 , (byte )0x06 , (byte )0x07 , (byte )0x08 , (byte )0x09 , (byte )0x0A , (byte )0x0B , (byte )0x0C , (byte )0x0D , (byte )0x0E , (byte )0x0F };
775813
776- public static void main (String [] args )
777- {
778- ShamirSecretSplitterTest test = new ShamirSecretSplitterTest ();
779- test .performTest ();
780- }
781-
782814 private interface PolynomialFactory
783815 {
784816 ShamirSecretSplitter newInstance (int l , int m , int n , SecureRandom random );
@@ -792,11 +824,6 @@ public String getName()
792824 return "Polynomial Test" ;
793825 }
794826
795- public void performTest ()
796- {
797- testPolynomial ();
798- }
799-
800827 public void testPolynomial ()
801828 {
802829 testPolynoimial1 (new PolynomialFactory ()
0 commit comments