Search in sources :

Example 1 with ECPublicKey

use of iaik.pkcs.pkcs11.objects.ECPublicKey in project xipki by xipki.

the class IaikP11Slot method generatePublicKey.

// method getObjects
private static java.security.PublicKey generatePublicKey(PublicKey p11Key) throws XiSecurityException {
    if (p11Key instanceof RSAPublicKey) {
        RSAPublicKey rsaP11Key = (RSAPublicKey) p11Key;
        byte[] expBytes = rsaP11Key.getPublicExponent().getByteArrayValue();
        BigInteger exp = new BigInteger(1, expBytes);
        byte[] modBytes = rsaP11Key.getModulus().getByteArrayValue();
        BigInteger mod = new BigInteger(1, modBytes);
        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(mod, exp);
        try {
            return KeyUtil.generateRSAPublicKey(keySpec);
        } catch (InvalidKeySpecException ex) {
            throw new XiSecurityException(ex.getMessage(), ex);
        }
    } else if (p11Key instanceof DSAPublicKey) {
        DSAPublicKey dsaP11Key = (DSAPublicKey) p11Key;
        // p
        BigInteger prime = new BigInteger(1, dsaP11Key.getPrime().getByteArrayValue());
        BigInteger subPrime = new BigInteger(1, // q
        dsaP11Key.getSubprime().getByteArrayValue());
        // g
        BigInteger base = new BigInteger(1, dsaP11Key.getBase().getByteArrayValue());
        // y
        BigInteger value = new BigInteger(1, dsaP11Key.getValue().getByteArrayValue());
        DSAPublicKeySpec keySpec = new DSAPublicKeySpec(value, prime, subPrime, base);
        try {
            return KeyUtil.generateDSAPublicKey(keySpec);
        } catch (InvalidKeySpecException ex) {
            throw new XiSecurityException(ex.getMessage(), ex);
        }
    } else if (p11Key instanceof ECPublicKey) {
        ECPublicKey ecP11Key = (ECPublicKey) p11Key;
        byte[] encodedAlgorithmIdParameters = ecP11Key.getEcdsaParams().getByteArrayValue();
        byte[] encodedPoint = DEROctetString.getInstance(ecP11Key.getEcPoint().getByteArrayValue()).getOctets();
        try {
            return KeyUtil.createECPublicKey(encodedAlgorithmIdParameters, encodedPoint);
        } catch (InvalidKeySpecException ex) {
            throw new XiSecurityException(ex.getMessage(), ex);
        }
    } else {
        throw new XiSecurityException("unknown publicKey class " + p11Key.getClass().getName());
    }
}
Also used : XiSecurityException(org.xipki.security.exception.XiSecurityException) RSAPublicKey(iaik.pkcs.pkcs11.objects.RSAPublicKey) ECPublicKey(iaik.pkcs.pkcs11.objects.ECPublicKey) BigInteger(java.math.BigInteger) RSAPublicKeySpec(java.security.spec.RSAPublicKeySpec) InvalidKeySpecException(java.security.spec.InvalidKeySpecException) DSAPublicKey(iaik.pkcs.pkcs11.objects.DSAPublicKey) DSAPublicKeySpec(java.security.spec.DSAPublicKeySpec)

Example 2 with ECPublicKey

use of iaik.pkcs.pkcs11.objects.ECPublicKey in project xipki by xipki.

the class IaikP11Slot method generateECKeypair0.

@Override
protected P11Identity generateECKeypair0(ASN1ObjectIdentifier curveId, String label, P11NewKeyControl control) throws P11TokenException {
    long mech = PKCS11Constants.CKM_EC_KEY_PAIR_GEN;
    assertMechanismSupported(mech);
    ECPrivateKey privateKey = new ECPrivateKey();
    ECPublicKey publicKey = new ECPublicKey();
    setKeyAttributes(label, PKCS11Constants.CKK_EC, control, publicKey, privateKey);
    byte[] encodedCurveId;
    try {
        encodedCurveId = curveId.getEncoded();
    } catch (IOException ex) {
        throw new P11TokenException(ex.getMessage(), ex);
    }
    try {
        publicKey.getEcdsaParams().setByteArrayValue(encodedCurveId);
        return generateKeyPair(mech, privateKey, publicKey);
    } catch (P11TokenException ex) {
        X9ECParameters ecParams = ECNamedCurveTable.getByOID(curveId);
        if (ecParams == null) {
            throw new IllegalArgumentException("could not get X9ECParameters for curve " + curveId.getId());
        }
        try {
            publicKey.getEcdsaParams().setByteArrayValue(ecParams.getEncoded());
        } catch (IOException ex2) {
            throw new P11TokenException(ex.getMessage(), ex);
        }
        return generateKeyPair(mech, privateKey, publicKey);
    }
}
Also used : ECPrivateKey(iaik.pkcs.pkcs11.objects.ECPrivateKey) ECPublicKey(iaik.pkcs.pkcs11.objects.ECPublicKey) X9ECParameters(org.bouncycastle.asn1.x9.X9ECParameters) P11TokenException(org.xipki.security.exception.P11TokenException) IOException(java.io.IOException)

Aggregations

ECPublicKey (iaik.pkcs.pkcs11.objects.ECPublicKey)2 DSAPublicKey (iaik.pkcs.pkcs11.objects.DSAPublicKey)1 ECPrivateKey (iaik.pkcs.pkcs11.objects.ECPrivateKey)1 RSAPublicKey (iaik.pkcs.pkcs11.objects.RSAPublicKey)1 IOException (java.io.IOException)1 BigInteger (java.math.BigInteger)1 DSAPublicKeySpec (java.security.spec.DSAPublicKeySpec)1 InvalidKeySpecException (java.security.spec.InvalidKeySpecException)1 RSAPublicKeySpec (java.security.spec.RSAPublicKeySpec)1 X9ECParameters (org.bouncycastle.asn1.x9.X9ECParameters)1 P11TokenException (org.xipki.security.exception.P11TokenException)1 XiSecurityException (org.xipki.security.exception.XiSecurityException)1