diff options
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.java | 159 |
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()); + } +} |