aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/spongycastle/pg/src/test/jdk1.4/org/spongycastle/openpgp/test/PGPECDSATest.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/spongycastle/pg/src/test/jdk1.4/org/spongycastle/openpgp/test/PGPECDSATest.java')
-rw-r--r--libraries/spongycastle/pg/src/test/jdk1.4/org/spongycastle/openpgp/test/PGPECDSATest.java159
1 files changed, 159 insertions, 0 deletions
diff --git a/libraries/spongycastle/pg/src/test/jdk1.4/org/spongycastle/openpgp/test/PGPECDSATest.java b/libraries/spongycastle/pg/src/test/jdk1.4/org/spongycastle/openpgp/test/PGPECDSATest.java
new file mode 100644
index 000000000..94c82756d
--- /dev/null
+++ b/libraries/spongycastle/pg/src/test/jdk1.4/org/spongycastle/openpgp/test/PGPECDSATest.java
@@ -0,0 +1,159 @@
+package org.spongycastle.openpgp.test;
+
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.Security;
+import org.spongycastle.jce.spec.ECNamedCurveGenParameterSpec;
+import java.util.Date;
+import java.util.Iterator;
+
+import org.spongycastle.bcpg.HashAlgorithmTags;
+import org.spongycastle.jce.provider.BouncyCastleProvider;
+import org.spongycastle.openpgp.PGPEncryptedData;
+import org.spongycastle.openpgp.PGPKeyPair;
+import org.spongycastle.openpgp.PGPKeyRingGenerator;
+import org.spongycastle.openpgp.PGPPublicKey;
+import org.spongycastle.openpgp.PGPPublicKeyRing;
+import org.spongycastle.openpgp.PGPSecretKeyRing;
+import org.spongycastle.openpgp.PGPSignature;
+import org.spongycastle.openpgp.PGPSignatureGenerator;
+import org.spongycastle.openpgp.PGPUtil;
+import org.spongycastle.openpgp.operator.KeyFingerPrintCalculator;
+import org.spongycastle.openpgp.operator.PGPDigestCalculator;
+import org.spongycastle.openpgp.operator.jcajce.JcaKeyFingerprintCalculator;
+import org.spongycastle.openpgp.operator.jcajce.JcaPGPContentSignerBuilder;
+import org.spongycastle.openpgp.operator.jcajce.JcaPGPContentVerifierBuilderProvider;
+import org.spongycastle.openpgp.operator.jcajce.JcaPGPDigestCalculatorProviderBuilder;
+import org.spongycastle.openpgp.operator.jcajce.JcaPGPKeyPair;
+import org.spongycastle.openpgp.operator.jcajce.JcePBESecretKeyEncryptorBuilder;
+import org.spongycastle.util.Arrays;
+import org.spongycastle.util.encoders.Base64;
+import org.spongycastle.util.test.SimpleTest;
+
+public class PGPECDSATest
+ extends SimpleTest
+{
+ byte[] testPubKey =
+ Base64.decode(
+ "mFIEUb4HqBMIKoZIzj0DAQcCAwSQynmjwsGJHYJakAEVYxrm3tt/1h8g9Uksx32J" +
+ "zG/ZH4RwaD0PbjzEe5EVBmCwSErRZxt/5AxXa0TEHWjya8FetDVFQ0RTQSAoS2V5" +
+ "IGlzIDI1NiBiaXRzIGxvbmcpIDx0ZXN0LmVjZHNhQGV4YW1wbGUuY29tPoh6BBMT" +
+ "CAAiBQJRvgeoAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRDqO46kgPLi" +
+ "vN1hAP4n0UApR36ziS5D8KUt7wEpBujQE4G3+efATJ+DMmY/SgEA+wbdDynFf/V8" +
+ "pQs0+FtCYQ9schzIur+peRvol7OrNnc=");
+
+ byte[] testPrivKey =
+ Base64.decode(
+ "lKUEUb4HqBMIKoZIzj0DAQcCAwSQynmjwsGJHYJakAEVYxrm3tt/1h8g9Uksx32J" +
+ "zG/ZH4RwaD0PbjzEe5EVBmCwSErRZxt/5AxXa0TEHWjya8Fe/gcDAqTWSUiFpEno" +
+ "1n8izmLaWTy8GYw5/lK4R2t6D347YGgTtIiXfoNPOcosmU+3OibyTm2hc/WyG4fL" +
+ "a0nxFtj02j0Bt/Fw0N4VCKJwKL/QJT+0NUVDRFNBIChLZXkgaXMgMjU2IGJpdHMg" +
+ "bG9uZykgPHRlc3QuZWNkc2FAZXhhbXBsZS5jb20+iHoEExMIACIFAlG+B6gCGwMG" +
+ "CwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEOo7jqSA8uK83WEA/ifRQClHfrOJ" +
+ "LkPwpS3vASkG6NATgbf558BMn4MyZj9KAQD7Bt0PKcV/9XylCzT4W0JhD2xyHMi6" +
+ "v6l5G+iXs6s2dw==");
+
+ private void generateAndSign()
+ throws Exception
+ {
+ KeyPairGenerator keyGen = KeyPairGenerator.getInstance("ECDSA", "SC");
+
+ keyGen.initialize(new ECNamedCurveGenParameterSpec("P-256"));
+
+ KeyPair kpSign = keyGen.generateKeyPair();
+
+ PGPKeyPair ecdsaKeyPair = new JcaPGPKeyPair(PGPPublicKey.ECDSA, kpSign, new Date());
+
+ //
+ // try a signature
+ //
+ PGPSignatureGenerator signGen = new PGPSignatureGenerator(new JcaPGPContentSignerBuilder(PGPPublicKey.ECDSA, HashAlgorithmTags.SHA256).setProvider("SC"));
+
+ signGen.init(PGPSignature.BINARY_DOCUMENT, ecdsaKeyPair.getPrivateKey());
+
+ signGen.update("hello world!".getBytes());
+
+ PGPSignature sig = signGen.generate();
+
+ sig.init(new JcaPGPContentVerifierBuilderProvider().setProvider("SC"), ecdsaKeyPair.getPublicKey());
+
+ sig.update("hello world!".getBytes());
+
+ if (!sig.verify())
+ {
+ fail("signature failed to verify!");
+ }
+
+ //
+ // generate a key ring
+ //
+ char[] passPhrase = "test".toCharArray();
+ PGPDigestCalculator sha1Calc = new JcaPGPDigestCalculatorProviderBuilder().build().get(HashAlgorithmTags.SHA1);
+ PGPKeyRingGenerator keyRingGen = new PGPKeyRingGenerator(PGPSignature.POSITIVE_CERTIFICATION, ecdsaKeyPair,
+ "test@bouncycastle.org", sha1Calc, null, null, new JcaPGPContentSignerBuilder(ecdsaKeyPair.getPublicKey().getAlgorithm(), HashAlgorithmTags.SHA1), new JcePBESecretKeyEncryptorBuilder(PGPEncryptedData.AES_256, sha1Calc).setProvider("SC").build(passPhrase));
+
+ PGPPublicKeyRing pubRing = keyRingGen.generatePublicKeyRing();
+
+ PGPSecretKeyRing secRing = keyRingGen.generateSecretKeyRing();
+
+ KeyFingerPrintCalculator fingerCalc = new JcaKeyFingerprintCalculator();
+
+ PGPPublicKeyRing pubRingEnc = new PGPPublicKeyRing(pubRing.getEncoded(), fingerCalc);
+
+ if (!Arrays.areEqual(pubRing.getEncoded(), pubRingEnc.getEncoded()))
+ {
+ fail("public key ring encoding failed");
+ }
+
+ PGPSecretKeyRing secRingEnc = new PGPSecretKeyRing(secRing.getEncoded(), fingerCalc);
+
+ if (!Arrays.areEqual(secRing.getEncoded(), secRingEnc.getEncoded()))
+ {
+ fail("secret key ring encoding failed");
+ }
+ }
+
+ public void performTest()
+ throws Exception
+ {
+ PGPUtil.setDefaultProvider("SC");
+
+ //
+ // Read the public key
+ //
+ PGPPublicKeyRing pubKeyRing = new PGPPublicKeyRing(testPubKey, new JcaKeyFingerprintCalculator());
+
+ for (Iterator it = pubKeyRing.getPublicKey().getSignatures(); it.hasNext();)
+ {
+ PGPSignature certification = (PGPSignature)it.next();
+
+ certification.init(new JcaPGPContentVerifierBuilderProvider().setProvider("SC"), pubKeyRing.getPublicKey());
+
+ if (!certification.verifyCertification((String)pubKeyRing.getPublicKey().getUserIDs().next(), pubKeyRing.getPublicKey()))
+ {
+ fail("self certification does not verify");
+ }
+ }
+
+ //
+ // Read the private key
+ //
+ PGPSecretKeyRing secretKeyRing = new PGPSecretKeyRing(testPrivKey, new JcaKeyFingerprintCalculator());
+
+
+ generateAndSign();
+ }
+
+ public String getName()
+ {
+ return "PGPECDSATest";
+ }
+
+ public static void main(
+ String[] args)
+ {
+ Security.addProvider(new BouncyCastleProvider());
+
+ runTest(new PGPECDSATest());
+ }
+}