<div dir="ltr">It does not work when the SAML document is not referring to any DTD.  In my case, I receive the following exception when I call the CheckSignature method :<div><br></div><div><div>System.Security.Cryptography.CryptographicException: Malformed reference object: [referenceId]</div>
<div>  at System.Security.Cryptography.Xml.SignedXml.GetReferenceHash (System.Security.Cryptography.Xml.Reference r, Boolean check_hmac) [0x00000] in <filename unknown>:0</div><div>  at System.Security.Cryptography.Xml.SignedXml.CheckReferenceIntegrity (System.Collections.ArrayList referenceList) [0x00000] in <filename unknown>:0</div>
<div>  at System.Security.Cryptography.Xml.SignedXml.CheckSignatureInternal (System.Security.Cryptography.AsymmetricAlgorithm key) [0x00000] in <filename unknown>:0</div><div>  at System.Security.Cryptography.Xml.SignedXml.CheckSignature (System.Security.Cryptography.AsymmetricAlgorithm key) [0x00000] in <filename unknown>:0</div>
<div>  at TestSAML.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0</div><div class="gmail_extra"><br></div><div class="gmail_extra">The same code works in .NET and it does work if I modify the GetIdElement method to check for "ID".</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">So in your opinion, I should create a class that derives from SignedXml and override GetIdElement?</div><div class="gmail_extra"><br></div><div class="gmail_extra">
It does fix the problem for me. But wouldn't it be better to modify SignedXml.GetIdElement() to behave more like .NET so that other users don't encounter the same problem?</div><div class="gmail_extra"><br></div><div class="gmail_extra">
Thanks,</div><div class="gmail_extra"><br></div><div class="gmail_extra">Jonathan<br><br><div class="gmail_quote">On Tue, Jul 16, 2013 at 10:24 AM, Atsushi Eno <span dir="ltr"><<a href="mailto:atsushieno@veritas-vos-liberabit.com" target="_blank">atsushieno@veritas-vos-liberabit.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Whenever SAML document instance refers to its schema or DTD that will validate "ID" attribute as expected, since SignedXml internally uses XmlDocument.GetElementById () which is expected to collect "IDs" where "IDs" means a validated ID by XmlValidatingReader or any XmlReader that has XmlReaderSettings to consider XmlSchema or DTD. Hence that does not cause any problem for SAML.<br>

<br>
(Also note that SignedXml implementation could override SignedXml.GetIdElement(). Mono's WCF implementation makes use of it to support WS-Security ID attribute.)<br>
<br>
Atsushi Eno<br>
<br>
Jonathan Gagnon wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="im">
This is true for the signature, but not true for SAML assertions, where ids are defined as "ID" :<br>
<br>
<a href="http://schemas.stylusstudio.com/saml/nea261b70/complexType_AssertionType.html" target="_blank">http://schemas.stylusstudio.<u></u>com/saml/nea261b70/<u></u>complexType_AssertionType.html</a><br>
<br>
I don't know in which case we would need "id" in lowercase, but since .NET supports it, there is probably a valid reason for it too.<br>
<br></div><div class="im">
*Jonathan Gagnon*<br>
Responsable des architectures systèmes<br>
600, boulevard Armand-Frappier, bureau 200<br>
Laval (Québec) H7V 4B4<br>
Canada<br>
T : <a href="tel:450-662-6101" value="+14506626101" target="_blank">450-662-6101</a> poste 234<br>
<<a href="http://www.croesus.com" target="_blank">http://www.croesus.com</a>><br>
<<a href="http://www.facebook.com/pages/Croesus-Finansoft/345020305606240" target="_blank">http://www.facebook.com/<u></u>pages/Croesus-Finansoft/<u></u>345020305606240</a>><<a href="http://www.linkedin.com/company/croesus-finansoft?trk=hb_tab_compy_id_26141" target="_blank">http://www.<u></u>linkedin.com/company/croesus-<u></u>finansoft?trk=hb_tab_compy_id_<u></u>26141</a>><<a href="https://twitter.com/CroesusFin" target="_blank">https://twitter.com/<u></u>CroesusFin</a>><br>

<br>
<br>
<br></div><div><div class="h5">
On Tue, Jul 16, 2013 at 2:30 AM, Atsushi Eno <<a href="mailto:atsushieno@veritas-vos-liberabit.com" target="_blank">atsushieno@veritas-vos-<u></u>liberabit.com</a> <mailto:<a href="mailto:atsushieno@veritas-vos-liberabit.com" target="_blank">atsushieno@veritas-<u></u>vos-liberabit.com</a>>> wrote:<br>

<br>
    W3C XML Signature specification explicitly "Id" as the valid<br>
    attribute name for referencing an element, by its XML Schema and DTD:<br>
    <a href="http://www.w3.org/TR/xmldsig-core/#sec-Signature" target="_blank">http://www.w3.org/TR/xmldsig-<u></u>core/#sec-Signature</a><br>
    <a href="http://www.w3.org/TR/xmldsig-core/#sec-SignatureValue" target="_blank">http://www.w3.org/TR/xmldsig-<u></u>core/#sec-SignatureValue</a><br>
    <a href="http://www.w3.org/TR/xmldsig-core/#sec-SignedInfo" target="_blank">http://www.w3.org/TR/xmldsig-<u></u>core/#sec-SignedInfo</a><br>
    <a href="http://www.w3.org/TR/xmldsig-core/#sec-Reference" target="_blank">http://www.w3.org/TR/xmldsig-<u></u>core/#sec-Reference</a><br>
    <a href="http://www.w3.org/TR/xmldsig-core/#sec-KeyInfo" target="_blank">http://www.w3.org/TR/xmldsig-<u></u>core/#sec-KeyInfo</a><br>
    <a href="http://www.w3.org/TR/xmldsig-core/#sec-Object" target="_blank">http://www.w3.org/TR/xmldsig-<u></u>core/#sec-Object</a><br>
    <a href="http://www.w3.org/TR/xmldsig-core/#sec-Manifest" target="_blank">http://www.w3.org/TR/xmldsig-<u></u>core/#sec-Manifest</a><br>
    <a href="http://www.w3.org/TR/xmldsig-core/#sec-SignatureProperties" target="_blank">http://www.w3.org/TR/xmldsig-<u></u>core/#sec-SignatureProperties</a><br>
<br>
    If Microsoft treats "id" or "ID" attributes as if they were ID<br>
    (and not "iD" ?), they will have to fix their bug.<br>
<br>
    Atsushi Eno<br>
<br>
    (2013年07月12日 23:58), Jonathan Gagnon wrote:<br>
<br>
        I have encountered a bug similar to 4938<br>
        <<a href="https://bugzilla.xamarin.com/show_bug.cgi?id=4938" target="_blank">https://bugzilla.xamarin.com/<u></u>show_bug.cgi?id=4938</a>>.<br>
<br>
<br>
        My problem is that mono does not find the reference id because<br>
        the id is in uppercase ('ID' instead of 'Id'). This works<br>
        correctly on .NET.<br>
<br>
        As stated in the bug description, the problem is in the<br>
        SignedXml class, GetIdElement method.<br>
<br>
        I wrote a very simple patch that fixes the problem by looking<br>
        for "id" and "ID". Should I do a pull request with that fix?<br>
<br>
        *Jonathan Gagnon*<br>
<br>
        Responsable des architectures systèmes<br>
        600, boulevard Armand-Frappier, bureau 200<br>
        Laval (Québec) H7V 4B4<br>
        Canada<br></div></div>
        T : <a href="tel:450-662-6101" value="+14506626101" target="_blank">450-662-6101</a> <tel:<a href="tel:450-662-6101" value="+14506626101" target="_blank">450-662-6101</a>> poste 234<div class="im"><br>
        <<a href="http://www.croesus.com" target="_blank">http://www.croesus.com</a>><br>
        <<a href="http://www.facebook.com/pages/Croesus-Finansoft/345020305606240" target="_blank">http://www.facebook.com/<u></u>pages/Croesus-Finansoft/<u></u>345020305606240</a>><<a href="http://www.linkedin.com/company/croesus-finansoft?trk=hb_tab_compy_id_26141" target="_blank">http://www.<u></u>linkedin.com/company/croesus-<u></u>finansoft?trk=hb_tab_compy_id_<u></u>26141</a>><<a href="https://twitter.com/CroesusFin" target="_blank">https://twitter.com/<u></u>CroesusFin</a>><br>

<br>
<br>
<br>
        ______________________________<u></u>_________________<br>
        Mono-devel-list mailing list<br>
        <a href="mailto:Mono-devel-list@lists.ximian.com" target="_blank">Mono-devel-list@lists.ximian.<u></u>com</a><br></div>
        <mailto:<a href="mailto:Mono-devel-list@lists.ximian.com" target="_blank">Mono-devel-list@lists.<u></u>ximian.com</a>><br>
        <a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/<u></u>mailman/listinfo/mono-devel-<u></u>list</a><br>
<br>
<br>
<br>
</blockquote>
<br>
</blockquote></div><br></div></div></div>