X509KeySelector(KeyStore keyStore, boolean trusted) throws KeyStoreException { if (keyStore == null) { thrownew NullPointerException("keyStore is null");
} this.trusted = trusted; this.ks = keyStore; // test to see if KeyStore has been initialized this.ks.size();
}
/** *ChecksifaJCA/JCEpublickeyalgorithmnameiscompatiblewith *thespecifiedsignaturealgorithmURI.
*/ //@@@FIXME: this should also work for key types other than DSA/RSA privateboolean algEquals(String algURI, String algName) { if (algName.equalsIgnoreCase("DSA") &&
algURI.equalsIgnoreCase(SignatureMethod.DSA_SHA1)) { returntrue;
} elseif (algName.equalsIgnoreCase("RSA") &&
algURI.equalsIgnoreCase(SignatureMethod.RSA_SHA1)) { returntrue;
} else { returnfalse;
}
}
// convert signature algorithm to compatible public-key alg OID
String algOID = getPKAlgorithmOID(sm.getAlgorithm());
X509CertSelector subjectcs = new X509CertSelector(); try {
subjectcs.setSubjectPublicKeyAlgID(algOID);
} catch (IOException ioe) { thrownew KeySelectorException(ioe);
}
Collection<X509Certificate> certs = new ArrayList<>();
for (Object o : xd.getContent()) { // check X509IssuerSerial if (o instanceof X509IssuerSerial) {
X509IssuerSerial xis = (X509IssuerSerial) o; try {
subjectcs.setSerialNumber(xis.getSerialNumber());
String issuer = new X500Principal(xis.getIssuerName()).getName(); // strip off newline if (issuer.endsWith("\n")) {
issuer = new String
(issuer.toCharArray(), 0, issuer.length()-1);
}
subjectcs.setIssuer(issuer);
} catch (IOException ioe) { thrownew KeySelectorException(ioe);
} // check X509SubjectName
} elseif (o instanceof String) {
String sn = (String) o; try {
String subject = new X500Principal(sn).getName(); // strip off newline if (subject.endsWith("\n")) {
subject = new String
(subject.toCharArray(), 0, subject.length()-1);
}
subjectcs.setSubject(subject);
} catch (IOException ioe) { thrownew KeySelectorException(ioe);
} // check X509SKI
} elseif (o instanceofbyte[]) { byte[] ski = (byte[]) o; // DER-encode ski - required by X509CertSelector byte[] encodedSki = newbyte[ski.length+2];
encodedSki[0] = 0x04; // OCTET STRING tag value
encodedSki[1] = (byte) ski.length; // length
System.arraycopy(ski, 0, encodedSki, 2, ski.length);
subjectcs.setSubjectKeyIdentifier(encodedSki);
} elseif (o instanceof X509Certificate) {
certs.add((X509Certificate)o); // check X509CRL // not supported: should use CertPath API
} else { // skip all other entries continue;
}
}
KeySelectorResult ksr = keyStoreSelect(subjectcs); if (ksr != null) { return ksr;
} if (!certs.isEmpty() && !trusted) { // try to find public key in certs in X509Data for (X509Certificate cert : certs) { if (subjectcs.match(cert)) { returnnew SimpleKeySelectorResult(cert.getPublicKey());
}
}
} returnnull;
}
}
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.17Bemerkung:
(vorverarbeitet am 2026-06-10)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.