/* See LICENSE for licensing and NOTICE for copyright. */ package org.cryptacular.bean; import java.security.PrivateKey; import org.cryptacular.EncodingException; import org.cryptacular.util.ByteUtil; import org.cryptacular.util.KeyPairUtil; import org.cryptacular.util.PemUtil; /** * Factory for creating a public key from a PEM-encoded private key in any format supported by {@link * KeyPairUtil#decodePrivateKey(byte[])}. Note that this component does not support encrypted private keys; see {@link * ResourceBasedPrivateKeyFactoryBean} for encryption support. * * @author Middleware Services * @see org.cryptacular.util.KeyPairUtil#decodePrivateKey(byte[]) * @see ResourceBasedPrivateKeyFactoryBean */ public class PemBasedPrivateKeyFactoryBean implements FactoryBean<PrivateKey> { /** PEM-encoded public key data. */ private String encodedKey; /** Creates a new instance. */ public PemBasedPrivateKeyFactoryBean() {} /** * Creates a new instance by specifying all properties. * * @param pemEncodedKey PEM-encoded private key data. */ public PemBasedPrivateKeyFactoryBean(final String pemEncodedKey) { setEncodedKey(pemEncodedKey); } /** @return PEM-encoded private key data. */ public String getEncodedKey() { return encodedKey; } /** * Sets the PEM-encoded private key data. * * @param pemEncodedKey PEM-encoded private key data. */ public void setEncodedKey(final String pemEncodedKey) { if (!PemUtil.isPem(ByteUtil.toBytes(pemEncodedKey))) { throw new IllegalArgumentException("Data is not PEM encoded."); } this.encodedKey = pemEncodedKey; } @Override public PrivateKey newInstance() throws EncodingException { return KeyPairUtil.decodePrivateKey(PemUtil.decode(encodedKey)); } }