diff --git a/source/crypto/crypto-adv/pom.xml b/source/crypto/crypto-adv/pom.xml index dc01e85d..ac72b043 100644 --- a/source/crypto/crypto-adv/pom.xml +++ b/source/crypto/crypto-adv/pom.xml @@ -27,20 +27,6 @@ ${project.version} - - org.powermock - powermock-module-junit4 - 1.6.2 - test - - - - org.powermock - powermock-api-mockito - 1.6.2 - test - - net.i2p.crypto eddsa @@ -52,11 +38,6 @@ 5.1.0 - - org.mockito - mockito-core - test - com.jd.blockchain crypto-framework @@ -64,5 +45,11 @@ compile + + com.n1analytics + javallier_2.10 + 0.6.0 + + \ No newline at end of file diff --git a/source/crypto/crypto-adv/src/main/java/com/jd/blockchain/crypto/mpc/MultiSum.java b/source/crypto/crypto-adv/src/main/java/com/jd/blockchain/crypto/mpc/MultiSum.java index cb0316d3..7fe64ef9 100644 --- a/source/crypto/crypto-adv/src/main/java/com/jd/blockchain/crypto/mpc/MultiSum.java +++ b/source/crypto/crypto-adv/src/main/java/com/jd/blockchain/crypto/mpc/MultiSum.java @@ -2,6 +2,8 @@ package com.jd.blockchain.crypto.mpc; import java.math.BigInteger; +import com.n1analytics.paillier.PaillierPrivateKey; +import com.n1analytics.paillier.PaillierPublicKey; import org.bouncycastle.crypto.AsymmetricCipherKeyPair; import org.bouncycastle.crypto.CipherParameters; import org.bouncycastle.crypto.agreement.ECDHBasicAgreement; @@ -12,9 +14,6 @@ import org.bouncycastle.math.ec.ECCurve; import org.bouncycastle.math.ec.ECPoint; import org.bouncycastle.util.encoders.Hex; -import com.jd.blockchain.crypto.paillier.KeyPair; -import com.jd.blockchain.crypto.paillier.PaillierUtils; -import com.jd.blockchain.crypto.paillier.PublicKey; import com.jd.blockchain.crypto.utils.sm.SM2Utils; import com.jd.blockchain.crypto.utils.sm.SM3Utils; import com.jd.blockchain.utils.io.BytesUtils; @@ -32,7 +31,6 @@ public class MultiSum { this.ePubKey = (ECPublicKeyParameters) eKeyPair.getPublic(); this.curve = SM2Utils.getCurve(); this.domainParams = SM2Utils.getDomainParams(); - } public BigInteger calculateAgreement(CipherParameters otherEPubKey){ @@ -47,20 +45,23 @@ public class MultiSum { return new BigInteger(1,SM3Utils.hash(inputBytes)); } - public static BigInteger encryptBlindedMsg(PublicKey encKey, BigInteger msg, BigInteger frontShare, BigInteger rearShare){ - return encKey.encrypt(msg.add(frontShare).subtract(rearShare).mod(encKey.getN())); + public static BigInteger encryptBlindedMsg(PaillierPublicKey encKey, BigInteger msg, BigInteger frontShare, BigInteger rearShare){ + BigInteger modulus = encKey.getModulus(); + BigInteger plaintext = msg.add(frontShare).subtract(rearShare).mod(modulus); + return encKey.raw_encrypt(plaintext); } - public static BigInteger aggregateCiphertexts(PublicKey encKey, BigInteger... bigIntegersList){ + public static BigInteger aggregateCiphertexts(PaillierPublicKey encKey, BigInteger... bigIntegers){ BigInteger aggregatedCiphertext = BigInteger.ONE; - for (BigInteger entry : bigIntegersList) { - aggregatedCiphertext = aggregatedCiphertext.multiply(entry).mod(encKey.getnSquared()); + BigInteger modulusSquared = encKey.getModulusSquared(); + for (BigInteger entry : bigIntegers) { + aggregatedCiphertext = aggregatedCiphertext.multiply(entry).mod(modulusSquared); } return aggregatedCiphertext; } - public static BigInteger decrypt(KeyPair keyPair, BigInteger ciphertext){ - return keyPair.decrypt(ciphertext); + public static BigInteger decrypt(PaillierPrivateKey decKey, BigInteger ciphertext){ + return decKey.raw_decrypt(ciphertext); } public ECPublicKeyParameters getEPubKey(){return ePubKey;} @@ -79,7 +80,7 @@ public class MultiSum { } public byte[] getEPrivKeyBytes(){ - return PaillierUtils.BigIntegerToLBytes(ePrivKey.getD(),32); + return BigIntegerToLBytes(ePrivKey.getD(),32); } public ECPublicKeyParameters resolveEPubKey(byte[] ePubKeyBytes){ @@ -95,4 +96,16 @@ public class MultiSum { return new ECPrivateKeyParameters(new BigInteger(1,ePrivKeyBytes),domainParams); } + // To convert BigInteger to byte[] whose length is l + private static byte[] BigIntegerToLBytes(BigInteger b, int l){ + byte[] tmp = b.toByteArray(); + byte[] result = new byte[l]; + if (tmp.length > result.length) { + System.arraycopy(tmp, tmp.length - result.length, result, 0, result.length); + } + else { + System.arraycopy(tmp,0,result,result.length-tmp.length,tmp.length); + } + return result; + } } diff --git a/source/crypto/crypto-adv/src/main/java/com/jd/blockchain/crypto/paillier/KeyPair.java b/source/crypto/crypto-adv/src/main/java/com/jd/blockchain/crypto/paillier/KeyPair.java deleted file mode 100644 index 68fd6970..00000000 --- a/source/crypto/crypto-adv/src/main/java/com/jd/blockchain/crypto/paillier/KeyPair.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.jd.blockchain.crypto.paillier; - -import java.math.BigInteger; -import java.util.List; - -import com.jd.blockchain.utils.io.BytesUtils; - -/** - * The MIT License (MIT) - * - * Copyright (c) 2014 Hendrik Kunert - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/** - * A class that holds a pair of associated public and private keys. - */ -public class KeyPair { - private final PrivateKey privateKey; - private final PublicKey publicKey; - private final BigInteger upperBound; - - public KeyPair(PrivateKey privateKey, PublicKey publicKey, BigInteger upperBound) { - this.privateKey = privateKey; - this.publicKey = publicKey; - this.upperBound = upperBound; - } - - public KeyPair(byte[] privKeyBytes,byte[] pubKeyBytes,byte[] upperBoundBytes){ - this.privateKey = new PrivateKey(privKeyBytes); - this.publicKey = new PublicKey(pubKeyBytes); - this.upperBound = new BigInteger(upperBoundBytes); - } - - public KeyPair(byte[] keyPairBytes){ - List list = PaillierUtils.split(keyPairBytes, "##KeyPair##".getBytes()); - this.privateKey = new PrivateKey(list.get(0)); - this.publicKey = new PublicKey(list.get(1)); - this.upperBound = new BigInteger(list.get(2)); - } - - public PrivateKey getPrivateKey() { - return privateKey; - } - - public PublicKey getPublicKey() { - return publicKey; - } - - public BigInteger getUpperBound() { return upperBound; } - - /** - * Decrypts the given ciphertext. - * - * @param c The ciphertext that should be decrypted. - * @return The corresponding plaintext. If an upper bound was given to {@link KeyPairBuilder}, - * the result can also be negative. See {@link KeyPairBuilder#upperBound(BigInteger)} for details. - */ - public final BigInteger decrypt(BigInteger c) { - - BigInteger n = publicKey.getN(); - BigInteger nSquare = publicKey.getnSquared(); - BigInteger lambda = privateKey.getLambda(); - - BigInteger u = privateKey.getPreCalculatedDenominator(); - - BigInteger p = c.modPow(lambda, nSquare).subtract(BigInteger.ONE).divide(n).multiply(u).mod(n); - - if (upperBound != null && p.compareTo(upperBound) > 0) { - p = p.subtract(n); - } - - return p; - } - - public byte[] getUpperBoundBytes(){ return upperBound.toByteArray(); } - - public byte[] getKeyPairBytes(){ - return BytesUtils.concat(privateKey.getPrivKeyBytes(),"##KeyPair##".getBytes(),publicKey.getPubKeyBytes(),"##KeyPair##".getBytes(),upperBound.toByteArray()); - } -} diff --git a/source/crypto/crypto-adv/src/main/java/com/jd/blockchain/crypto/paillier/KeyPairBuilder.java b/source/crypto/crypto-adv/src/main/java/com/jd/blockchain/crypto/paillier/KeyPairBuilder.java deleted file mode 100644 index c4234cae..00000000 --- a/source/crypto/crypto-adv/src/main/java/com/jd/blockchain/crypto/paillier/KeyPairBuilder.java +++ /dev/null @@ -1,165 +0,0 @@ -package com.jd.blockchain.crypto.paillier; - -import java.math.BigInteger; -import java.security.SecureRandom; -import java.util.Random; -/** - * The MIT License (MIT) - * - * Copyright (c) 2014 Hendrik Kunert - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/** - * A class that is used for generating a pair of associated public and private - * keys. - * - * @see KeyPair - */ -public class KeyPairBuilder { - - private int bits = 1024; - - private int certainty = 0; - - private Random rng; - - private BigInteger upperBound; - - /** - * Sets the size of the key to be created. - *

- * The default size is 1024 bits. - * - * @param bits The size of the key in bits. - * @return This instance of KeyPairBuilder for method chaining. - */ - public KeyPairBuilder bits(int bits) { - this.bits = bits; - return this; - } - - /** - * See {@link BigInteger#BigInteger(int, int, Random)} for more details. - *

- * The default value is 0. - * - * @return This instance of KeyPairBuilder for method chaining. - */ - public KeyPairBuilder certainty(int certainty) { - this.certainty = certainty; - return this; - } - - /** - * Sets the random number generator that is used for the generation of - * internally needed prime numbers. - *

- * The default is {@link SecureRandom}. - *

- * Warning: - * The change of this value affects the security of the whole cryptographic - * system. - * - * @param rng The random number generator that should be used instead of - * {@link SecureRandom}. - * @return This instance of KeyPairBuilder for method chaining. - */ - public KeyPairBuilder randomNumberGenerator(Random rng) { - this.rng = rng; - return this; - } - - /** - * Sets an upper bound that is used for decrypting ciphertexts representing a negative value. - *

- * In most cases the upper bound should be the same as of the underlying number system - - * for example {@link Integer#MAX_VALUE}. - * - * @param b The upper bound. - * @return This instance of KeyPairBuilder for method chaining. - */ - public KeyPairBuilder upperBound(BigInteger b) { - this.upperBound = b; - return this; - } - - /** - * Creates a pair of associated public and private keys. - * - * @return The pair of associated public and private keys. - */ - public KeyPair generateKeyPair() { - if (rng == null) { - rng = new SecureRandom(); - } - - BigInteger p, q; - int length = bits / 2; - if (certainty > 0) { - p = new BigInteger(length, certainty, rng); - q = new BigInteger(length, certainty, rng); - } else { - p = BigInteger.probablePrime(length, rng); - q = BigInteger.probablePrime(length, rng); - } - - BigInteger n = p.multiply(q); - BigInteger nSquared = n.multiply(n); - - BigInteger pMinusOne = p.subtract(BigInteger.ONE); - BigInteger qMinusOne = q.subtract(BigInteger.ONE); - - BigInteger lambda = this.lcm(pMinusOne, qMinusOne); - - BigInteger g; - BigInteger helper; - - do { - g = new BigInteger(bits, rng); - helper = calculateL(g.modPow(lambda, nSquared), n); - - } while (!helper.gcd(n).equals(BigInteger.ONE)); - - PublicKey publicKey = new PublicKey(n, nSquared, g, bits); - PrivateKey privateKey = new PrivateKey(lambda, helper.modInverse(n)); - - return new KeyPair(privateKey, publicKey, upperBound); - - } - - // TODO separate this somewhere - private BigInteger calculateL(BigInteger u, BigInteger n) { - BigInteger result = u.subtract(BigInteger.ONE); - result = result.divide(n); - return result; - } - - // TODO add to own BigInteger extended class - private BigInteger lcm(BigInteger a, BigInteger b) { - BigInteger result; - BigInteger gcd = a.gcd(b); - - result = a.abs().divide(gcd); - result = result.multiply(b.abs()); - - return result; - } -} diff --git a/source/crypto/crypto-adv/src/main/java/com/jd/blockchain/crypto/paillier/PaillierUtils.java b/source/crypto/crypto-adv/src/main/java/com/jd/blockchain/crypto/paillier/PaillierUtils.java deleted file mode 100644 index 4c199487..00000000 --- a/source/crypto/crypto-adv/src/main/java/com/jd/blockchain/crypto/paillier/PaillierUtils.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.jd.blockchain.crypto.paillier; - -import java.math.BigInteger; -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; - -public class PaillierUtils { - - // To convert BigInteger to byte[] whose length is l - public static byte[] BigIntegerToLBytes(BigInteger b, int l){ - byte[] tmp = b.toByteArray(); - byte[] result = new byte[l]; - if (tmp.length > result.length) { - System.arraycopy(tmp, tmp.length - result.length, result, 0, result.length); - } - else { - System.arraycopy(tmp,0,result,result.length-tmp.length,tmp.length); - } - return result; - } - - public static byte[] intToBytes(int i){ - byte[] result = new byte[4]; - result[0] = (byte) (i >> 24); - result[1] = (byte) (i >> 16); - result[2] = (byte) (i >> 8); - result[3] = (byte) (i); - return result; - } - - public static int bytesToInt(byte[] array){ - int result = 0; - result |= ((array[0] & 0xFF) << 24); - result |= ((array[1] & 0xFF) << 16); - result |= ((array[2] & 0xFF) << 8); - result |= ((array[3] & 0xFF)); - return result; - } - - public static List split(byte[] array, byte[] delimiter) { - List byteArrays = new LinkedList<>(); - if (delimiter.length == 0) { - return byteArrays; - } - int begin = 0; - - outer: - for (int i = 0; i < array.length - delimiter.length + 1; i++) { - for (int j = 0; j < delimiter.length; j++) { - if (array[i + j] != delimiter[j]) { - continue outer; - } - } - byteArrays.add(Arrays.copyOfRange(array, begin, i)); - begin = i + delimiter.length; - } - byteArrays.add(Arrays.copyOfRange(array, begin, array.length)); - return byteArrays; - } -} diff --git a/source/crypto/crypto-adv/src/main/java/com/jd/blockchain/crypto/paillier/PrivateKey.java b/source/crypto/crypto-adv/src/main/java/com/jd/blockchain/crypto/paillier/PrivateKey.java deleted file mode 100644 index ac4b656a..00000000 --- a/source/crypto/crypto-adv/src/main/java/com/jd/blockchain/crypto/paillier/PrivateKey.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.jd.blockchain.crypto.paillier; - -import java.math.BigInteger; -import java.util.List; -/** - * The MIT License (MIT) - * - * Copyright (c) 2014 Hendrik Kunert - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -import com.jd.blockchain.utils.io.BytesUtils; - -/** - * A class that represents the private part of the Paillier key pair. - */ -public class PrivateKey { - - private final BigInteger lambda; - private final BigInteger preCalculatedDenominator; - - public PrivateKey(BigInteger lambda, BigInteger preCalculatedDenominator) { - this.lambda = lambda; - - this.preCalculatedDenominator = preCalculatedDenominator; - } - - public PrivateKey(byte[] lambdaBytes, byte[] preCalculatedDenominatorBytes){ - this.lambda = new BigInteger(lambdaBytes); - this.preCalculatedDenominator = new BigInteger(preCalculatedDenominatorBytes); - } - - public PrivateKey(byte[] privKeyBytes){ - List list = PaillierUtils.split(privKeyBytes, "##PrivateKey##".getBytes()); - this.lambda = new BigInteger(list.get(0)); - this.preCalculatedDenominator = new BigInteger(list.get(1)); - } - - public BigInteger getLambda() { - return lambda; - } - - public BigInteger getPreCalculatedDenominator() { - return preCalculatedDenominator; - } - - public byte[] getLambdaBytes(){ - return lambda.toByteArray(); - } - - public byte[] getPreCalculatedDenominatorBytes(){ - return preCalculatedDenominator.toByteArray(); - } - - public byte[] getPrivKeyBytes(){ - return BytesUtils.concat(getLambdaBytes(),"##PrivateKey##".getBytes(),getPreCalculatedDenominatorBytes()); - } -} diff --git a/source/crypto/crypto-adv/src/main/java/com/jd/blockchain/crypto/paillier/PublicKey.java b/source/crypto/crypto-adv/src/main/java/com/jd/blockchain/crypto/paillier/PublicKey.java deleted file mode 100644 index aa1d3f51..00000000 --- a/source/crypto/crypto-adv/src/main/java/com/jd/blockchain/crypto/paillier/PublicKey.java +++ /dev/null @@ -1,129 +0,0 @@ -package com.jd.blockchain.crypto.paillier; - -import java.math.BigInteger; -import java.util.LinkedList; -import java.util.List; -import java.util.Random; -/** - * The MIT License (MIT) - * - * Copyright (c) 2014 Hendrik Kunert - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -import com.jd.blockchain.utils.io.ByteArray; -import com.jd.blockchain.utils.io.BytesUtils; - -/** - * A class that represents the public part of the Paillier key pair. - *

- * As in all asymmetric cryptographic systems it is responsible for the - * encryption. - *

- * Additional instructions for the decryption can be found on {@link KeyPair}. - * - * @see KeyPair - */ -public class PublicKey { - private final int bits; - private final BigInteger n; - private final BigInteger nSquared; - private final BigInteger g; - - public PublicKey(BigInteger n, BigInteger nSquared, BigInteger g, int bits) { - this.n = n; - this.nSquared = nSquared; - this.bits = bits; - this.g = g; - } - - public PublicKey(byte[] nBytes, byte[] nSquaredBytes, byte[] gBytes, byte[] bitsBytes) { - this.n = new BigInteger(nBytes); - this.nSquared = new BigInteger(nSquaredBytes); - this.g = new BigInteger(gBytes); - this.bits = PaillierUtils.bytesToInt(bitsBytes); - } - - public PublicKey(byte[] pubKeyBytes){ - List list = PaillierUtils.split(pubKeyBytes, "##PublicKey##".getBytes()); - this.n = new BigInteger(list.get(0)); - this.nSquared = new BigInteger(list.get(1)); - this.g = new BigInteger(list.get(2)); - this.bits = PaillierUtils.bytesToInt(list.get(3)); - } - - - public int getBits() { - return bits; - } - - public BigInteger getN() { - return n; - } - - public BigInteger getnSquared() { - return nSquared; - } - - public BigInteger getG() { - return g; - } - - /** - * Encrypts the given plaintext. - * - * @param m The plaintext that should be encrypted. - * @return The corresponding ciphertext. - */ - public final BigInteger encrypt(BigInteger m) { - - BigInteger r; - do { - r = new BigInteger(bits, new Random()); - } while (r.compareTo(n) >= 0); - - BigInteger result = g.modPow(m, nSquared); - BigInteger x = r.modPow(n, nSquared); - - result = result.multiply(x); - result = result.mod(nSquared); - - return result; - } - - public byte[] getBitsBytes(){ - return PaillierUtils.intToBytes(bits); - } - - public byte[] getNBytes(){ return n.toByteArray(); } - - public byte[] getNSquaredBytes(){ - return nSquared.toByteArray(); - } - - public byte[] getGBytes(){ - return g.toByteArray(); - } - - public byte[] getPubKeyBytes(){ - return BytesUtils.concat(getNBytes(),"##PublicKey##".getBytes(),getNSquaredBytes(),"##PublicKey##".getBytes(),getGBytes(),"##PublicKey##".getBytes(),getBitsBytes()); - } -} - diff --git a/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/mpc/MultiSumTest.java b/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/mpc/MultiSumTest.java index 4dff44cc..2bb53407 100644 --- a/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/mpc/MultiSumTest.java +++ b/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/mpc/MultiSumTest.java @@ -1,9 +1,8 @@ package test.com.jd.blockchain.crypto.mpc; import com.jd.blockchain.crypto.mpc.MultiSum; -import com.jd.blockchain.crypto.paillier.KeyPair; -import com.jd.blockchain.crypto.paillier.KeyPairBuilder; -import com.jd.blockchain.crypto.paillier.PublicKey; +import com.n1analytics.paillier.PaillierPrivateKey; +import com.n1analytics.paillier.PaillierPublicKey; import org.bouncycastle.crypto.params.ECPrivateKeyParameters; import org.bouncycastle.crypto.params.ECPublicKeyParameters; import org.bouncycastle.util.encoders.Hex; @@ -16,14 +15,13 @@ import static org.junit.Assert.*; public class MultiSumTest { - private KeyPair keyPair; - private PublicKey encKey; + private PaillierPrivateKey decKey; + private PaillierPublicKey encKey; @Before public void init() { - KeyPairBuilder keygen = new KeyPairBuilder(); - keyPair = keygen.generateKeyPair(); - encKey = keyPair.getPublicKey(); + decKey = PaillierPrivateKey.create(2048); + encKey = decKey.getPublicKey(); } @Test @@ -72,7 +70,7 @@ public class MultiSumTest { BigInteger aggregatedCiphertext = MultiSum.aggregateCiphertexts(encKey,c1,c2,c3); - BigInteger decryptedValue = MultiSum.decrypt(keyPair,aggregatedCiphertext); + BigInteger decryptedValue = MultiSum.decrypt(decKey,aggregatedCiphertext); assertEquals(expectedSum,decryptedValue); } diff --git a/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/DecryptionTest.java b/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/DecryptionTest.java deleted file mode 100644 index 8994d9dc..00000000 --- a/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/DecryptionTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package test.com.jd.blockchain.crypto.paillier; - -import com.jd.blockchain.crypto.paillier.KeyPair; -import com.jd.blockchain.crypto.paillier.KeyPairBuilder; -import com.jd.blockchain.crypto.paillier.PublicKey; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - -import java.math.BigInteger; -import java.util.Arrays; -import java.util.Collection; - -import static org.junit.Assert.assertEquals; - -/** - * Created by kunerd on 22.09.15. - */ -@RunWith(value = Parameterized.class) -public class DecryptionTest { - - @Parameterized.Parameters - public static Collection data() { - return Arrays.asList(createTestParameter(Long.MIN_VALUE), - createTestParameter(Integer.MIN_VALUE), - createTestParameter(Short.MIN_VALUE), - createTestParameter(0), - createTestParameter(Short.MAX_VALUE), - createTestParameter(Integer.MAX_VALUE), - createTestParameter(Long.MAX_VALUE)); - } - - private BigInteger input; - private BigInteger expected; - - public DecryptionTest(BigInteger input, BigInteger expected) { - this.input = input; - this.expected = expected; - } - - @Test - public void test() { - KeyPair keyPair = new KeyPairBuilder().upperBound(BigInteger.valueOf(Long.MAX_VALUE)) - .generateKeyPair(); - PublicKey publicKey = keyPair.getPublicKey(); - - BigInteger encryptedData = publicKey.encrypt(input); - - assertEquals(expected, keyPair.decrypt(encryptedData)); - } - - private static Object[] createTestParameter(long plaintext) { - BigInteger p = BigInteger.valueOf(plaintext); - return new Object[]{p, p}; - } - -} - diff --git a/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/HomomorphicPropertiesTest.java b/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/HomomorphicPropertiesTest.java deleted file mode 100644 index 2b156386..00000000 --- a/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/HomomorphicPropertiesTest.java +++ /dev/null @@ -1,90 +0,0 @@ -package test.com.jd.blockchain.crypto.paillier; - -import com.jd.blockchain.crypto.paillier.KeyPair; -import com.jd.blockchain.crypto.paillier.KeyPairBuilder; -import com.jd.blockchain.crypto.paillier.PublicKey; -import org.junit.Before; -import org.junit.Test; - -import java.math.BigInteger; - -import static org.junit.Assert.assertEquals; - -public class HomomorphicPropertiesTest { - private KeyPair keypair; - private PublicKey publicKey; - - @Before - public void init() { - KeyPairBuilder keygen = new KeyPairBuilder(); - this.keypair = keygen.generateKeyPair(); - this.publicKey = keypair.getPublicKey(); - } - - @Test - public void testHomomorphicAddition() { - BigInteger plainA = BigInteger.valueOf(102); - BigInteger plainB = BigInteger.valueOf(203); - - BigInteger encryptedA = publicKey.encrypt(plainA); - BigInteger encryptedB = publicKey.encrypt(plainB); - - BigInteger decryptedProduct = keypair.decrypt(encryptedA.multiply( - encryptedB).mod(publicKey.getnSquared())); - BigInteger plainSum = plainA.add(plainB).mod(publicKey.getN()); - - assertEquals(decryptedProduct, plainSum); - } - - @Test - public void testHomomorphicConstantMultiplication() { - BigInteger plainA = BigInteger.valueOf(14); - BigInteger plainB = BigInteger.valueOf(203); - - BigInteger encryptedA = publicKey.encrypt(plainA); - - BigInteger decryptedPow = keypair.decrypt(encryptedA.modPow(plainB, - publicKey.getnSquared())); - BigInteger plainSum = plainA.multiply(plainB).mod(publicKey.getN()); - - assertEquals(decryptedPow, plainSum); - } - - @Test - public void testHomomorphicMultiplication() { - BigInteger plainA = BigInteger.valueOf(23); - BigInteger plainB = BigInteger.valueOf(234); - - BigInteger encryptedA = publicKey.encrypt(plainA); - BigInteger decryptedPowA = keypair.decrypt(encryptedA.modPow( - plainB, publicKey.getnSquared())); - BigInteger plainSumA = plainA.multiply(plainB).mod(publicKey.getN()); - - assertEquals(decryptedPowA, plainSumA); - - BigInteger encryptedB = publicKey.encrypt(plainB); - BigInteger decryptedPowB = keypair.decrypt(encryptedB.modPow( - plainA, publicKey.getnSquared())); - BigInteger plainSumB = plainA.multiply(plainB).mod(publicKey.getN()); - - assertEquals(decryptedPowB, plainSumB); - - assertEquals(decryptedPowA, decryptedPowB); - } - - @Test - public void testHomomorphicMultiplicationPowG() { - BigInteger plainA = BigInteger.valueOf(230); - BigInteger plainB = BigInteger.valueOf(100); - - BigInteger g = publicKey.getG(); - - BigInteger encryptedA = publicKey.encrypt(plainA); - BigInteger decryptedPow = keypair.decrypt(encryptedA.multiply(g.modPow( - plainB, publicKey.getnSquared()).mod(publicKey.getnSquared()))); - - BigInteger plainSumA = plainA.add(plainB).mod(publicKey.getN()); - - assertEquals(decryptedPow, plainSumA); - } -} diff --git a/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/JPaillierTest.java b/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/JPaillierTest.java deleted file mode 100644 index 12e0258d..00000000 --- a/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/JPaillierTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package test.com.jd.blockchain.crypto.paillier; - -import com.jd.blockchain.crypto.paillier.KeyPair; -import com.jd.blockchain.crypto.paillier.KeyPairBuilder; -import com.jd.blockchain.crypto.paillier.PublicKey; -import org.junit.Before; -import org.junit.Test; - -import java.math.BigInteger; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; - -public class JPaillierTest { - private KeyPair keyPair; - private PublicKey publicKey; - - @Before - public void init() { - KeyPairBuilder keygen = new KeyPairBuilder(); - keyPair = keygen.generateKeyPair(); - publicKey = keyPair.getPublicKey(); - } - - @Test - public void testEncryption() { - BigInteger plainData = BigInteger.valueOf(10); - - BigInteger encryptedData = publicKey.encrypt(plainData); - - assertNotEquals(plainData, encryptedData); - } - - @Test - public void testDecyption() { - BigInteger plainData = BigInteger.valueOf(10); - - BigInteger encryptedData = publicKey.encrypt(plainData); - BigInteger decryptedData = keyPair.decrypt(encryptedData); - - assertEquals(plainData, decryptedData); - } -} diff --git a/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/KeyPairBuilderPrivateKeyTest.java b/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/KeyPairBuilderPrivateKeyTest.java deleted file mode 100644 index ac64efda..00000000 --- a/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/KeyPairBuilderPrivateKeyTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package test.com.jd.blockchain.crypto.paillier; - -import com.jd.blockchain.crypto.paillier.KeyPair; -import com.jd.blockchain.crypto.paillier.KeyPairBuilder; -import com.jd.blockchain.crypto.paillier.PrivateKey; -import com.jd.blockchain.crypto.paillier.PublicKey; -import org.junit.Before; -import org.junit.Test; - -import java.math.BigInteger; - -import static org.junit.Assert.assertEquals; - -public class KeyPairBuilderPrivateKeyTest { - private KeyPairBuilder keygen; - private KeyPair keypair; - private PrivateKey privateKey; - - @Before - public void init() { - this.keygen = new KeyPairBuilder(); - this.keypair = keygen.generateKeyPair(); - this.privateKey = keypair.getPrivateKey(); - } - - @Test - public void testPreCalculatedDenominator() { - PublicKey publicKey = keypair.getPublicKey(); - - BigInteger preCalculatedDenominator = privateKey.getPreCalculatedDenominator(); - - BigInteger g = publicKey.getG(); - BigInteger n = publicKey.getN(); - BigInteger nSquared = publicKey.getnSquared(); - BigInteger lambda = privateKey.getLambda(); - - BigInteger expected = g.modPow(lambda, nSquared); - expected = expected.subtract(BigInteger.ONE); - expected = expected.divide(n); - expected = expected.modInverse(n); - - assertEquals(expected, preCalculatedDenominator); - } -} diff --git a/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/KeyPairBuilderPublicKeyTest.java b/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/KeyPairBuilderPublicKeyTest.java deleted file mode 100644 index 5517c97f..00000000 --- a/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/KeyPairBuilderPublicKeyTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package test.com.jd.blockchain.crypto.paillier; - -import com.jd.blockchain.crypto.paillier.KeyPair; -import com.jd.blockchain.crypto.paillier.KeyPairBuilder; -import com.jd.blockchain.crypto.paillier.PrivateKey; -import com.jd.blockchain.crypto.paillier.PublicKey; -import org.junit.Before; -import org.junit.Test; - -import java.math.BigInteger; - -import static org.junit.Assert.assertEquals; - -public class KeyPairBuilderPublicKeyTest { - - private KeyPair keypair; - private PublicKey publicKey; - - @Before - public void init() { - KeyPairBuilder keygen = new KeyPairBuilder(); - this.keypair = keygen.generateKeyPair(); - this.publicKey = keypair.getPublicKey(); - } - - @Test - public void testBitsSetup() { - int BITS = 1024; - assertEquals(BITS, publicKey.getBits()); - } - - @Test - public void testCalculationOfNSquared() { - - BigInteger n = publicKey.getN(); - BigInteger nSquared = n.multiply(n); - - assertEquals(nSquared, publicKey.getnSquared()); - } - - @Test - public void testCalculationOfGOfG() { - PrivateKey privateKey = keypair.getPrivateKey(); - - BigInteger n = publicKey.getN(); - BigInteger nSquared = publicKey.getnSquared(); - BigInteger g = publicKey.getG(); - BigInteger lambda = privateKey.getLambda(); - - BigInteger l = g.modPow(lambda, nSquared); - l = l.subtract(BigInteger.ONE); - l = l.divide(n); - - assertEquals(BigInteger.ONE, l.gcd(n)); - } - -} diff --git a/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/KeyPairBuilderTest.java b/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/KeyPairBuilderTest.java deleted file mode 100644 index 02efb028..00000000 --- a/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/KeyPairBuilderTest.java +++ /dev/null @@ -1,113 +0,0 @@ -package test.com.jd.blockchain.crypto.paillier; - -import static org.junit.Assert.assertEquals; - -import java.math.BigInteger; -import java.security.SecureRandom; -import java.util.Random; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import com.jd.blockchain.crypto.paillier.KeyPair; -import com.jd.blockchain.crypto.paillier.KeyPairBuilder; -import com.jd.blockchain.crypto.paillier.PrivateKey; -import com.jd.blockchain.crypto.paillier.PublicKey; - -@RunWith(PowerMockRunner.class) -@PrepareForTest(KeyPairBuilder.class) -public class KeyPairBuilderTest { - - private static final int BITS = 128; - - private KeyPairBuilder keygen; - private PublicKey publicKey; - private PrivateKey privateKey; - - private BigInteger p = BigInteger.valueOf(5); - private BigInteger q = BigInteger.valueOf(7); - private BigInteger g1 = BigInteger.valueOf(35); - private BigInteger g2 = BigInteger.valueOf(36); - - private Random rng; - - @Before - public void beforeEach() { - rng = PowerMockito.mock(SecureRandom.class); - - keygen = new KeyPairBuilder() - .bits(BITS) - .randomNumberGenerator(rng); - - PowerMockito.mockStatic(BigInteger.class); - } - - private void prepareTest() throws Exception { - - PowerMockito.when(BigInteger.probablePrime(BITS / 2, rng)).thenReturn(p, q); - - PowerMockito.whenNew(BigInteger.class).withArguments(BITS, rng).thenReturn(g1, g2); - - KeyPair keypair = keygen.generateKeyPair(); - - publicKey = keypair.getPublicKey(); - privateKey = keypair.getPrivateKey(); - } - - @Test - public void computationOfN() throws Exception { - prepareTest(); - - BigInteger e = p.multiply(q); - BigInteger a = publicKey.getN(); - - assertEquals(e, a); - } - - - @Test - public void computationOfLambda() throws Exception { - BigInteger e = new BigInteger("12"); - - prepareTest(); - - BigInteger a = privateKey.getLambda(); - - assertEquals(e, a); - } - - @Test - public void computationOfG() throws Exception { - prepareTest(); - - PowerMockito.verifyNew(BigInteger.class, Mockito.times(2)).withArguments(Mockito.eq(128), Mockito.any(Random.class)); - } - - @Test - public void withoutCertainty() throws Exception { - prepareTest(); - - PowerMockito.verifyStatic(Mockito.times(2)); - BigInteger.probablePrime(BITS / 2, rng); - - } - - @Test - public void withCertainty() throws Exception { - int certainty = 6; - - keygen.certainty(certainty); - - PowerMockito.whenNew(BigInteger.class).withArguments(BITS / 2, certainty, rng).thenReturn(p, q); - - prepareTest(); - - PowerMockito.verifyNew(BigInteger.class, Mockito.times(2)).withArguments(BITS / 2, certainty, rng); - } - -} diff --git a/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/ResolveTest.java b/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/ResolveTest.java deleted file mode 100644 index 05022dad..00000000 --- a/source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/ResolveTest.java +++ /dev/null @@ -1,124 +0,0 @@ -package test.com.jd.blockchain.crypto.paillier; - -import com.jd.blockchain.crypto.paillier.*; -import org.junit.Test; - -import java.math.BigInteger; - -import static org.junit.Assert.assertEquals; - -public class ResolveTest { - - @Test - public void testResolvePrivateKey() { - KeyPairBuilder keygen = new KeyPairBuilder(); - KeyPair keyPair = keygen.generateKeyPair(); - - PrivateKey privKey = keyPair.getPrivateKey(); - BigInteger lambda = privKey.getLambda(); - BigInteger preCalculatedDenominator = privKey.getPreCalculatedDenominator(); - - byte[] privKeyBytes = privKey.getPrivKeyBytes(); - byte[] lambdaBytes = privKey.getLambdaBytes(); - byte[] preCalculatedDenominatorBytes = privKey.getPreCalculatedDenominatorBytes(); - - assertEquals(lambda,new BigInteger(lambdaBytes)); - assertEquals(preCalculatedDenominator,new BigInteger(preCalculatedDenominatorBytes)); - - assertEquals(lambda,new PrivateKey(lambda,preCalculatedDenominator).getLambda()); - assertEquals(preCalculatedDenominator,(new PrivateKey(lambda,preCalculatedDenominator)).getPreCalculatedDenominator()); - - assertEquals(lambda,(new PrivateKey(lambdaBytes,preCalculatedDenominatorBytes)).getLambda()); - assertEquals(preCalculatedDenominator,(new PrivateKey(lambdaBytes,preCalculatedDenominatorBytes)).getPreCalculatedDenominator()); - - assertEquals(lambda,(new PrivateKey(privKeyBytes)).getLambda()); - assertEquals(preCalculatedDenominator,(new PrivateKey(privKeyBytes)).getPreCalculatedDenominator()); - } - - @Test - public void testResolvePublicKey() { - KeyPairBuilder keygen = new KeyPairBuilder(); - KeyPair keyPair = keygen.generateKeyPair(); - - PublicKey pubKey = keyPair.getPublicKey(); - int bits = pubKey.getBits(); - BigInteger n = pubKey.getN(); - BigInteger nSquared = pubKey.getnSquared(); - BigInteger g = pubKey.getG(); - - byte[] pubKeyBytes = pubKey.getPubKeyBytes(); - byte[] bitsBytes = pubKey.getBitsBytes(); - byte[] nBytes = pubKey.getNBytes(); - byte[] nSquaredBytes = pubKey.getNSquaredBytes(); - byte[] gBytes = pubKey.getGBytes(); - - assertEquals(bits,PaillierUtils.bytesToInt(bitsBytes)); - assertEquals(n,new BigInteger(nBytes)); - assertEquals(nSquared,new BigInteger(nSquaredBytes)); - assertEquals(g,new BigInteger(gBytes)); - - assertEquals(bits,(new PublicKey(n,nSquared,g,bits)).getBits()); - assertEquals(n,(new PublicKey(n,nSquared,g,bits)).getN()); - assertEquals(nSquared,(new PublicKey(n,nSquared,g,bits)).getnSquared()); - assertEquals(g,(new PublicKey(n,nSquared,g,bits)).getG()); - - assertEquals(bits,(new PublicKey(nBytes,nSquaredBytes,gBytes,bitsBytes)).getBits()); - assertEquals(n,(new PublicKey(nBytes,nSquaredBytes,gBytes,bitsBytes)).getN()); - assertEquals(nSquared,(new PublicKey(nBytes,nSquaredBytes,gBytes,bitsBytes)).getnSquared()); - assertEquals(g,(new PublicKey(nBytes,nSquaredBytes,gBytes,bitsBytes)).getG()); - - assertEquals(bits,(new PublicKey(pubKeyBytes)).getBits()); - assertEquals(n,(new PublicKey(pubKeyBytes)).getN()); - assertEquals(nSquared,(new PublicKey(pubKeyBytes)).getnSquared()); - assertEquals(g,(new PublicKey(pubKeyBytes)).getG()); - } - - @Test - public void testResolveKeyPair() { - KeyPairBuilder keygen = new KeyPairBuilder(); - keygen.upperBound(new BigInteger(PaillierUtils.intToBytes(Integer.MAX_VALUE))); - KeyPair keyPair = keygen.generateKeyPair(); - - PrivateKey privKey = keyPair.getPrivateKey(); - PublicKey pubKey = keyPair.getPublicKey(); - BigInteger upperBound = keyPair.getUpperBound(); - - byte[] keyPairBytes = keyPair.getKeyPairBytes(); - byte[] privKeyBytes = privKey.getPrivKeyBytes(); - byte[] pubKeyBytes = pubKey.getPubKeyBytes(); - byte[] upperBoundBytes = keyPair.getUpperBoundBytes(); - - assertEquals(upperBound,keyPair.getUpperBound()); - assertEquals(privKey.getLambda(),keyPair.getPrivateKey().getLambda()); - assertEquals(privKey.getPreCalculatedDenominator(),keyPair.getPrivateKey().getPreCalculatedDenominator()); - assertEquals(pubKey.getBits(),keyPair.getPublicKey().getBits()); - assertEquals(pubKey.getN(),keyPair.getPublicKey().getN()); - assertEquals(pubKey.getnSquared(),keyPair.getPublicKey().getnSquared()); - assertEquals(pubKey.getG(),keyPair.getPublicKey().getG()); - - assertEquals(upperBound,(new KeyPair(privKey,pubKey,upperBound).getUpperBound())); - assertEquals(privKey.getLambda(),(new KeyPair(privKey,pubKey,upperBound).getPrivateKey().getLambda())); - assertEquals(privKey.getPreCalculatedDenominator(),(new KeyPair(privKey,pubKey,upperBound).getPrivateKey().getPreCalculatedDenominator())); - assertEquals(pubKey.getBits(),(new KeyPair(privKey,pubKey,upperBound).getPublicKey().getBits())); - assertEquals(pubKey.getN(),(new KeyPair(privKey,pubKey,upperBound).getPublicKey().getN())); - assertEquals(pubKey.getnSquared(),(new KeyPair(privKey,pubKey,upperBound).getPublicKey().getnSquared())); - assertEquals(pubKey.getG(),(new KeyPair(privKey,pubKey,upperBound).getPublicKey().getG())); - - assertEquals(upperBound,(new KeyPair(privKeyBytes,pubKeyBytes,upperBoundBytes).getUpperBound())); - assertEquals(privKey.getLambda(),(new KeyPair(privKeyBytes,pubKeyBytes,upperBoundBytes).getPrivateKey().getLambda())); - assertEquals(privKey.getPreCalculatedDenominator(),(new KeyPair(privKeyBytes,pubKeyBytes,upperBoundBytes).getPrivateKey().getPreCalculatedDenominator())); - assertEquals(pubKey.getBits(),(new KeyPair(privKeyBytes,pubKeyBytes,upperBoundBytes).getPublicKey().getBits())); - assertEquals(pubKey.getN(),(new KeyPair(privKeyBytes,pubKeyBytes,upperBoundBytes).getPublicKey().getN())); - assertEquals(pubKey.getnSquared(),(new KeyPair(privKeyBytes,pubKeyBytes,upperBoundBytes).getPublicKey().getnSquared())); - assertEquals(pubKey.getG(),(new KeyPair(privKeyBytes,pubKeyBytes,upperBoundBytes).getPublicKey().getG())); - - assertEquals(upperBound,(new KeyPair(keyPairBytes).getUpperBound())); - assertEquals(privKey.getLambda(),(new KeyPair(keyPairBytes).getPrivateKey().getLambda())); - assertEquals(privKey.getPreCalculatedDenominator(),(new KeyPair(keyPairBytes).getPrivateKey().getPreCalculatedDenominator())); - assertEquals(pubKey.getBits(),(new KeyPair(keyPairBytes).getPublicKey().getBits())); - assertEquals(pubKey.getN(),(new KeyPair(keyPairBytes).getPublicKey().getN())); - assertEquals(pubKey.getnSquared(),(new KeyPair(keyPairBytes).getPublicKey().getnSquared())); - assertEquals(pubKey.getG(),(new KeyPair(keyPairBytes).getPublicKey().getG())); - - } -}