if(!(key instanceof ASN1Sequence)) {
key = get(key);
}
ASN1Sequence seq = (ASN1Sequence)key;
AuthorityKeyIdentifier sakid = null;
if(seq.size() == 1 && (seq.getObjectAt(0) instanceof ASN1OctetString)) {
sakid = new AuthorityKeyIdentifier(new DERSequence(new DERTaggedObject(0, seq.getObjectAt(0))));
} else {
sakid = new AuthorityKeyIdentifier(seq);
}
if(sakid.getKeyIdentifier() != null) {
if(issuer.getExtensionValue("2.5.29.14") != null) {
DEROctetString der = (DEROctetString)get(issuer.getExtensionValue("2.5.29.14"));
if(der.getOctets().length > 20) {
der = (DEROctetString)get(der.getOctets());
}
SubjectKeyIdentifier iskid = new SubjectKeyIdentifier(der);
if(iskid.getKeyIdentifier() != null) {
if(!Arrays.equals(sakid.getKeyIdentifier(),iskid.getKeyIdentifier())) {
return V_ERR_AKID_SKID_MISMATCH;
}
}
}
}
if(sakid.getAuthorityCertSerialNumber() != null && !sakid.getAuthorityCertSerialNumber().equals(issuer.getSerialNumber())) {
return V_ERR_AKID_ISSUER_SERIAL_MISMATCH;
}
if(sakid.getAuthorityCertIssuer() != null) {
GeneralName[] gens = sakid.getAuthorityCertIssuer().getNames();
org.bouncycastle.asn1.x509.X509Name nm = null;
for(int i=0;i<gens.length;i++) {
if(gens[i].getTagNo() == GeneralName.directoryName) {
DEREncodable nameTmp = gens[i].getName();
if (nameTmp instanceof org.bouncycastle.asn1.x509.X509Name) {