Sample code for 30+ languages & platforms
PureBasic

Example: Crypt2.GetSignedAttributes method

Demonstrates how to call the GetSignedAttributes method.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkBinData.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkCrypt2.pb"

Procedure ChilkatExample()

    success.i = 0

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

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

    success = CkBinData::ckLoadFile(bdPkcs7,"qa_data/cades/CAdES-T/Signature-C-T-1.p7m")
    If success = 0
        Debug CkBinData::ckLastErrorText(bdPkcs7)
        CkCrypt2::ckDispose(crypt)
        CkBinData::ckDispose(bdPkcs7)
        ProcedureReturn
    EndIf

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

    CkJsonObject::setCkEmitCompact(json, 0)

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

    i.i = 0
    tryNext.i = 1
    While tryNext
        If CkCrypt2::ckGetSignedAttributes(crypt,i,bdPkcs7,sbJson) = 1
            CkJsonObject::ckLoadSb(json,sbJson)
            Debug Str(i) + ": "
            Debug CkJsonObject::ckEmit(json)
        Else
            tryNext = 0
        EndIf

        i = i + 1
    Wend

    ; Sample output:

    ; 0: 
    ; {
    ;   "signedAttributes": [
    ;     {
    ;       "oid": "1.2.840.113549.1.9.3",
    ;       "name": "Content Type"
    ;     },
    ;     {
    ;       "oid": "1.2.840.113549.1.9.5",
    ;       "name": "Signing Time"
    ;     },
    ;     {
    ;       "oid": "1.2.840.113549.1.9.4",
    ;       "name": "Message Digest"
    ;     },
    ;     {
    ;       "oid": "1.2.840.113549.1.9.16.2.47",
    ;       "name": "Signing Certificate V2"
    ;     }
    ;   ]
    ; }


    CkCrypt2::ckDispose(crypt)
    CkBinData::ckDispose(bdPkcs7)
    CkJsonObject::ckDispose(json)
    CkStringBuilder::ckDispose(sbJson)


    ProcedureReturn
EndProcedure