/* See LICENSE for licensing and NOTICE for copyright. */ package org.cryptacular.bean; import java.io.IOException; import java.security.PublicKey; import org.cryptacular.EncodingException; import org.cryptacular.StreamException; import org.cryptacular.io.Resource; import org.cryptacular.util.KeyPairUtil; /** * Factory for creating a public key from a {@link Resource} containing data in any of the formats supported by {@link * KeyPairUtil#readPublicKey(java.io.InputStream)}. * * @author Middleware Services * @see KeyPairUtil#readPublicKey(java.io.InputStream) */ public class ResourceBasedPublicKeyFactoryBean implements FactoryBean<PublicKey> { /** Resource containing key data. */ private Resource resource; /** Creates a new instance. */ public ResourceBasedPublicKeyFactoryBean() {} /** * Creates a new instance by specifying all properties. * * @param resource Resource containing encoded key data. */ public ResourceBasedPublicKeyFactoryBean(final Resource resource) { setResource(resource); } /** @return Resource containing key data. */ public Resource getResource() { return resource; } /** * Sets the resource containing key data. * * @param resource Resource containing key bytes. */ public void setResource(final Resource resource) { this.resource = resource; } @Override public PublicKey newInstance() throws EncodingException, StreamException { try { return KeyPairUtil.readPublicKey(resource.getInputStream()); } catch (IOException e) { throw new StreamException(e); } } }