blob: b1c2b49a986d8b66822aa713c28e887e6be29e8a [file] [log] [blame]
package org.bouncycastle.cert.selector.jcajce;
import java.math.BigInteger;
import java.security.cert.X509Certificate;
import javax.security.auth.x500.X500Principal;
import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.asn1.x500.X500Name;
import org.bouncycastle.asn1.x509.Extension;
import org.bouncycastle.cert.selector.X509CertificateHolderSelector;
public class JcaX509CertificateHolderSelector
extends X509CertificateHolderSelector
{
/**
* Construct a signer identifier based on the issuer, serial number and subject key identifier (if present) of the passed in
* certificate.
*
* @param certificate certificate providing the issue and serial number and subject key identifier.
*/
public JcaX509CertificateHolderSelector(X509Certificate certificate)
{
super(convertPrincipal(certificate.getIssuerX500Principal()), certificate.getSerialNumber(), getSubjectKeyId(certificate));
}
/**
* Construct a signer identifier based on the provided issuer and serial number..
*
* @param issuer the issuer to use.
* @param serialNumber the serial number to use.
*/
public JcaX509CertificateHolderSelector(X500Principal issuer, BigInteger serialNumber)
{
super(convertPrincipal(issuer), serialNumber);
}
/**
* Construct a signer identifier based on the provided issuer, serial number, and subjectKeyId..
*
* @param issuer the issuer to use.
* @param serialNumber the serial number to use.
* @param subjectKeyId the subject key ID to use.
*/
public JcaX509CertificateHolderSelector(X500Principal issuer, BigInteger serialNumber, byte[] subjectKeyId)
{
super(convertPrincipal(issuer), serialNumber, subjectKeyId);
}
private static X500Name convertPrincipal(X500Principal issuer)
{
if (issuer == null)
{
return null;
}
return X500Name.getInstance(issuer.getEncoded());
}
private static byte[] getSubjectKeyId(X509Certificate cert)
{
byte[] ext = cert.getExtensionValue(Extension.subjectKeyIdentifier.getId());
if (ext != null)
{
return ASN1OctetString.getInstance(ASN1OctetString.getInstance(ext).getOctets()).getOctets();
}
else
{
return null;
}
}
}