Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/quite/humla-spongycastle.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/test/java/org/bouncycastle/crypto/agreement')
-rw-r--r--core/src/test/java/org/bouncycastle/crypto/agreement/test/AllTests.java25
-rw-r--r--core/src/test/java/org/bouncycastle/crypto/agreement/test/JPAKEParticipantTest.java561
-rw-r--r--core/src/test/java/org/bouncycastle/crypto/agreement/test/JPAKEPrimeOrderGroupTest.java85
-rw-r--r--core/src/test/java/org/bouncycastle/crypto/agreement/test/JPAKEUtilTest.java267
4 files changed, 0 insertions, 938 deletions
diff --git a/core/src/test/java/org/bouncycastle/crypto/agreement/test/AllTests.java b/core/src/test/java/org/bouncycastle/crypto/agreement/test/AllTests.java
deleted file mode 100644
index cb5a862b..00000000
--- a/core/src/test/java/org/bouncycastle/crypto/agreement/test/AllTests.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.bouncycastle.crypto.agreement.test;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-public class AllTests
- extends TestCase
-{
- public static void main(String[] args)
- {
- junit.textui.TestRunner.run(suite());
- }
-
- public static Test suite()
- {
- TestSuite suite = new TestSuite("JPKAE Engine Tests");
-
- suite.addTestSuite(JPAKEParticipantTest.class);
- suite.addTestSuite(JPAKEPrimeOrderGroupTest.class);
- suite.addTestSuite(JPAKEUtilTest.class);
-
- return suite;
- }
-}
diff --git a/core/src/test/java/org/bouncycastle/crypto/agreement/test/JPAKEParticipantTest.java b/core/src/test/java/org/bouncycastle/crypto/agreement/test/JPAKEParticipantTest.java
deleted file mode 100644
index c6ecba22..00000000
--- a/core/src/test/java/org/bouncycastle/crypto/agreement/test/JPAKEParticipantTest.java
+++ /dev/null
@@ -1,561 +0,0 @@
-package org.bouncycastle.crypto.agreement.test;
-
-import java.math.BigInteger;
-import java.security.SecureRandom;
-
-import junit.framework.TestCase;
-import org.bouncycastle.crypto.CryptoException;
-import org.bouncycastle.crypto.Digest;
-import org.bouncycastle.crypto.agreement.jpake.JPAKEParticipant;
-import org.bouncycastle.crypto.agreement.jpake.JPAKEPrimeOrderGroup;
-import org.bouncycastle.crypto.agreement.jpake.JPAKEPrimeOrderGroups;
-import org.bouncycastle.crypto.agreement.jpake.JPAKERound1Payload;
-import org.bouncycastle.crypto.agreement.jpake.JPAKERound2Payload;
-import org.bouncycastle.crypto.agreement.jpake.JPAKERound3Payload;
-import org.bouncycastle.crypto.agreement.jpake.JPAKEUtil;
-import org.bouncycastle.crypto.digests.SHA256Digest;
-
-public class JPAKEParticipantTest
- extends TestCase
-{
-
- public void testConstruction()
- throws CryptoException
- {
- JPAKEPrimeOrderGroup group = JPAKEPrimeOrderGroups.SUN_JCE_1024;
- SecureRandom random = new SecureRandom();
- Digest digest = new SHA256Digest();
- String participantId = "participantId";
- char[] password = "password".toCharArray();
-
- // should succeed
- new JPAKEParticipant(participantId, password, group, digest, random);
-
- // null participantId
- try
- {
- new JPAKEParticipant(null, password, group, digest, random);
- fail();
- }
- catch (NullPointerException e)
- {
- // pass
- }
-
- // null password
- try
- {
- new JPAKEParticipant(participantId, null, group, digest, random);
- fail();
- }
- catch (NullPointerException e)
- {
- // pass
- }
-
- // empty password
- try
- {
- new JPAKEParticipant(participantId, "".toCharArray(), group, digest, random);
- fail();
- }
- catch (IllegalArgumentException e)
- {
- // pass
- }
-
- // null group
- try
- {
- new JPAKEParticipant(participantId, password, null, digest, random);
- fail();
- }
- catch (NullPointerException e)
- {
- // pass
- }
-
- // null digest
- try
- {
- new JPAKEParticipant(participantId, password, group, null, random);
- fail();
- }
- catch (NullPointerException e)
- {
- // pass
- }
-
- // null random
- try
- {
- new JPAKEParticipant(participantId, password, group, digest, null);
- fail();
- }
- catch (NullPointerException e)
- {
- // pass
- }
- }
-
- public void testSuccessfulExchange()
- throws CryptoException
- {
-
- JPAKEParticipant alice = createAlice();
- JPAKEParticipant bob = createBob();
-
- ExchangeAfterRound2Creation exchange = runExchangeUntilRound2Creation(alice, bob);
-
- alice.validateRound2PayloadReceived(exchange.bobRound2Payload);
- bob.validateRound2PayloadReceived(exchange.aliceRound2Payload);
-
- BigInteger aliceKeyingMaterial = alice.calculateKeyingMaterial();
- BigInteger bobKeyingMaterial = bob.calculateKeyingMaterial();
-
- JPAKERound3Payload aliceRound3Payload = alice.createRound3PayloadToSend(aliceKeyingMaterial);
- JPAKERound3Payload bobRound3Payload = bob.createRound3PayloadToSend(bobKeyingMaterial);
-
- alice.validateRound3PayloadReceived(bobRound3Payload, aliceKeyingMaterial);
- bob.validateRound3PayloadReceived(aliceRound3Payload, bobKeyingMaterial);
-
- assertEquals(aliceKeyingMaterial, bobKeyingMaterial);
-
- }
-
- public void testIncorrectPassword()
- throws CryptoException
- {
-
- JPAKEParticipant alice = createAlice();
- JPAKEParticipant bob = createBobWithWrongPassword();
-
- ExchangeAfterRound2Creation exchange = runExchangeUntilRound2Creation(alice, bob);
-
- alice.validateRound2PayloadReceived(exchange.bobRound2Payload);
- bob.validateRound2PayloadReceived(exchange.aliceRound2Payload);
-
- BigInteger aliceKeyingMaterial = alice.calculateKeyingMaterial();
- BigInteger bobKeyingMaterial = bob.calculateKeyingMaterial();
-
- JPAKERound3Payload aliceRound3Payload = alice.createRound3PayloadToSend(aliceKeyingMaterial);
- JPAKERound3Payload bobRound3Payload = bob.createRound3PayloadToSend(bobKeyingMaterial);
-
- try
- {
- alice.validateRound3PayloadReceived(bobRound3Payload, aliceKeyingMaterial);
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
-
- try
- {
- bob.validateRound3PayloadReceived(aliceRound3Payload, bobKeyingMaterial);
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
-
- }
-
- /**
- * Tests that {@link JPAKEParticipant} throws appropriate {@link IllegalStateException}s
- * when the methods are called in the wrong order.
- */
- public void testStateValidation()
- throws CryptoException
- {
-
- JPAKEParticipant alice = createAlice();
- JPAKEParticipant bob = createBob();
-
- // We're testing alice here. Bob is just used for help.
-
- // START ROUND 1 CHECKS
-
- assertEquals(JPAKEParticipant.STATE_INITIALIZED, alice.getState());
-
- // create round 2 before round 1
- try
- {
- alice.createRound2PayloadToSend();
- fail();
- }
- catch (IllegalStateException e)
- {
- // pass
- }
-
- JPAKERound1Payload aliceRound1Payload = alice.createRound1PayloadToSend();
-
- assertEquals(JPAKEParticipant.STATE_ROUND_1_CREATED, alice.getState());
-
- // create round 1 payload twice
- try
- {
- alice.createRound1PayloadToSend();
- fail();
- }
- catch (IllegalStateException e)
- {
- // pass
- }
-
- // create round 2 before validating round 1
- try
- {
- alice.createRound2PayloadToSend();
- fail();
- }
- catch (IllegalStateException e)
- {
- // pass
- }
-
- // validate round 2 before validating round 1
- try
- {
- alice.validateRound2PayloadReceived(null);
- fail();
- }
- catch (IllegalStateException e)
- {
- // pass
- }
-
- JPAKERound1Payload bobRound1Payload = bob.createRound1PayloadToSend();
-
- alice.validateRound1PayloadReceived(bobRound1Payload);
-
- assertEquals(JPAKEParticipant.STATE_ROUND_1_VALIDATED, alice.getState());
-
- // validate round 1 payload twice
- try
- {
- alice.validateRound1PayloadReceived(bobRound1Payload);
- fail();
- }
- catch (IllegalStateException e)
- {
- // pass
- }
-
- bob.validateRound1PayloadReceived(aliceRound1Payload);
-
- // START ROUND 2 CHECKS
-
- JPAKERound2Payload aliceRound2Payload = alice.createRound2PayloadToSend();
-
- assertEquals(JPAKEParticipant.STATE_ROUND_2_CREATED, alice.getState());
-
- // create round 2 payload twice
- try
- {
- alice.createRound2PayloadToSend();
- fail();
- }
- catch (IllegalStateException e)
- {
- // pass
- }
-
- // create key before validating round 2
- try
- {
- alice.calculateKeyingMaterial();
- fail();
- }
- catch (IllegalStateException e)
- {
- // pass
- }
-
- // validate round 3 before validating round 2
- try
- {
- alice.validateRound3PayloadReceived(null, null);
- fail();
- }
- catch (IllegalStateException e)
- {
- // pass
- }
-
- JPAKERound2Payload bobRound2Payload = bob.createRound2PayloadToSend();
-
- alice.validateRound2PayloadReceived(bobRound2Payload);
-
- assertEquals(JPAKEParticipant.STATE_ROUND_2_VALIDATED, alice.getState());
-
- // validate round 2 payload twice
- try
- {
- alice.validateRound2PayloadReceived(bobRound2Payload);
- fail();
- }
- catch (IllegalStateException e)
- {
- // pass
- }
-
- bob.validateRound2PayloadReceived(aliceRound2Payload);
-
- // create round 3 before calculating key
- try
- {
- alice.createRound3PayloadToSend(BigInteger.ONE);
- fail();
- }
- catch (IllegalStateException e)
- {
- // pass
- }
-
- // START KEY CALCULATION CHECKS
-
- BigInteger aliceKeyingMaterial = alice.calculateKeyingMaterial();
-
- assertEquals(JPAKEParticipant.STATE_KEY_CALCULATED, alice.getState());
-
- // calculate key twice
- try
- {
- alice.calculateKeyingMaterial();
- fail();
- }
- catch (IllegalStateException e)
- {
- // pass
- }
-
- BigInteger bobKeyingMaterial = bob.calculateKeyingMaterial();
-
- // START ROUND 3 CHECKS
-
- JPAKERound3Payload aliceRound3Payload = alice.createRound3PayloadToSend(aliceKeyingMaterial);
-
- assertEquals(JPAKEParticipant.STATE_ROUND_3_CREATED, alice.getState());
-
- // create round 3 payload twice
- try
- {
- alice.createRound3PayloadToSend(aliceKeyingMaterial);
- fail();
- }
- catch (IllegalStateException e)
- {
- // pass
- }
-
- JPAKERound3Payload bobRound3Payload = bob.createRound3PayloadToSend(bobKeyingMaterial);
-
- alice.validateRound3PayloadReceived(bobRound3Payload, aliceKeyingMaterial);
-
- assertEquals(JPAKEParticipant.STATE_ROUND_3_VALIDATED, alice.getState());
-
- // validate round 3 payload twice
- try
- {
- alice.validateRound3PayloadReceived(bobRound3Payload, aliceKeyingMaterial);
- fail();
- }
- catch (IllegalStateException e)
- {
- // pass
- }
-
- bob.validateRound3PayloadReceived(aliceRound3Payload, bobKeyingMaterial);
-
-
- }
-
- /**
- * Tests that {@link JPAKEParticipant#validateRound1PayloadReceived(JPAKERound1Payload)}
- * calls the appropriate validate methods in {@link JPAKEUtil}.
- * Note that {@link JPAKEUtilTest} tests the individual validate methods
- * called by {@link JPAKEParticipant} more extensively.
- */
- public void testValidateRound1PayloadReceived()
- throws CryptoException
- {
-
- // We're testing alice here. Bob is just used for help.
-
- JPAKERound1Payload bobRound1Payload = createBob().createRound1PayloadToSend();
-
- // should succeed
- createAlice().validateRound1PayloadReceived(bobRound1Payload);
-
- // alice verifies alice's payload
- try
- {
- JPAKEParticipant alice = createAlice();
- alice.validateRound1PayloadReceived(alice.createRound1PayloadToSend());
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
-
- // g^x4 == 1
- try
- {
- createAlice().validateRound1PayloadReceived(new JPAKERound1Payload(
- bobRound1Payload.getParticipantId(),
- bobRound1Payload.getGx1(),
- BigInteger.ONE,
- bobRound1Payload.getKnowledgeProofForX1(),
- bobRound1Payload.getKnowledgeProofForX2()));
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
-
- // zero knowledge proof for x3 fails
- try
- {
- JPAKERound1Payload bobRound1Payload2 = createBob().createRound1PayloadToSend();
- createAlice().validateRound1PayloadReceived(new JPAKERound1Payload(
- bobRound1Payload.getParticipantId(),
- bobRound1Payload.getGx1(),
- bobRound1Payload.getGx2(),
- bobRound1Payload2.getKnowledgeProofForX1(),
- bobRound1Payload.getKnowledgeProofForX2()));
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
-
- // zero knowledge proof for x4 fails
- try
- {
- JPAKERound1Payload bobRound1Payload2 = createBob().createRound1PayloadToSend();
- createAlice().validateRound1PayloadReceived(new JPAKERound1Payload(
- bobRound1Payload.getParticipantId(),
- bobRound1Payload.getGx1(),
- bobRound1Payload.getGx2(),
- bobRound1Payload.getKnowledgeProofForX1(),
- bobRound1Payload2.getKnowledgeProofForX2()));
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
-
- }
-
- /**
- * Tests that {@link JPAKEParticipant#validateRound2PayloadReceived(JPAKERound2Payload)}
- * calls the appropriate validate methods in {@link JPAKEUtil}.
- * Note that {@link JPAKEUtilTest} tests the individual validate methods
- * called by {@link JPAKEParticipant} more extensively.
- */
- public void testValidateRound2PayloadReceived()
- throws CryptoException
- {
-
- // We're testing alice here. Bob is just used for help.
-
- // should succeed
- ExchangeAfterRound2Creation exchange1 = runExchangeUntilRound2Creation(createAlice(), createBob());
- exchange1.alice.validateRound2PayloadReceived(exchange1.bobRound2Payload);
-
- // alice verifies alice's payload
- ExchangeAfterRound2Creation exchange2 = runExchangeUntilRound2Creation(createAlice(), createBob());
- try
- {
- exchange2.alice.validateRound2PayloadReceived(exchange2.aliceRound2Payload);
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
-
- // wrong z
- ExchangeAfterRound2Creation exchange3 = runExchangeUntilRound2Creation(createAlice(), createBob());
- ExchangeAfterRound2Creation exchange4 = runExchangeUntilRound2Creation(createAlice(), createBob());
- try
- {
- exchange3.alice.validateRound2PayloadReceived(exchange4.bobRound2Payload);
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
-
- }
-
- private static class ExchangeAfterRound2Creation
- {
-
- public JPAKEParticipant alice;
- public JPAKERound2Payload aliceRound2Payload;
- public JPAKERound2Payload bobRound2Payload;
-
- public ExchangeAfterRound2Creation(
- JPAKEParticipant alice,
- JPAKERound2Payload aliceRound2Payload,
- JPAKERound2Payload bobRound2Payload)
- {
- this.alice = alice;
- this.aliceRound2Payload = aliceRound2Payload;
- this.bobRound2Payload = bobRound2Payload;
- }
-
- }
-
- private ExchangeAfterRound2Creation runExchangeUntilRound2Creation(JPAKEParticipant alice, JPAKEParticipant bob)
- throws CryptoException
- {
- JPAKERound1Payload aliceRound1Payload = alice.createRound1PayloadToSend();
- JPAKERound1Payload bobRound1Payload = bob.createRound1PayloadToSend();
-
- alice.validateRound1PayloadReceived(bobRound1Payload);
- bob.validateRound1PayloadReceived(aliceRound1Payload);
-
- JPAKERound2Payload aliceRound2Payload = alice.createRound2PayloadToSend();
- JPAKERound2Payload bobRound2Payload = bob.createRound2PayloadToSend();
-
- return new ExchangeAfterRound2Creation(
- alice,
- aliceRound2Payload,
- bobRound2Payload);
- }
-
- private JPAKEParticipant createAlice()
- {
- return createParticipant("alice", "password");
- }
-
- private JPAKEParticipant createBob()
- {
- return createParticipant("bob", "password");
- }
-
- private JPAKEParticipant createBobWithWrongPassword()
- {
- return createParticipant("bob", "wrong");
- }
-
- private JPAKEParticipant createParticipant(String participantId, String password)
- {
- return new JPAKEParticipant(
- participantId,
- password.toCharArray(),
- JPAKEPrimeOrderGroups.SUN_JCE_1024);
- }
-
-}
diff --git a/core/src/test/java/org/bouncycastle/crypto/agreement/test/JPAKEPrimeOrderGroupTest.java b/core/src/test/java/org/bouncycastle/crypto/agreement/test/JPAKEPrimeOrderGroupTest.java
deleted file mode 100644
index 7d22f16a..00000000
--- a/core/src/test/java/org/bouncycastle/crypto/agreement/test/JPAKEPrimeOrderGroupTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.bouncycastle.crypto.agreement.test;
-
-import java.math.BigInteger;
-
-import junit.framework.TestCase;
-import org.bouncycastle.crypto.CryptoException;
-import org.bouncycastle.crypto.agreement.jpake.JPAKEPrimeOrderGroup;
-
-public class JPAKEPrimeOrderGroupTest
- extends TestCase
-{
-
- public void testConstruction()
- throws CryptoException
- {
- // p-1 not evenly divisible by q
- try
- {
- new JPAKEPrimeOrderGroup(BigInteger.valueOf(7), BigInteger.valueOf(5), BigInteger.valueOf(6));
- fail();
- }
- catch (IllegalArgumentException e)
- {
- // pass
- }
-
- // g < 2
- try
- {
- new JPAKEPrimeOrderGroup(BigInteger.valueOf(11), BigInteger.valueOf(5), BigInteger.valueOf(1));
- fail();
- }
- catch (IllegalArgumentException e)
- {
- // pass
- }
-
- // g > p-1
- try
- {
- new JPAKEPrimeOrderGroup(BigInteger.valueOf(11), BigInteger.valueOf(5), BigInteger.valueOf(11));
- fail();
- }
- catch (IllegalArgumentException e)
- {
- // pass
- }
-
- // g^q mod p not equal 1
- try
- {
- new JPAKEPrimeOrderGroup(BigInteger.valueOf(11), BigInteger.valueOf(5), BigInteger.valueOf(6));
- fail();
- }
- catch (IllegalArgumentException e)
- {
- // pass
- }
-
- // p not prime
- try
- {
- new JPAKEPrimeOrderGroup(BigInteger.valueOf(15), BigInteger.valueOf(2), BigInteger.valueOf(4));
- fail();
- }
- catch (IllegalArgumentException e)
- {
- // pass
- }
-
- // q not prime
- try
- {
- new JPAKEPrimeOrderGroup(BigInteger.valueOf(7), BigInteger.valueOf(6), BigInteger.valueOf(3));
- fail();
- }
- catch (IllegalArgumentException e)
- {
- // pass
- }
-
- // should succeed
- new JPAKEPrimeOrderGroup(BigInteger.valueOf(7), BigInteger.valueOf(3), BigInteger.valueOf(4));
- }
-}
diff --git a/core/src/test/java/org/bouncycastle/crypto/agreement/test/JPAKEUtilTest.java b/core/src/test/java/org/bouncycastle/crypto/agreement/test/JPAKEUtilTest.java
deleted file mode 100644
index 20268b8d..00000000
--- a/core/src/test/java/org/bouncycastle/crypto/agreement/test/JPAKEUtilTest.java
+++ /dev/null
@@ -1,267 +0,0 @@
-package org.bouncycastle.crypto.agreement.test;
-
-import java.math.BigInteger;
-import java.security.SecureRandom;
-
-import junit.framework.TestCase;
-import org.bouncycastle.crypto.CryptoException;
-import org.bouncycastle.crypto.Digest;
-import org.bouncycastle.crypto.agreement.jpake.JPAKEPrimeOrderGroup;
-import org.bouncycastle.crypto.agreement.jpake.JPAKEPrimeOrderGroups;
-import org.bouncycastle.crypto.agreement.jpake.JPAKEUtil;
-import org.bouncycastle.crypto.digests.SHA1Digest;
-import org.bouncycastle.crypto.digests.SHA256Digest;
-
-public class JPAKEUtilTest
- extends TestCase
-{
- private static final BigInteger TEN = BigInteger.valueOf(10);
-
- public void testValidateGx4()
- throws CryptoException
- {
- JPAKEUtil.validateGx4(TEN);
-
- try
- {
- JPAKEUtil.validateGx4(BigInteger.ONE);
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
- }
-
- public void testValidateGa()
- throws CryptoException
- {
- JPAKEUtil.validateGa(TEN);
-
- try
- {
- JPAKEUtil.validateGa(BigInteger.ONE);
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
- }
-
- public void testValidateParticipantIdsDiffer()
- throws CryptoException
- {
- JPAKEUtil.validateParticipantIdsDiffer("a", "b");
- JPAKEUtil.validateParticipantIdsDiffer("a", "A");
-
- try
- {
- JPAKEUtil.validateParticipantIdsDiffer("a", "a");
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
- }
-
- public void testValidateParticipantIdsEqual()
- throws CryptoException
- {
- JPAKEUtil.validateParticipantIdsEqual("a", "a");
-
- try
- {
- JPAKEUtil.validateParticipantIdsEqual("a", "b");
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
- }
-
- public void testValidateMacTag()
- throws CryptoException
- {
- JPAKEPrimeOrderGroup pg1 = JPAKEPrimeOrderGroups.SUN_JCE_1024;
-
- SecureRandom random = new SecureRandom();
- Digest digest = new SHA256Digest();
-
- BigInteger x1 = JPAKEUtil.generateX1(pg1.getQ(), random);
- BigInteger x2 = JPAKEUtil.generateX2(pg1.getQ(), random);
- BigInteger x3 = JPAKEUtil.generateX1(pg1.getQ(), random);
- BigInteger x4 = JPAKEUtil.generateX2(pg1.getQ(), random);
-
- BigInteger gx1 = JPAKEUtil.calculateGx(pg1.getP(), pg1.getG(), x1);
- BigInteger gx2 = JPAKEUtil.calculateGx(pg1.getP(), pg1.getG(), x2);
- BigInteger gx3 = JPAKEUtil.calculateGx(pg1.getP(), pg1.getG(), x3);
- BigInteger gx4 = JPAKEUtil.calculateGx(pg1.getP(), pg1.getG(), x4);
-
- BigInteger gB = JPAKEUtil.calculateGA(pg1.getP(), gx3, gx1, gx2);
-
- BigInteger s = JPAKEUtil.calculateS("password".toCharArray());
-
- BigInteger xs = JPAKEUtil.calculateX2s(pg1.getQ(), x4, s);
-
- BigInteger B = JPAKEUtil.calculateA(pg1.getP(), pg1.getQ(), gB, xs);
-
- BigInteger keyingMaterial = JPAKEUtil.calculateKeyingMaterial(pg1.getP(), pg1.getQ(), gx4, x2, s, B);
-
- BigInteger macTag = JPAKEUtil.calculateMacTag("participantId", "partnerParticipantId", gx1, gx2, gx3, gx4, keyingMaterial, digest);
-
- // should succed
- JPAKEUtil.validateMacTag("partnerParticipantId", "participantId", gx3, gx4, gx1, gx2, keyingMaterial, digest, macTag);
-
- // validating own macTag (as opposed to the other party's mactag)
- try
- {
- JPAKEUtil.validateMacTag("participantId", "partnerParticipantId", gx1, gx2, gx3, gx4, keyingMaterial, digest, macTag);
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
-
- // participant ids switched
- try
- {
- JPAKEUtil.validateMacTag("participantId", "partnerParticipantId", gx3, gx4, gx1, gx2, keyingMaterial, digest, macTag);
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
- }
-
- public void testValidateNotNull()
- {
- JPAKEUtil.validateNotNull("a", "description");
-
- try
- {
- JPAKEUtil.validateNotNull(null, "description");
- fail();
- }
- catch (NullPointerException e)
- {
- // pass
- }
- }
-
- public void testValidateZeroKnowledgeProof()
- throws CryptoException
- {
- JPAKEPrimeOrderGroup pg1 = JPAKEPrimeOrderGroups.SUN_JCE_1024;
-
- SecureRandom random = new SecureRandom();
- Digest digest1 = new SHA256Digest();
-
- BigInteger x1 = JPAKEUtil.generateX1(pg1.getQ(), random);
- BigInteger gx1 = JPAKEUtil.calculateGx(pg1.getP(), pg1.getG(), x1);
- String participantId1 = "participant1";
-
- BigInteger[] zkp1 = JPAKEUtil.calculateZeroKnowledgeProof(pg1.getP(), pg1.getQ(), pg1.getG(), gx1, x1, participantId1, digest1, random);
-
- // should succeed
- JPAKEUtil.validateZeroKnowledgeProof(pg1.getP(), pg1.getQ(), pg1.getG(), gx1, zkp1, participantId1, digest1);
-
- // wrong group
- JPAKEPrimeOrderGroup pg2 = JPAKEPrimeOrderGroups.NIST_3072;
- try
- {
- JPAKEUtil.validateZeroKnowledgeProof(pg2.getP(), pg2.getQ(), pg2.getG(), gx1, zkp1, participantId1, digest1);
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
-
- // wrong digest
- Digest digest2 = new SHA1Digest();
- try
- {
- JPAKEUtil.validateZeroKnowledgeProof(pg1.getP(), pg1.getQ(), pg1.getG(), gx1, zkp1, participantId1, digest2);
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
-
- // wrong participant
- String participantId2 = "participant2";
- try
- {
- JPAKEUtil.validateZeroKnowledgeProof(pg1.getP(), pg1.getQ(), pg1.getG(), gx1, zkp1, participantId2, digest1);
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
-
- // wrong gx
- BigInteger x2 = JPAKEUtil.generateX1(pg1.getQ(), random);
- BigInteger gx2 = JPAKEUtil.calculateGx(pg1.getP(), pg1.getG(), x2);
- try
- {
- JPAKEUtil.validateZeroKnowledgeProof(pg1.getP(), pg1.getQ(), pg1.getG(), gx2, zkp1, participantId1, digest1);
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
-
- // wrong zkp
- BigInteger[] zkp2 = JPAKEUtil.calculateZeroKnowledgeProof(pg1.getP(), pg1.getQ(), pg1.getG(), gx2, x2, participantId1, digest1, random);
- try
- {
- JPAKEUtil.validateZeroKnowledgeProof(pg1.getP(), pg1.getQ(), pg1.getG(), gx1, zkp2, participantId1, digest1);
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
-
- // gx <= 0
- try
- {
- JPAKEUtil.validateZeroKnowledgeProof(pg1.getP(), pg1.getQ(), pg1.getG(), BigInteger.ZERO, zkp1, participantId1, digest1);
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
-
- // gx >= p
- try
- {
- JPAKEUtil.validateZeroKnowledgeProof(pg1.getP(), pg1.getQ(), pg1.getG(), pg1.getP(), zkp1, participantId1, digest1);
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
-
- // gx mod q == 1
- try
- {
- JPAKEUtil.validateZeroKnowledgeProof(pg1.getP(), pg1.getQ(), pg1.getG(), pg1.getQ().add(BigInteger.ONE), zkp1, participantId1, digest1);
- fail();
- }
- catch (CryptoException e)
- {
- // pass
- }
- }
-}