Search in sources :

Example 6 with RSAPrivateCrtKey

use of java.security.interfaces.RSAPrivateCrtKey in project wycheproof by google.

the class RsaKeyTest method checkKeyPair.

private void checkKeyPair(KeyPair keypair, int keySizeInBits) throws Exception {
    RSAPublicKey pub = (RSAPublicKey) keypair.getPublic();
    RSAPrivateKey priv = (RSAPrivateKey) keypair.getPrivate();
    if (priv instanceof RSAPrivateCrtKey) {
        checkPrivateCrtKey((RSAPrivateCrtKey) priv, keySizeInBits);
    } else {
        // Using a CRT key leads to 6-7 times better performance than not using the CRT.
        // Such a perfomance loss makes a library almost useless. Thus we consider this
        // a bug.
        fail("Expecting an RSAPrivateCrtKey instead of " + priv.getClass().getName());
    }
    checkPublicKey(pub, priv);
}
Also used : RSAPrivateCrtKey(java.security.interfaces.RSAPrivateCrtKey) RSAPublicKey(java.security.interfaces.RSAPublicKey) RSAPrivateKey(java.security.interfaces.RSAPrivateKey)

Example 7 with RSAPrivateCrtKey

use of java.security.interfaces.RSAPrivateCrtKey in project XobotOS by xamarin.

the class MiscPEMGenerator method createPemObject.

private PemObject createPemObject(Object obj, String algorithm, char[] password, SecureRandom random) throws IOException {
    if (obj instanceof KeyPair) {
        return createPemObject(((KeyPair) obj).getPrivate(), algorithm, password, random);
    }
    String type = null;
    byte[] keyData = null;
    if (obj instanceof RSAPrivateCrtKey) {
        type = "RSA PRIVATE KEY";
        RSAPrivateCrtKey k = (RSAPrivateCrtKey) obj;
        RSAPrivateKeyStructure keyStruct = new RSAPrivateKeyStructure(k.getModulus(), k.getPublicExponent(), k.getPrivateExponent(), k.getPrimeP(), k.getPrimeQ(), k.getPrimeExponentP(), k.getPrimeExponentQ(), k.getCrtCoefficient());
        // convert to bytearray
        keyData = keyStruct.getEncoded();
    } else if (obj instanceof DSAPrivateKey) {
        type = "DSA PRIVATE KEY";
        DSAPrivateKey k = (DSAPrivateKey) obj;
        DSAParams p = k.getParams();
        ASN1EncodableVector v = new ASN1EncodableVector();
        v.add(new DERInteger(0));
        v.add(new DERInteger(p.getP()));
        v.add(new DERInteger(p.getQ()));
        v.add(new DERInteger(p.getG()));
        BigInteger x = k.getX();
        BigInteger y = p.getG().modPow(x, p.getP());
        v.add(new DERInteger(y));
        v.add(new DERInteger(x));
        keyData = new DERSequence(v).getEncoded();
    } else if (obj instanceof PrivateKey && "ECDSA".equals(((PrivateKey) obj).getAlgorithm())) {
        type = "EC PRIVATE KEY";
        PrivateKeyInfo privInfo = PrivateKeyInfo.getInstance(ASN1Object.fromByteArray(((PrivateKey) obj).getEncoded()));
        keyData = privInfo.getPrivateKey().getEncoded();
    }
    if (type == null || keyData == null) {
        // TODO Support other types?
        throw new IllegalArgumentException("Object type not supported: " + obj.getClass().getName());
    }
    String dekAlgName = Strings.toUpperCase(algorithm);
    // Note: For backward compatibility
    if (dekAlgName.equals("DESEDE")) {
        dekAlgName = "DES-EDE3-CBC";
    }
    int ivLength = dekAlgName.startsWith("AES-") ? 16 : 8;
    byte[] iv = new byte[ivLength];
    random.nextBytes(iv);
    byte[] encData = PEMUtilities.crypt(true, provider, keyData, password, dekAlgName, iv);
    List headers = new ArrayList(2);
    headers.add(new PemHeader("Proc-Type", "4,ENCRYPTED"));
    headers.add(new PemHeader("DEK-Info", dekAlgName + "," + getHexEncoded(iv)));
    return new PemObject(type, headers, encData);
}
Also used : KeyPair(java.security.KeyPair) RSAPrivateCrtKey(java.security.interfaces.RSAPrivateCrtKey) DSAPrivateKey(java.security.interfaces.DSAPrivateKey) RSAPrivateKey(java.security.interfaces.RSAPrivateKey) PrivateKey(java.security.PrivateKey) ArrayList(java.util.ArrayList) DSAParams(java.security.interfaces.DSAParams) DERInteger(org.bouncycastle.asn1.DERInteger) PemObject(org.bouncycastle.util.io.pem.PemObject) DERSequence(org.bouncycastle.asn1.DERSequence) RSAPrivateKeyStructure(org.bouncycastle.asn1.pkcs.RSAPrivateKeyStructure) DSAPrivateKey(java.security.interfaces.DSAPrivateKey) ASN1EncodableVector(org.bouncycastle.asn1.ASN1EncodableVector) BigInteger(java.math.BigInteger) ArrayList(java.util.ArrayList) List(java.util.List) PrivateKeyInfo(org.bouncycastle.asn1.pkcs.PrivateKeyInfo) PemHeader(org.bouncycastle.util.io.pem.PemHeader)

Example 8 with RSAPrivateCrtKey

use of java.security.interfaces.RSAPrivateCrtKey in project azure-sdk-for-java by Azure.

the class JsonWebKey method fromRSA.

/**
     * Converts RSA key pair to JSON web key.
     * @param keyPair RSA key pair
     * @return the JSON web key, converted from RSA key pair.
     */
public static JsonWebKey fromRSA(KeyPair keyPair) {
    RSAPrivateCrtKey privateKey = (RSAPrivateCrtKey) keyPair.getPrivate();
    JsonWebKey key = null;
    if (privateKey != null) {
        key = new JsonWebKey().withKty(JsonWebKeyType.RSA).withN(toByteArray(privateKey.getModulus())).withE(toByteArray(privateKey.getPublicExponent())).withD(toByteArray(privateKey.getPrivateExponent())).withP(toByteArray(privateKey.getPrimeP())).withQ(toByteArray(privateKey.getPrimeQ())).withDp(toByteArray(privateKey.getPrimeExponentP())).withDq(toByteArray(privateKey.getPrimeExponentQ())).withQi(toByteArray(privateKey.getCrtCoefficient()));
    } else {
        RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
        key = new JsonWebKey().withKty(JsonWebKeyType.RSA).withN(toByteArray(publicKey.getModulus())).withE(toByteArray(publicKey.getPublicExponent())).withD(null).withP(null).withQ(null).withDp(null).withDq(null).withQi(null);
    }
    return key;
}
Also used : RSAPrivateCrtKey(java.security.interfaces.RSAPrivateCrtKey) RSAPublicKey(java.security.interfaces.RSAPublicKey)

Example 9 with RSAPrivateCrtKey

use of java.security.interfaces.RSAPrivateCrtKey in project jdk8u_jdk by JetBrains.

the class KeyStore method engineSetKeyEntry.

/**
     * Stores the given private key and associated certificate chain in the
     * keystore.
     *
     * <p>The given java.security.PrivateKey <code>key</code> must
     * be accompanied by a certificate chain certifying the
     * corresponding public key.
     *
     * <p>If the given alias already exists, the keystore information
     * associated with it is overridden by the given key and certificate
     * chain. Otherwise, a new entry is created.
     *
     * <p>
     * A compatibility mode is supported for applications that assume
     * a password must be supplied. It permits (but ignores) a non-null
     * <code>password</code>.  The mode is enabled by default.
     * Set the
     * <code>sun.security.mscapi.keyStoreCompatibilityMode</code>
     * system property to <code>false</code> to disable compatibility mode
     * and reject a non-null <code>password</code>.
     *
     * @param alias the alias name
     * @param key the private key to be associated with the alias
     * @param password the password, which should be <code>null</code>
     * @param chain the certificate chain for the corresponding public
     *        key (only required if the given key is of type
     *        <code>java.security.PrivateKey</code>).
     *
     * @exception KeyStoreException if the given key is not a private key,
     * cannot be protected, or if compatibility mode is disabled and
     * <code>password</code> is non-null, or if this operation fails for
     * some other reason.
     */
public void engineSetKeyEntry(String alias, java.security.Key key, char[] password, Certificate[] chain) throws KeyStoreException {
    if (alias == null) {
        throw new KeyStoreException("alias must not be null");
    }
    if (password != null && !keyStoreCompatibilityMode) {
        throw new KeyStoreException("Password must be null");
    }
    if (key instanceof RSAPrivateCrtKey) {
        KeyEntry entry = entries.get(alias);
        X509Certificate[] xchain;
        if (chain != null) {
            if (chain instanceof X509Certificate[]) {
                xchain = (X509Certificate[]) chain;
            } else {
                xchain = new X509Certificate[chain.length];
                System.arraycopy(chain, 0, xchain, 0, chain.length);
            }
        } else {
            xchain = null;
        }
        if (entry == null) {
            entry = //TODO new KeyEntry(alias, key, (X509Certificate[]) chain);
            new KeyEntry(alias, null, xchain);
            storeWithUniqueAlias(alias, entry);
        }
        entry.setAlias(alias);
        try {
            entry.setPrivateKey((RSAPrivateCrtKey) key);
            entry.setCertificateChain(xchain);
        } catch (CertificateException ce) {
            throw new KeyStoreException(ce);
        } catch (InvalidKeyException ike) {
            throw new KeyStoreException(ike);
        }
    } else {
        throw new UnsupportedOperationException("Cannot assign the key to the given alias.");
    }
}
Also used : RSAPrivateCrtKey(java.security.interfaces.RSAPrivateCrtKey) CertificateException(java.security.cert.CertificateException) KeyStoreException(java.security.KeyStoreException) InvalidKeyException(java.security.InvalidKeyException) X509Certificate(java.security.cert.X509Certificate)

Example 10 with RSAPrivateCrtKey

use of java.security.interfaces.RSAPrivateCrtKey in project bitsquare by bitsquare.

the class KeyStorage method loadKeyPair.

public KeyPair loadKeyPair(KeyEntry keyEntry) {
    FileUtil.rollingBackup(storageDir, keyEntry.getFileName() + ".key", 20);
    // long now = System.currentTimeMillis();
    try {
        KeyFactory keyFactory = KeyFactory.getInstance(keyEntry.getAlgorithm(), "BC");
        PublicKey publicKey;
        PrivateKey privateKey;
        File filePrivateKey = new File(storageDir + "/" + keyEntry.getFileName() + ".key");
        try (FileInputStream fis = new FileInputStream(filePrivateKey.getPath())) {
            byte[] encodedPrivateKey = new byte[(int) filePrivateKey.length()];
            fis.read(encodedPrivateKey);
            PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(encodedPrivateKey);
            privateKey = keyFactory.generatePrivate(privateKeySpec);
        } catch (InvalidKeySpecException | IOException e) {
            e.printStackTrace();
            log.error(e.getMessage());
            throw new RuntimeException("Could not load key " + keyEntry.toString(), e);
        }
        if (privateKey instanceof RSAPrivateCrtKey) {
            RSAPrivateCrtKey rsaPrivateKey = (RSAPrivateCrtKey) privateKey;
            RSAPublicKeySpec publicKeySpec = new RSAPublicKeySpec(rsaPrivateKey.getModulus(), rsaPrivateKey.getPublicExponent());
            publicKey = keyFactory.generatePublic(publicKeySpec);
        } else if (privateKey instanceof DSAPrivateKey) {
            DSAPrivateKey dsaPrivateKey = (DSAPrivateKey) privateKey;
            DSAParams dsaParams = dsaPrivateKey.getParams();
            BigInteger p = dsaParams.getP();
            BigInteger q = dsaParams.getQ();
            BigInteger g = dsaParams.getG();
            BigInteger y = g.modPow(dsaPrivateKey.getX(), p);
            KeySpec publicKeySpec = new DSAPublicKeySpec(y, p, q, g);
            publicKey = keyFactory.generatePublic(publicKeySpec);
        } else {
            throw new RuntimeException("Unsupported key algo" + keyEntry.getAlgorithm());
        }
        log.debug("load completed in {} msec", System.currentTimeMillis() - new Date().getTime());
        return new KeyPair(publicKey, privateKey);
    } catch (NoSuchAlgorithmException | InvalidKeySpecException | NoSuchProviderException e) {
        e.printStackTrace();
        log.error(e.getMessage());
        throw new RuntimeException("Could not load key " + keyEntry.toString(), e);
    }
}
Also used : DSAPrivateKey(java.security.interfaces.DSAPrivateKey) RSAPrivateCrtKey(java.security.interfaces.RSAPrivateCrtKey) IOException(java.io.IOException) DSAParams(java.security.interfaces.DSAParams) FileInputStream(java.io.FileInputStream) Date(java.util.Date) DSAPrivateKey(java.security.interfaces.DSAPrivateKey) BigInteger(java.math.BigInteger) File(java.io.File)

Aggregations

RSAPrivateCrtKey (java.security.interfaces.RSAPrivateCrtKey)21 RSAPrivateKey (java.security.interfaces.RSAPrivateKey)11 RSAPublicKey (java.security.interfaces.RSAPublicKey)7 PKCS8EncodedKeySpec (java.security.spec.PKCS8EncodedKeySpec)7 InvalidKeyException (java.security.InvalidKeyException)6 PrivateKey (java.security.PrivateKey)6 PublicKey (java.security.PublicKey)6 RSAPrivateCrtKeySpec (java.security.spec.RSAPrivateCrtKeySpec)6 RSAPublicKeySpec (java.security.spec.RSAPublicKeySpec)6 BigInteger (java.math.BigInteger)5 KeyPair (java.security.KeyPair)5 RSAPrivateKeySpec (java.security.spec.RSAPrivateKeySpec)5 InvalidKeySpecException (java.security.spec.InvalidKeySpecException)4 X509EncodedKeySpec (java.security.spec.X509EncodedKeySpec)4 KeyFactory (java.security.KeyFactory)3 DSAPrivateKey (java.security.interfaces.DSAPrivateKey)3 KeyPairGenerator (java.security.KeyPairGenerator)2 KeyStore (java.security.KeyStore)2 X509Certificate (java.security.cert.X509Certificate)2 DSAParams (java.security.interfaces.DSAParams)2