List of usage examples for org.bouncycastle.bcpg ElGamalSecretBCPGKey ElGamalSecretBCPGKey
public ElGamalSecretBCPGKey(BigInteger x)
From source file:genkeys.java
License:Open Source License
private static SecretKeyPacket secretKeyPacket(KeyPair key, int cipher, boolean useSHA1, S2K s2k, String pass) throws NoSuchProviderException, PGPException { int algorithm; if (key.getPrivate().getAlgorithm() == "RSA") { algorithm = PGPPublicKey.RSA_GENERAL; } else {//from w w w .j a v a 2 s. c o m algorithm = PGPPublicKey.DSA; } Date time = new Date(); PGPKeyPair keyPair = new PGPKeyPair(algorithm, key.getPublic(), key.getPrivate(), time, "BC"); PublicKeyPacket pubPk = publicKeyPacket(key.getPublic(), algorithm, time); BCPGObject secKey; switch (keyPair.getPublicKey().getAlgorithm()) { case PGPPublicKey.RSA_ENCRYPT: case PGPPublicKey.RSA_SIGN: case PGPPublicKey.RSA_GENERAL: RSAPrivateCrtKey rsK = (RSAPrivateCrtKey) keyPair.getPrivateKey().getKey(); secKey = new RSASecretBCPGKey(rsK.getPrivateExponent(), rsK.getPrimeP(), rsK.getPrimeQ()); break; case PGPPublicKey.DSA: DSAPrivateKey dsK = (DSAPrivateKey) keyPair.getPrivateKey().getKey(); secKey = new DSASecretBCPGKey(dsK.getX()); break; case PGPPublicKey.ELGAMAL_ENCRYPT: case PGPPublicKey.ELGAMAL_GENERAL: ElGamalPrivateKey esK = (ElGamalPrivateKey) keyPair.getPrivateKey().getKey(); secKey = new ElGamalSecretBCPGKey(esK.getX()); break; default: throw new PGPException("unknown key class"); } Cipher c = cipher(cipher); SecretKeyPacket secPk; try { ByteArrayOutputStream bOut = new ByteArrayOutputStream(); BCPGOutputStream pOut = new BCPGOutputStream(bOut); pOut.writeObject(secKey); byte[] keyData = bOut.toByteArray(); pOut.write(checksum(useSHA1, keyData, keyData.length)); if (c != null) { SecretKey skey = PGPUtil.makeKeyFromPassPhrase(cipher, s2k, pass.toCharArray(), "BC"); c.init(Cipher.ENCRYPT_MODE, skey, new SecureRandom()); byte[] iv = c.getIV(); byte[] encData = c.doFinal(bOut.toByteArray()); if (useSHA1) { secPk = new SecretKeyPacket(pubPk, cipher, SecretKeyPacket.USAGE_SHA1, s2k, iv, encData); } else { secPk = new SecretKeyPacket(pubPk, cipher, SecretKeyPacket.USAGE_CHECKSUM, s2k, iv, encData); } } else { secPk = new SecretKeyPacket(pubPk, cipher, null, null, bOut.toByteArray()); } } catch (PGPException e) { throw e; } catch (Exception e) { throw new PGPException("Exception encrypting key", e); } return secPk; }