Sample code for 30+ languages & platforms
PureBasic

Extract XML from FatturaPA .p7m

See more Digital Signatures Examples

Demonstrates how to verify the signature and extract the XML from a FatturaPA .p7m file.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkBinData.pb"
IncludeFile "CkXml.pb"
IncludeFile "CkCrypt2.pb"

Procedure ChilkatExample()

    success.i = 0

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

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

    success = CkBinData::ckLoadFile(bd,"qa_data/p7m/IT01879020517_abc.xml.p7m")
    If success <> 1
        Debug "Failed to load the .p7m file"
        CkBinData::ckDispose(bd)
        ProcedureReturn
    EndIf

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

    ; Verify and extrct the payload contained within the .p7m.
    ; In this case, the payload is the FatturaPA XML.
    ; If successful, the resulting bd will contain only the XML.
    bVerified.i = CkCrypt2::ckOpaqueVerifyBd(crypt,bd)
    If bVerified <> 1
        Debug CkCrypt2::ckLastErrorText(crypt)
        Debug "Failed to extract and verify."
        CkBinData::ckDispose(bd)
        CkCrypt2::ckDispose(crypt)
        ProcedureReturn
    EndIf

    ; Save the XML to a file.
    CkBinData::ckWriteFile(bd,"qa_output/zIT01879020517_abc.xml")

    ; Alternatively, load into an XML object and emit.
    xml.i = CkXml::ckCreate()
    If xml.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkXml::ckLoadXml(xml,CkBinData::ckGetString(bd,"utf-8"))

    Debug CkXml::ckGetXml(xml)


    CkBinData::ckDispose(bd)
    CkCrypt2::ckDispose(crypt)
    CkXml::ckDispose(xml)


    ProcedureReturn
EndProcedure