/* See LICENSE for licensing and NOTICE for copyright. */
package org.cryptacular.bean;
import java.security.PublicKey;
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 string:
*
* <pre>-----BEGIN PUBLIC KEY-----
MIIBtzCCASsGByqGSM44BAEwggEeAoGBAOulifG+AGGBVGWEjunG4661rydB7eFy
RfHzbwVAVaPU0H3zFcOY35z1l6Pk4ZANVHq7hCbViJBR7XyrkYKaUcaB0nSPLgg3
vWWOmvGqhuR6tWRGbz4fyHl1urCRk9mrJum4mAJd3OlLugCyuIqozsYUtvJ5mlGe
vir1zmxinKd7AhUA7fBEySYP53g7FLOlcEyuhIjvQAECgYBJ9baoGzn0zKpeteC4
jfbGVuKrFksr2eeY0AFJOeTtyFkCnVqrNnF674eN1RAOwA2tzzhWZ96G0AGux8ah
mGsNRbj/qaUTDNRWr7BPBIvDd+8LpMin4Cb5j4c/A7uOY+5WxhUm3TNifueBRohw
h1NnexYQqpclcuTRA/ougLX48gOBhQACgYEA6Tw2khtb1g0vcHu6JRgggWPZVTuj
/HOH3FyjufsfHogWKrlKebZ6hnQ73qAcEgLLYKctPdCX6wnpXN+BsQGYdTkc0FsU
NZD4VW5L5kaWRiLVfE8x55wXdMZtXKWqg1vL6aXYZw7RFe9U9Ck+/AG90knThDC+
xrX2FTDm6uC25rk=
-----END PUBLIC KEY-----</pre>
*
* @author Middleware Services
* @see KeyPairUtil#decodePublicKey(byte[])
*/
public class PemBasedPublicKeyFactoryBean implements FactoryBean<PublicKey>
{
/** PEM-encoded public key data. */
private String encodedKey;
/** Creates a new instance. */
public PemBasedPublicKeyFactoryBean() {}
/**
* Creates a new instance by specifying all properties.
*
* @param pemEncodedKey PEM-encoded public key data.
*/
public PemBasedPublicKeyFactoryBean(final String pemEncodedKey)
{
setEncodedKey(pemEncodedKey);
}
/** @return PEM-encoded public key data. */
public String getEncodedKey()
{
return encodedKey;
}
/**
* Sets the PEM-encoded public key data.
*
* @param pemEncodedKey PEM-encoded public 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 PublicKey newInstance() throws EncodingException
{
return KeyPairUtil.decodePublicKey(PemUtil.decode(encodedKey));
}
}