in ws-security-dom/src/main/java/org/apache/wss4j/dom/processor/SignatureProcessor.java [694:764]
private void checkBSPCompliance(
XMLSignature xmlSignature,
BSPEnforcer bspEnforcer
) throws WSSecurityException {
// Check for Manifests
for (Object object : xmlSignature.getObjects()) {
if (object instanceof XMLObject) {
XMLObject xmlObject = (XMLObject)object;
for (Object xmlStructure : xmlObject.getContent()) {
if (xmlStructure instanceof Manifest) {
bspEnforcer.handleBSPRule(BSPRule.R5403);
}
}
}
}
// Check the c14n algorithm
String c14nMethod =
xmlSignature.getSignedInfo().getCanonicalizationMethod().getAlgorithm();
if (!WSConstants.C14N_EXCL_OMIT_COMMENTS.equals(c14nMethod)) {
bspEnforcer.handleBSPRule(BSPRule.R5404);
}
// Not allowed HMAC OutputLength
AlgorithmParameterSpec parameterSpec =
xmlSignature.getSignedInfo().getSignatureMethod().getParameterSpec();
if (parameterSpec instanceof HMACParameterSpec) {
bspEnforcer.handleBSPRule(BSPRule.R5401);
}
// Must have exclusive C14N without comments
parameterSpec =
xmlSignature.getSignedInfo().getCanonicalizationMethod().getParameterSpec();
if (parameterSpec != null && !(parameterSpec instanceof ExcC14NParameterSpec)) {
bspEnforcer.handleBSPRule(BSPRule.R5404);
}
// Check References
for (Object refObject : xmlSignature.getSignedInfo().getReferences()) {
Reference reference = (Reference)refObject;
if (reference.getTransforms().isEmpty()) {
bspEnforcer.handleBSPRule(BSPRule.R5416);
}
for (int i = 0; i < reference.getTransforms().size(); i++) {
Transform transform = (Transform)reference.getTransforms().get(i);
String algorithm = transform.getAlgorithm();
if (!(WSConstants.C14N_EXCL_OMIT_COMMENTS.equals(algorithm)
|| STRTransform.TRANSFORM_URI.equals(algorithm)
|| WSConstants.NS_XMLDSIG_FILTER2.equals(algorithm)
|| WSConstants.NS_XMLDSIG_ENVELOPED_SIGNATURE.equals(algorithm)
|| WSConstants.SWA_ATTACHMENT_COMPLETE_SIG_TRANS.equals(algorithm)
|| WSConstants.SWA_ATTACHMENT_CONTENT_SIG_TRANS.equals(algorithm))) {
bspEnforcer.handleBSPRule(BSPRule.R5423);
}
if (i == (reference.getTransforms().size() - 1)
&& !(WSConstants.C14N_EXCL_OMIT_COMMENTS.equals(algorithm)
|| STRTransform.TRANSFORM_URI.equals(algorithm)
|| WSConstants.SWA_ATTACHMENT_COMPLETE_SIG_TRANS.equals(algorithm)
|| WSConstants.SWA_ATTACHMENT_CONTENT_SIG_TRANS.equals(algorithm))) {
bspEnforcer.handleBSPRule(BSPRule.R5412);
}
if (WSConstants.C14N_EXCL_OMIT_COMMENTS.equals(algorithm)) {
parameterSpec = transform.getParameterSpec();
if (parameterSpec != null && !(parameterSpec instanceof ExcC14NParameterSpec)) {
bspEnforcer.handleBSPRule(BSPRule.R5407);
}
}
}
}
}