Element element, String BaseURI, StorageResolver storage)
throws KeyResolverException {
if (log.isDebugEnabled())
log.debug("Can I resolve " + element.getTagName() + "?");
Element[] x509childNodes = null;
XMLX509SubjectName x509childObject[] = null;
if (!XMLUtils.elementIsInSignatureSpace(element,
Constants._TAG_X509DATA) ) {
log.debug("I can't");
return null;
}
x509childNodes = XMLUtils.selectDsNodes(element.getFirstChild(),
Constants._TAG_X509SUBJECTNAME);
if (!((x509childNodes != null)
&& (x509childNodes.length > 0))) {
log.debug("I can't");
return null;
}
try {
if (storage == null) {
Object exArgs[] = { Constants._TAG_X509SUBJECTNAME };
KeyResolverException ex =
new KeyResolverException("KeyResolver.needStorageResolver",
exArgs);
log.info("", ex);
throw ex;
}
x509childObject =
new XMLX509SubjectName[x509childNodes.length];
for (int i = 0; i < x509childNodes.length; i++) {
x509childObject[i] =
new XMLX509SubjectName(x509childNodes[i],
BaseURI);
}
Iterator storageIterator = storage.getIterator();
while (storageIterator.hasNext()) {
X509Certificate cert = (X509Certificate)storageIterator.next();
XMLX509SubjectName certSN =
new XMLX509SubjectName(element.getOwnerDocument(), cert);
log.debug("Found Certificate SN: " + certSN.getSubjectName());
for (int i = 0; i < x509childObject.length; i++) {
log.debug("Found Element SN: "
+ x509childObject[i].getSubjectName());
if (certSN.equals(x509childObject[i])) {
log.debug("match !!! ");
return cert;
}
log.debug("no match...");