@SneakyThrows public static RSAPrivateKey privateKeyPkcs8(final String pkcs8) { final byte[] raw = CodecUtils.decodeBase64(dropComment(pkcs8, COMMENT_MARK)); return (RSAPrivateKey) KeyFactory.getInstance(ALGO_RSA).generatePrivate(new PKCS8EncodedKeySpec(raw)); }
@SneakyThrows public static RSAPublicKey publicKeyX509(final String x509) { final byte[] raw = CodecUtils.decodeBase64(dropComment(x509, COMMENT_MARK)); return (RSAPublicKey) KeyFactory.getInstance(ALGO_RSA).generatePublic(new X509EncodedKeySpec(raw)); } }
@SneakyThrows public static KeyExpression generateRsaKeyPairPkcs8X509( final Provider provider, // final int keySize // ) { final KeyPair pairPkcs8X509 = generateRsaKeyPair(provider, keySize); final byte[] privateKeyPkcs8 = pairPkcs8X509.getPrivate().getEncoded(); final byte[] publicKeyX509 = pairPkcs8X509.getPublic().getEncoded(); final String privateKeyPem = pem(privateKeyPkcs8, RsaKey.KEY_FORMAT_PKCS8, RsaKey.KEY_TYPE_PRIVATE); final String publicKeyPem = pem(publicKeyX509, RsaKey.KEY_FORMAT_X509, RsaKey.KEY_TYPE_PUBLIC); final String spec = RsaKey.keySpec(RsaKey.KEY_FORMAT_PKCS8 + CryptoConstants.UNDERSCORE + RsaKey.KEY_FORMAT_X509, keySize, RsaKey.KEY_TYPE_PAIR); final String value = StringUtils.dropComment(privateKeyPem, RsaKey.COMMENT_MARK) + CryptoConstants.COLON + StringUtils.dropComment(publicKeyPem, RsaKey.COMMENT_MARK); return new KeyExpression(spec, value); }
@SneakyThrows public static RSAPrivateKey privateKeyPkcs1(final String pkcs1) { final String withoutComment = dropComment(pkcs1, COMMENT_MARK); final byte[] raw = CodecUtils.decodeBase64(withoutComment); if (log.isDebugEnabled()) { log.debug("withoutComment: {}", withoutComment); log.debug("raw: {}", Hex.encodeHexString(raw)); } final ASN1Primitive asn1Primitive = ASN1Sequence.fromByteArray(raw); // final RSAPrivateKeyStructure asn1 = new RSAPrivateKeyStructure((ASN1Sequence) asn1Primitive); final org.bouncycastle.asn1.pkcs.RSAPrivateKey asn1 = org.bouncycastle.asn1.pkcs.RSAPrivateKey.getInstance(asn1Primitive); final RSAPrivateKeySpec rsaPrivateKeySpec = new RSAPrivateKeySpec(asn1.getModulus(), asn1.getPrivateExponent()); return (RSAPrivateKey) KeyFactory.getInstance(ALGO_RSA).generatePrivate(rsaPrivateKeySpec); }
public static KeyExpression convertPairFromPkcs8X509ToPkcs1(final KeyExpression pairPkcs8X509) { checkArgument(RsaKey.KEY_FORMAT_PKCS8_X509.equals(RsaKey.keyFormat(pairPkcs8X509.getSpec())), // "unsupported spec" + pairPkcs8X509.getSpec()); final byte[] privateKeyPkcs8 = CodecUtils.decodeBase64(RsaKey.extractPrivateKey(pairPkcs8X509)); final byte[] publicKeyX509 = CodecUtils.decodeBase64(RsaKey.extractPublicKey(pairPkcs8X509)); final String privateKeyPem = convertPrivateKeyFromPkcs8ToPkcs1Pem(privateKeyPkcs8); final String publicKeyPem = convertPublicKeyFromX509ToPkcs1Pem(publicKeyX509); final int keySize = RsaKey.keySize(pairPkcs8X509.getSpec()); final String spec = RsaKey.keySpec(RsaKey.KEY_FORMAT_PKCS1 + CryptoConstants.UNDERSCORE + RsaKey.KEY_FORMAT_PKCS1, keySize, RsaKey.KEY_TYPE_PAIR); final String value = StringUtils.dropComment(privateKeyPem, RsaKey.COMMENT_MARK) + CryptoConstants.COLON + StringUtils.dropComment(publicKeyPem, RsaKey.COMMENT_MARK); return new KeyExpression(spec, value); }