3434import java .io .IOException ;
3535import java .security .InvalidAlgorithmParameterException ;
3636import java .security .NoSuchAlgorithmException ;
37- import java .security .NoSuchProviderException ;
3837import java .security .PrivateKey ;
3938import java .security .cert .X509Certificate ;
40- import java .util .ArrayList ;
4139import java .util .Collections ;
42- import java .util .List ;
4340
4441public class XMLSigner {
4542
@@ -48,36 +45,28 @@ public static Document signXML(
4845 String referenceID ,
4946 X509Certificate certificate ,
5047 PrivateKey privateKey
51- ) throws ParserConfigurationException , NoSuchAlgorithmException , XMLSignatureException , InvalidAlgorithmParameterException , MarshalException , IOException , SAXException {
48+ ) throws NoSuchAlgorithmException , InvalidAlgorithmParameterException , XMLSignatureException , MarshalException , IOException , SAXException , ParserConfigurationException {
5249 Document document = XmlSignatureHelper .convertStringToXMLDocument (text );
5350 return signXML (document , referenceID , certificate , privateKey );
5451 }
5552
5653 public static Document signXML (
57- Document copyDocument ,
54+ Document document ,
5855 String referenceID ,
5956 X509Certificate certificate ,
6057 PrivateKey privateKey
6158 ) throws InvalidAlgorithmParameterException , NoSuchAlgorithmException , MarshalException , XMLSignatureException , ParserConfigurationException {
62- // Document copyDocument = XMLUtils.cloneDocument(document);
63-
64- addUBLExtensions (copyDocument );
65- addUBLExtension (copyDocument );
66- Node nodeExtensionContent = addExtensionContent (copyDocument );
67-
68- XMLSignatureFactory signatureFactory ;
69- // Try to install the Santuario Provider - fall back to the JDK provider if this does
70- // not work
71- try {
72- signatureFactory = XMLSignatureFactory .getInstance ("DOM" , "ApacheXMLDSig" );
73- } catch (NoSuchProviderException ex ) {
74- signatureFactory = XMLSignatureFactory .getInstance ("DOM" );
75- }
59+ addUBLExtensions (document );
60+ addUBLExtension (document );
61+ Node nodeExtensionContent = addExtensionContent (document );
7662
77- DOMSignContext signContext = new DOMSignContext (privateKey , copyDocument .getDocumentElement ());
63+ // Start the signing process
64+ DOMSignContext signContext = new DOMSignContext (privateKey , document .getDocumentElement ());
7865 signContext .setDefaultNamespacePrefix ("ds" );
7966 signContext .setParent (nodeExtensionContent );
8067
68+ XMLSignatureFactory signatureFactory = XMLSignatureFactory .getInstance ("DOM" );
69+
8170 Reference reference = signatureFactory .newReference ("" ,
8271 signatureFactory .newDigestMethod (DigestMethod .SHA1 , null ),
8372 Collections .singletonList (signatureFactory .newTransform (Transform .ENVELOPED , (TransformParameterSpec ) null )), null , null );
@@ -86,25 +75,14 @@ public static Document signXML(
8675 signatureFactory .newCanonicalizationMethod (CanonicalizationMethod .INCLUSIVE , (C14NMethodParameterSpec ) null ),
8776 signatureFactory .newSignatureMethod (SignatureMethod .RSA_SHA1 , null ), Collections .singletonList (reference ));
8877
89- // Certificate
90- List <X509Certificate > x509Content = new ArrayList <>();
91- x509Content .add (certificate );
92-
9378 KeyInfoFactory keyInfoFactory = signatureFactory .getKeyInfoFactory ();
94- X509Data xdata = keyInfoFactory .newX509Data (x509Content );
79+ X509Data xdata = keyInfoFactory .newX509Data (Collections . singletonList ( certificate ) );
9580 KeyInfo keyInfo = keyInfoFactory .newKeyInfo (Collections .singletonList (xdata ));
9681
97- // Sign
98- XMLSignature signature = signatureFactory .newXMLSignature (signedInfo , keyInfo );
82+ XMLSignature signature = signatureFactory .newXMLSignature (signedInfo , keyInfo , null , referenceID , null );
9983 signature .sign (signContext );
10084
101- Element elementParent = (Element ) signContext .getParent ();
102- if ((referenceID != null ) && (elementParent .getElementsByTagName ("ds:Signature" ) != null )) {
103- Element elementSignature = (Element ) elementParent .getElementsByTagName ("ds:Signature" ).item (0 );
104- elementSignature .setAttribute ("Id" , referenceID );
105- }
106-
107- return copyDocument ;
85+ return document ;
10886 }
10987
11088 private static void addUBLExtensions (Document document ) {
0 commit comments