Sample code for 30+ languages & platforms
DataFlex

Canonicalize XML Fragment

See more XML Digital Signatures Examples

Demonstrates how to canonicalize a fragment of an XML document. The fragment is identified by the element having an Id attribute equal to a specified value. (The Id attribute can have any namespace, and the attribute name is case-insensitive (thus "ID", "Id", "id", etc. match).

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoHttp
    Variant vSbXml
    Handle hoSbXml
    Handle hoCanon
    String sCanonVersion
    Boolean iWithComments
    String sPrefixList
    String sUrl
    String sXmlCanonFrag
    String sTemp1

    Move False To iSuccess

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    Get Create (RefClass(cComChilkatHttp)) To hoHttp
    If (Not(IsComObjectCreated(hoHttp))) Begin
        Send CreateComObject of hoHttp
    End
    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbXml
    If (Not(IsComObjectCreated(hoSbXml))) Begin
        Send CreateComObject of hoSbXml
    End
    Get Create (RefClass(cComChilkatXmlDSig)) To hoCanon
    If (Not(IsComObjectCreated(hoCanon))) Begin
        Send CreateComObject of hoCanon
    End

    // Use exclusive XML canonicalization.
    Move "EXCL_C14N" To sCanonVersion
    Move False To iWithComments
    // The optional inclusive namespaces prefix list if using exclusive canonicalization.
    Move "" To sPrefixList

    Move "https://www.chilkatsoft.com/exampleData/canonicalizeFragmentTest.xml" To sUrl
    Get pvComObject of hoSbXml to vSbXml
    Get ComQuickGetSb Of hoHttp sUrl vSbXml To iSuccess

    // This is the input XML:

    // <?xml version="1.0" encoding="UTF-8"?>
    // <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
    // <SignedInfo>
    //   <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
    //   <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
    //   <Reference URI="#object">
    //     <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
    //     <DigestValue>OPnpF/ZNLDxJ/I+1F3iHhlmSwgo=</DigestValue>
    //   </Reference>
    // </SignedInfo>
    // <SignatureValue>nihUFQg4mDhLgecvhIcKb9Gz8VRTOlw+adiZOBBXgK4JodEe5aFfCqm8WcRIT8GL
    // LXSk8PsUP4//SsKqUBQkpotcAqQAhtz2v9kCWdoUDnAOtFZkd/CnsZ1sge0ndha4
    // 0wWDV+nOWyJxkYgicvB8POYtSmldLLepPGMz+J7/Uws=</SignatureValue>
    // <KeyInfo>
    //   <KeyValue>
    //     <RSAKeyValue>
    //       <Modulus>4IlzOY3Y9fXoh3Y5f06wBbtTg94Pt6vcfcd1KQ0FLm0S36aGJtTSb6pYKfyX7PqC
    //       UQ8wgL6xUJ5GRPEsu9gyz8ZobwfZsGCsvu40CWoT9fcFBZPfXro1Vtlh/xl/yYHm
    //       +Gzqh0Bw76xtLHSfLfpVOrmZdwKmSFKMTvNXOFd0V18=</Modulus>
    //       <Exponent>AQAB</Exponent>
    //     </RSAKeyValue>
    //   </KeyValue>
    // </KeyInfo>
    // <Object Id="object">some text
    //   with spaces and CR-LF.</Object>
    // </Signature>

    // Canonicalize and return the fragment of XML starting at the element where the Id attribute equals "object".
    Get ComGetAsString Of hoSbXml To sTemp1
    Get ComCanonicalizeFragment Of hoCanon sTemp1 "object" sCanonVersion sPrefixList iWithComments To sXmlCanonFrag
    Showln sXmlCanonFrag

    // The output is:
    // 
    // <Object xmlns="http://www.w3.org/2000/09/xmldsig#" Id="object">some text
    //   with spaces and CR-LF.</Object>
    // 


End_Procedure