Sample code for 30+ languages & platforms
PureBasic

Verify Factura Electronica Chile SII (iso-8859-1)

See more XAdES Examples

Demonstrates how to verify SII XML stored as iso-8859-1 having just a single signature.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkXmlDSig.pb"

Procedure ChilkatExample()

    success.i = 0

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

    ; The signed XML to be verified in this example contains the following:

    ; <?xml version="1.0" encoding="ISO-8859-1"?>
    ; <DTE version="1.0" xmlns="http://www.sii.cl/SiiDte">
    ; <Documento ID="F13T34">
    ; ...
    ; </Documento>
    ; <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
    ; ....
    ; </Signature>
    ; </DTE>

    ; Load the signed XML into sbXml -- telling Chilkat to interpret the bytes as iso-8859-1 
    sbXml.i = CkStringBuilder::ckCreate()
    If sbXml.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkStringBuilder::ckLoadFile(sbXml,"qa_data/xml_dsig/sii_cl/signed1.xml","iso-8859-1")
    If success = 0
        Debug "Failed to load input file."
        CkStringBuilder::ckDispose(sbXml)
        ProcedureReturn
    EndIf

    dsig.i = CkXmlDSig::ckCreate()
    If dsig.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkXmlDSig::ckLoadSignatureSb(dsig,sbXml)
    If success <> 1
        Debug CkXmlDSig::ckLastErrorText(dsig)
        CkStringBuilder::ckDispose(sbXml)
        CkXmlDSig::ckDispose(dsig)
        ProcedureReturn
    EndIf

    bVerifyReferenceDigests.i = 1
    bVerified.i = CkXmlDSig::ckVerifySignature(dsig,bVerifyReferenceDigests)
    If bVerified = 0
        Debug CkXmlDSig::ckLastErrorText(dsig)
        CkStringBuilder::ckDispose(sbXml)
        CkXmlDSig::ckDispose(dsig)
        ProcedureReturn
    EndIf

    Debug "Signature verified = " + Str(bVerified)


    CkStringBuilder::ckDispose(sbXml)
    CkXmlDSig::ckDispose(dsig)


    ProcedureReturn
EndProcedure