@Test
public void testVerifyPerformance() {

	// Generate encryption key
	final PaillierKeyGenerator keyGenerator = new PaillierKeyGenerator(2048);
	final PaillierKeyPair keyPair = keyGenerator.generate();
	final PaillierPublicKey publicKey = keyPair.getPublicKey();
	final BigInteger share1 = RandomNumberGenerator.generateRandomInteger(curve.getR());
	final BigInteger share2 = RandomNumberGenerator.generateRandomInteger(curve.getR());
	// Encrypt share
	final BigInteger n = publicKey.getN();
	// Encrypt first share
	final BigInteger r1 = RandomNumberGenerator.generateRandomCoprimeInRange(n);
	final BigInteger Ea = PaillierCipher.encrypt(publicKey, share1, r1);
	// Encrypt second share
	final BigInteger r2 = RandomNumberGenerator.generateRandomCoprimeInRange(n);
	final BigInteger Eb = PaillierCipher.encrypt(publicKey, share2, r2);
	// Create commitment
	final EcPoint S = curve.addPoints(curve.multiply(g, share1), curve.multiply(h, share2));
	// Warm up
	PedersenEqRangeProof proof = null;
	for (int i = 0; i < 20; i++) {
		proof = PedersenEqRangeProofGenerator.generate(publicKey, share1, share2, r1, r2, Ea, Eb, S);
	}
	System.out.println("ZKP size: " + proof.getSize());
	// Do test
	long timeNs = 0;
	final int iterations = 1000;
	for (int i = 0; i < iterations; i++) {
		proof = PedersenEqRangeProofGenerator.generate(publicKey, share1, share2, r1, r2, Ea, Eb, S);
		final long start = System.nanoTime();
		PedersenEqRangeProofVerifier.isValid(proof, Ea, Eb, S, publicKey);
		final long end = System.nanoTime();
		timeNs += (end - start);
	}
	System.out.println("Total time (ms): " + timeNs / (((long) iterations) * 1_000_000.0));
}