aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/examples/RSAKeyPairGenerator.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/examples/RSAKeyPairGenerator.java')
-rw-r--r--libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/examples/RSAKeyPairGenerator.java114
1 files changed, 114 insertions, 0 deletions
diff --git a/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/examples/RSAKeyPairGenerator.java b/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/examples/RSAKeyPairGenerator.java
new file mode 100644
index 000000000..99042fd38
--- /dev/null
+++ b/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/examples/RSAKeyPairGenerator.java
@@ -0,0 +1,114 @@
+package org.spongycastle.openpgp.examples;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.security.InvalidKeyException;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.NoSuchProviderException;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.security.Security;
+import java.security.SignatureException;
+import java.util.Date;
+
+import org.spongycastle.bcpg.ArmoredOutputStream;
+import org.spongycastle.bcpg.HashAlgorithmTags;
+import org.spongycastle.jce.provider.BouncyCastleProvider;
+import org.spongycastle.openpgp.PGPEncryptedData;
+import org.spongycastle.openpgp.PGPException;
+import org.spongycastle.openpgp.PGPKeyPair;
+import org.spongycastle.openpgp.PGPPublicKey;
+import org.spongycastle.openpgp.PGPSecretKey;
+import org.spongycastle.openpgp.PGPSignature;
+import org.spongycastle.openpgp.operator.PGPDigestCalculator;
+import org.spongycastle.openpgp.operator.jcajce.JcaPGPContentSignerBuilder;
+import org.spongycastle.openpgp.operator.jcajce.JcaPGPDigestCalculatorProviderBuilder;
+import org.spongycastle.openpgp.operator.jcajce.JcePBESecretKeyEncryptorBuilder;
+
+/**
+ * A simple utility class that generates a RSA PGPPublicKey/PGPSecretKey pair.
+ * <p>
+ * usage: RSAKeyPairGenerator [-a] identity passPhrase
+ * <p>
+ * Where identity is the name to be associated with the public key. The keys are placed
+ * in the files pub.[asc|bpg] and secret.[asc|bpg].
+ */
+public class RSAKeyPairGenerator
+{
+ private static void exportKeyPair(
+ OutputStream secretOut,
+ OutputStream publicOut,
+ PublicKey publicKey,
+ PrivateKey privateKey,
+ String identity,
+ char[] passPhrase,
+ boolean armor)
+ throws IOException, InvalidKeyException, NoSuchProviderException, SignatureException, PGPException
+ {
+ if (armor)
+ {
+ secretOut = new ArmoredOutputStream(secretOut);
+ }
+
+ PGPDigestCalculator sha1Calc = new JcaPGPDigestCalculatorProviderBuilder().build().get(HashAlgorithmTags.SHA1);
+ PGPKeyPair keyPair = new PGPKeyPair(PGPPublicKey.RSA_GENERAL, publicKey, privateKey, new Date());
+ PGPSecretKey secretKey = new PGPSecretKey(PGPSignature.DEFAULT_CERTIFICATION, keyPair, identity, sha1Calc, null, null, new JcaPGPContentSignerBuilder(keyPair.getPublicKey().getAlgorithm(), HashAlgorithmTags.SHA1), new JcePBESecretKeyEncryptorBuilder(PGPEncryptedData.CAST5, sha1Calc).setProvider("SC").build(passPhrase));
+
+ secretKey.encode(secretOut);
+
+ secretOut.close();
+
+ if (armor)
+ {
+ publicOut = new ArmoredOutputStream(publicOut);
+ }
+
+ PGPPublicKey key = secretKey.getPublicKey();
+
+ key.encode(publicOut);
+
+ publicOut.close();
+ }
+
+ public static void main(
+ String[] args)
+ throws Exception
+ {
+ Security.addProvider(new BouncyCastleProvider());
+
+ KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", "SC");
+
+ kpg.initialize(1024);
+
+ KeyPair kp = kpg.generateKeyPair();
+
+ if (args.length < 2)
+ {
+ System.out.println("RSAKeyPairGenerator [-a] identity passPhrase");
+ System.exit(0);
+ }
+
+ if (args[0].equals("-a"))
+ {
+ if (args.length < 3)
+ {
+ System.out.println("RSAKeyPairGenerator [-a] identity passPhrase");
+ System.exit(0);
+ }
+
+ FileOutputStream out1 = new FileOutputStream("secret.asc");
+ FileOutputStream out2 = new FileOutputStream("pub.asc");
+
+ exportKeyPair(out1, out2, kp.getPublic(), kp.getPrivate(), args[1], args[2].toCharArray(), true);
+ }
+ else
+ {
+ FileOutputStream out1 = new FileOutputStream("secret.bpg");
+ FileOutputStream out2 = new FileOutputStream("pub.bpg");
+
+ exportKeyPair(out1, out2, kp.getPublic(), kp.getPrivate(), args[0], args[1].toCharArray(), false);
+ }
+ }
+}