I don't understand your question.  If you are signing an XML file, you 
have to create the signature node first:

        public static Element signAssertion(Element assertion, Map cred)
                        throws Exception {
                Document doc = assertion.getOwnerDocument();
                // somehow the ID attribute is not yet really in the doc
                // so we regsiter the id of interest so the Resolver 
called by sign can
                // find it
                String assertionId = 
assertion.getAttributeNode("ID").toString()
                                .substring(4, 37);
                IdResolver.registerElementById(assertion, assertionId);

                XMLSignature sig = new XMLSignature(doc, "",
                                XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA1,
 Canonicalizer.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
                assertion.insertBefore(sig.getElement(), 
assertion.getFirstChild());

                // create the transforms object for the Document/Reference
                Transforms transforms = new Transforms(doc);

                // First we have to strip away the signature element (it's 
not part of
                // the signature calculations). The enveloped transform 
can be used.
 transforms.addTransform(Transforms.TRANSFORM_ENVELOPED_SIGNATURE);
                // Part of the signature element needs to be 
canonicalized. It is a kind
                // of normalizing algorithm for XML. For more information 
please take a
                // look at the W3C XML Digital Signature webpage.
                InclusiveNamespaces incNS = new InclusiveNamespaces(doc,
                                "ds saml xenc xs");

 transforms.addTransform(Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS,
                                incNS.getElement());

                // Add the above Document/Reference
                sig.addDocument("#" + assertionId, transforms,
                                Constants.ALGO_ID_DIGEST_SHA1);

                Key privKey = (Key) cred.get("privateKey");
                sig.sign(privKey);

                return assertion;
        }

Notice that sig.addDocument is called before the sign()

Not sure if this helps...

Ed




Anais <[EMAIL PROTECTED]> 
08/11/2008 10:26 AM
Please respond to
security-dev@xml.apache.org


To
security-dev@xml.apache.org
cc

Subject
how sign an xml file ?







Hi,

I'm a newbie in xml signature. I have look at the example : templatesign 
in
order to sign a xml file with a key in a PEM file but i have the error :
could not find <signature> node
I don't undestand why a <signature> node is requiered because my first 
file
can't have this node.
In the future i would like to make multiple signature and sign pdf files.
 
Thanks
-- 
View this message in context: 
http://www.nabble.com/how-sign-an-xml-file---tp18926885p18926885.html
Sent from the Apache XML - Security - Dev mailing list archive at 
Nabble.com.


Reply via email to