I am facing a issue with validating the xml signature. I have enveloped transform followed by ex-C14N. I did search xmlsec mail archive but to no success. Then I tried with debugging the xmlsec src code: The Reference object loops through all the configured transforms, the http://www.w3.org/2000/09/xmldsig#enveloped-signature transform returns a (modified, i assume) XMLSignatureInput, then we run through the C14N and it returns null!
The block of code is in CanonicalizerBase.java in method engineCanonicalizeXPathNodeSetInternal. this.canonicalizeXPathNodeSet(doc,doc); System.out.println("canonicalizeXPathNodeSet is ok i guess..."); this._writer.close(); if (this._writer instanceof ByteArrayOutputStream) { byte [] sol=((ByteArrayOutputStream)this._writer).toByteArray(); if (reset) { ((ByteArrayOutputStream)this._writer).reset(); } return sol; } else if (this._writer instanceof UnsyncByteArrayOutputStream) { byte []result=((UnsyncByteArrayOutputStream)this._writer).toByteArray(); if (reset) { ((UnsyncByteArrayOutputStream)this._writer).reset(); } return result; } return null; <------ returns this null! The _writer instance in this case was created in Reference.java method calculateDigest. Thus the ByteArrayOutputStreams of CanonicalizeBase do not match with the BufferedOutputStreams of Reference class, causing it to return null. MessageDigestAlgorithm mda = this.getMessageDigestAlgorithm(); mda.reset(); DigesterOutputStream diOs=new DigesterOutputStream(mda); OutputStream os=new UnsyncBufferedOutputStream(diOs); <--- not check via instanceof in CanonicalizerBase XMLSignatureInput output=this.dereferenceURIandPerformTransforms(os); output.updateOutputStream(os); os.flush(); Pls help me in resolving this. The signedInfo element is this: <ds:SignedInfo> <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> <ds:Reference URI="#id-23761097"> <ds:Transforms> <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </ds:Transforms> <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <ds:DigestValue>SVUf+cO2NKZpSOHHhPfQjLQNhiE=</ds:DigestValue> </ds:Reference> </ds:SignedInfo>