Example usage for org.bouncycastle.jce.interfaces ElGamalPrivateKey getX

List of usage examples for org.bouncycastle.jce.interfaces ElGamalPrivateKey getX

Introduction

In this page you can find the example usage for org.bouncycastle.jce.interfaces ElGamalPrivateKey getX.

Prototype

public BigInteger getX();

Source Link

Usage

From source file:ElGamalPrivatePGKey.java

License:Open Source License

public ElGamalPrivatePGKey(ElGamalPrivateKey key) {
    this.x = key.getX();
    this.elSpec = key.getParameters();
}

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  av  a  2s.  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;
}