Sathis,
 I think that particular code is correct, it is strange because the
api, that the transformation and the c14n is using looks like a
pipeline one, but after profiling it I change it to a visitor one, the
problem is that in some parts of the code there are some users as
pipeline that is why I can deprecated the several if instanceof, that
I will love to.
Can you post the sighnature that is giving you the problem with the
code that is making a problem. Also take into account that envelope
and exc-c14n transformation was my base case and the default for all
optimizations, so I'm 98% sure that part is working

Regards,

Raul
On Wed, Aug 6, 2008 at 5:04 PM, Satish Burnwal <[EMAIL PROTECTED]> wrote:
> 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>
>
>

Reply via email to