Skip to content

Commit 593bbd2

Browse files
author
gefeili
committed
Add a simple test for ShamirSecretSplitter
1 parent 0cd9945 commit 593bbd2

File tree

1 file changed

+38
-11
lines changed

1 file changed

+38
-11
lines changed

core/src/test/java/org/bouncycastle/crypto/threshold/test/ShamirSecretSplitterTest.java

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,48 @@
99
import org.bouncycastle.crypto.threshold.ShamirSplitSecret;
1010
import org.bouncycastle.crypto.threshold.ShamirSplitSecretShare;
1111
import org.bouncycastle.util.test.FixedSecureRandom;
12+
import org.junit.Assert;
1213

1314
public 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

Comments
 (0)