Skip to content

Instantly share code, notes, and snippets.

@teruteru128
Created October 27, 2017 08:23
Show Gist options
  • Save teruteru128/7a35598167a28055abd243dec8373dd4 to your computer and use it in GitHub Desktop.
Save teruteru128/7a35598167a28055abd243dec8373dd4 to your computer and use it in GitHub Desktop.
Reporting ArrayIndexOutOfBoundsException
package test.cipher.pqc.sample005;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.Provider;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.Security;
import java.util.Arrays;
import javax.crypto.KeyAgreement;
import org.bouncycastle.pqc.jcajce.provider.BouncyCastlePQCProvider;
public class Main {
public static void main(String[] args) throws Exception {
SecureRandom random = new SecureRandom();
Provider providerPQC = Security.getProvider("BCPQC");
if (providerPQC == null) {
Security.addProvider(providerPQC = new BouncyCastlePQCProvider());
}
KeyPairGenerator generator = KeyPairGenerator.getInstance("NH");
generator.initialize(1024, random);
KeyPair pair1 = generator.generateKeyPair();
KeyPair pair2 = generator.generateKeyPair();
PublicKey publicKey1 = pair1.getPublic();
PrivateKey privateKey1 = pair1.getPrivate();
PublicKey publicKey2 = pair2.getPublic();
PrivateKey privateKey2 = pair2.getPrivate();
KeyAgreement agreement = KeyAgreement.getInstance("NH");
agreement.init(privateKey1, random);
agreement.doPhase(publicKey2, true);
byte[] secret1 = agreement.generateSecret();
agreement.init(privateKey2, random);
agreement.doPhase(publicKey1, true);
byte[] secret2 = agreement.generateSecret();
if (Arrays.equals(secret1, secret2)) {
System.out.println("OK");
} else {
System.out.println("NG");
}
}
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1824
at org.bouncycastle.pqc.crypto.newhope.NewHope.decodeB(Unknown Source)
at org.bouncycastle.pqc.crypto.newhope.NewHope.sharedA(Unknown Source)
at org.bouncycastle.pqc.crypto.newhope.NHAgreement.calculateAgreement(Unknown Source)
at org.bouncycastle.pqc.jcajce.provider.newhope.KeyAgreementSpi.engineDoPhase(Unknown Source)
at javax.crypto.KeyAgreement.doPhase(KeyAgreement.java:567)
at test.cipher.pqc.sample005.Main.main(Main.java:40)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment