Re: Interop and c14n(x) != c14n(c14n(x))

merlin <[email protected]> Tue, 28 May 2002 14:40:29 +0100
Newsgroups gmane.ietf.xmldsig
Message-ID <[email protected]>
Hi Christian,

r/[email protected]/2002.05.24/21:47:22
>--On Freitag, 24. Mai 2002 18:47 +0100 merlin <[email protected]> wrote:
>> If you want a detailed discussion of the disconnect between
>> the XPath info set concept of the namespace axis and DOM,
>> look back at some of the threads from one or two years ago.
>> I know I contributed my confusion to some of them.
>
>The only thing I've seen was something like this:
>
><http://lists.w3.org/Archives/Public/w3c-ietf-xmldsig/2000OctDec/0036.html>

That's probably one of the discussions..

>Would it be possible that you create some obfuscated nodesets in a 
>signature to have a good test vector? I mean canonicalizing a node set 
>which omits xmlns:*, xmlns and xml:* attributes in both element which are 
>part of the node set and elements which are not included in the node set.
>
>That would be VERY nice. In all other test vectors I use for unit testing 
>and interop, I don't have such esoteric node sets.

Sure, I'll try sending along something.

>It's not that important, just an idea. If you take this fragment and you 
>take all nodes but the notIncluded element into the node set:
>
><included xml:foo="bar" xml:lang="de">
><notIncluded>
><included>
></included>
></notIncluded>
></included>
>
>Then Canonical XML produces the following octet stream:
>
><included xml:foo="bar" xml:lang="de">
>
><included xml:foo="bar" xml:lang="de">
></included>
>
></included>
>
>If you canonicalize this octet stream again, you get
>
><included xml:foo="bar" xml:lang="de">
>
><included>
></included>
>
></included>

That's not correct; repeated xml:* attributes are not suppressed,
they are emitted at every element that defines them.

>That was what I wanted to express with "c14n(node set X) != c14n(c14n(node 
>set X))"
>
>But I see that this is not only the case for the xml:* attributes but also 
>leading and trailing whitespace which is outside the "new" document element 
>after c14n. 

Whitespace is probably the best example; other examples that (now)
come to mind would be canonicalizing multiple disjoint elements,
node sets that omit parts of the namespace axis, etc.

Merlin