in proxy/core/src/main/java/com/amazon/aws/pix/core/xml/XmlSigner.java [101:136]
public boolean verify(@NonNull InputStream xml) {
try {
Document document = getDocument(xml);
Node signatureNode = getNodeByTagNameNS(document, XMLSignature.XMLNS, "Signature");
if (signatureNode == null) {
log.error("No Signature found!");
return false;
}
XMLSignatureFactory signatureFactory = XMLSignatureFactory.getInstance();
DOMValidateContext validateContext = getValidateContext(signatureFactory, signatureNode);
XMLSignature signature = signatureFactory.unmarshalXMLSignature(validateContext);
boolean valid = signature.validate(validateContext);
if (!valid) {
StringBuilder error = new StringBuilder();
error.append("Signature failed core validation!").append(System.lineSeparator());
boolean validStatus = signature.getSignatureValue().validate(validateContext);
error.append("signature validation status: ").append(validStatus).append(System.lineSeparator());
if (!validStatus) {
Iterator<Reference> referenceIterator = signature.getSignedInfo().getReferences().iterator();
for (int i = 0; referenceIterator.hasNext(); i++) {
error.append("ref[").append(i).append("] validity status: ").append(referenceIterator.next().validate(validateContext)).append(System.lineSeparator());
}
log.error(error.toString());
}
}
return valid;
} catch (Exception e) {
log.error("failed to verify signature", e);
return false;
}
}