66import org .apache .xml .security .utils .Constants ;
77import org .w3c .dom .Document ;
88import org .w3c .dom .Element ;
9+ import org .w3c .dom .Node ;
910import org .w3c .dom .NodeList ;
1011
1112import javax .xml .xpath .XPath ;
@@ -22,40 +23,44 @@ public class DSig {
2223
2324 private static final Logger logger = LogManager .getLogger (DSig .class );
2425
25- public static boolean validateSignatures (Document xmlDoc , String certPath , String certAlias , String certPassword ) {
26+ public static String validateSignatures (Document xmlDoc , String certPath , String certAlias , String certPassword ) {
2627 logger .trace ("validateSignatures" );
28+ List <Element > assertions = new ArrayList <Element >();
2729 X509Certificate cert = Keys .loadCertificate (certPath , certAlias , certPassword );
2830
2931 NodeList nodes = findElementsByPath (xmlDoc , "//*[@ID]" );
3032
3133 NodeList signatures = xmlDoc .getElementsByTagNameNS (Constants .SignatureSpecNS , Constants ._TAG_SIGNATURE );
3234 //check the message is signed - security measure
3335 if (signatures .getLength () == 0 ){
34- return false ;
36+ return "" ;
3537 }
3638 for (int i = 0 ; i < signatures .getLength (); i ++) {
3739 Element signedElement = findNodeById (nodes , getSignatureID ((Element ) signatures .item (i )));
40+ assertions .add (signedElement );
3841 if (signedElement == null ) {
39- return false ;
42+ return "" ;
4043 }
4144 signedElement .setIdAttribute ("ID" , true );
4245 try {
4346 XMLSignature signature = new XMLSignature ((Element ) signatures .item (i ), "" );
4447 //verifies the signature algorithm is one expected - security meassure
4548 if (!verifySignatureAlgorithm ((Element ) signatures .item (i ))) {
46- return false ;
49+ return "" ;
4750 }
4851 if (!signature .checkSignatureValue (cert )) {
49- return false ;
52+ return "" ;
5053 }
5154 } catch (Exception e ) {
5255 logger .error ("validateSignatures" , e );
53- return false ;
56+ return "" ;
5457 }
5558 }
56- return true ;
59+ return SamlAssertionUtils . isLogout ( xmlDoc ) ? SamlAssertionUtils . buildXmlLogout ( assertions ) : SamlAssertionUtils . buildXmlLogin ( assertions , xmlDoc ) ;
5760 }
5861
62+
63+
5964 private static boolean verifySignatureAlgorithm (Element elem ) {
6065 logger .trace ("verifySignatureAlgorithm" );
6166 NodeList signatureMethod = elem .getElementsByTagNameNS (Constants .SignatureSpecNS , Constants ._TAG_SIGNATUREMETHOD );
0 commit comments