org.cryptacular.adapter.AbstractWrappedKey Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of com.liferay.saml.opensaml.integration Show documentation
Show all versions of com.liferay.saml.opensaml.integration Show documentation
Liferay SAML OpenSAML Integration
/* See LICENSE for licensing and NOTICE for copyright. */
package org.cryptacular.adapter;
import java.io.IOException;
import java.security.Key;
import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
import org.bouncycastle.crypto.util.PrivateKeyInfoFactory;
import org.bouncycastle.crypto.util.SubjectPublicKeyInfoFactory;
import org.cryptacular.EncodingException;
/**
* JCE/JDK key base class that wraps a BC native private key.
*
* @param Asymmetric key parameters type wrapped by this class.
*
* @author Middleware Services
*/
public abstract class AbstractWrappedKey implements Key
{
/** PKCS#8 format identifier used with private keys. */
public static final String PKCS8_FORMAT = "PKCS#8";
/** X.509 format identifier used with private keys. */
public static final String X509_FORMAT = "X.509";
/** Wrapped key. */
protected final T delegate;
/**
* Creates a new instance that wraps the given BC key.
*
* @param wrappedKey BC key to wrap.
*/
public AbstractWrappedKey(final T wrappedKey)
{
if (wrappedKey == null) {
throw new IllegalArgumentException("Wrapped key cannot be null.");
}
delegate = wrappedKey;
}
/** @return {@value #PKCS8_FORMAT} in the case of a private key, otherwise {@link #X509_FORMAT}. */
@Override
public String getFormat()
{
if (delegate.isPrivate()) {
return PKCS8_FORMAT;
}
return X509_FORMAT;
}
/**
* @return Encoded PrivateKeyInfo structure in the case of a private key, otherwise an encoded SubjectPublicKeyInfo
* structure.
*/
@Override
public byte[] getEncoded()
{
try {
if (delegate.isPrivate()) {
return PrivateKeyInfoFactory.createPrivateKeyInfo(delegate).getEncoded();
}
return SubjectPublicKeyInfoFactory.createSubjectPublicKeyInfo(delegate).getEncoded();
} catch (IOException e) {
throw new EncodingException("Key encoding error", e);
}
}
}