Sample code for 30+ languages & platforms
B4X Requires Chilkat v11.0.0+

Verify a CAdES-BES Signature and Examine Signature Contents

See more Digital Signatures Examples

Demonstrates how to validate a .p7m (.p7s) signature and examine the contents of the signature.

Chilkat B4X Downloads

B4X
Dim success As Boolean = False

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

Dim crypt As ChilkatCrypt2
crypt.Initialize("crypt")

Dim outputFile As String = "qa_output/original.xml"
Dim inFile As String = "qa_data/p7m/fattura_signature.xml.p7m"

'  Verify the signature and extract the contained file, which in this case is XML.
success = crypt.VerifyP7M(inFile, outputFile)
If success = False Then
    Log(crypt.LastErrorText)
    Return
End If


Log("Signature validated.")

'  Now let's examine the information about the signature.
Dim json As ChilkatJsonObject
json.Initialize
crypt.GetLastJsonData(json)

json.EmitCompact = False
Log(json.Emit)

'  Here's an example of the information about the signature:
'  {
'    "pkcs7": {
'      "verify": {
'        "certs": [
'          {
'            "issuerCN": "Xyz EU Qualified Certificates CA G1",
'            "serial": "99A28A51AC389999"
'          }
'        ],
'        "useConstructedOctets": true,
'        "digestAlgorithms": [
'          "sha256"
'        ],
'        "signerInfo": [
'          {
'            "cert": {
'              "subjectKeyIdentifier": "5VM4x8AWnXf07yzbXuLtbb0U3yY=",
'              "digestAlgOid": "2.16.840.1.101.3.4.2.1",
'              "digestAlgName": "SHA256"
'            },
'            "signingAlgOid": "1.2.840.113549.1.1.11",
'            "signingAlgName": "RSA-SHA256-PKCSV-1_5",
'            "authAttr": {
'              "1.2.840.113549.1.9.3": {
'                "name": "contentType",
'                "oid": "1.2.840.113549.1.7.1"
'              },
'              "1.2.840.113549.1.9.5": {
'                "name": "signingTime",
'                "utctime": "190901152340Z"
'              },
'              "1.2.840.113549.1.9.4": {
'                "name": "messageDigest",
'                "digest": "y+gd/zAQK33A//HInhaZba7w1fUJleV9AHbP1Ntx6U0="
'              },
'              "1.2.840.113549.1.9.16.2.47": {
'                "name": "signingCertificateV2",
'                "der": "MIH4MI..w4vv0="
'              }
'            }
'          }
'        ]
'      }
'    }
'  }

'  Use this online tool to generate parsing code from sample JSON: 
'  Generate Parsing Code from JSON



Dim authAttrSigningTimeUtctime As ChilkatDtObj
authAttrSigningTimeUtctime.Initialize
Dim issuerCN As String
Dim serial As String
Dim strVal As String
Dim certSubjectKeyIdentifier As String
Dim certDigestAlgOid As String
Dim certDigestAlgName As String
Dim signingAlgOid As String
Dim signingAlgName As String
Dim authAttrContentTypeName As String
Dim authAttrContentTypeOid As String
Dim authAttrSigningTimeName As String
Dim authAttrMessageDigestName As String
Dim authAttrMessageDigestDigest As String
Dim authAttrSigningCertificateV2Name As String
Dim authAttrSigningCertificateV2Der As String

Dim i As Int = 0
Dim count_i As Int = json.SizeOfArray("pkcs7.verify.certs")
Do While i < count_i
    json.I = i
    issuerCN = json.StringOf("pkcs7.verify.certs[i].issuerCN")
    serial = json.StringOf("pkcs7.verify.certs[i].serial")
    i = i + 1
Loop
i = 0
count_i = json.SizeOfArray("pkcs7.verify.digestAlgorithms")
Do While i < count_i
    json.I = i
    strVal = json.StringOf("pkcs7.verify.digestAlgorithms[i]")
    i = i + 1
Loop
i = 0
count_i = json.SizeOfArray("pkcs7.verify.signerInfo")
Do While i < count_i
    json.I = i
    certSubjectKeyIdentifier = json.StringOf("pkcs7.verify.signerInfo[i].cert.subjectKeyIdentifier")
    certDigestAlgOid = json.StringOf("pkcs7.verify.signerInfo[i].cert.digestAlgOid")
    certDigestAlgName = json.StringOf("pkcs7.verify.signerInfo[i].cert.digestAlgName")
    signingAlgOid = json.StringOf("pkcs7.verify.signerInfo[i].signingAlgOid")
    signingAlgName = json.StringOf("pkcs7.verify.signerInfo[i].signingAlgName")
    authAttrContentTypeName = json.StringOf("pkcs7.verify.signerInfo[i].authAttr." & Chr(34) & "1.2.840.113549.1.9.3" & Chr(34) & ".name")
    authAttrContentTypeOid = json.StringOf("pkcs7.verify.signerInfo[i].authAttr." & Chr(34) & "1.2.840.113549.1.9.3" & Chr(34) & ".oid")
    authAttrSigningTimeName = json.StringOf("pkcs7.verify.signerInfo[i].authAttr." & Chr(34) & "1.2.840.113549.1.9.5" & Chr(34) & ".name")
    json.DtOf("pkcs7.verify.signerInfo[i].authAttr." & Chr(34) & "1.2.840.113549.1.9.5" & Chr(34) & ".utctime", False, authAttrSigningTimeUtctime)
    authAttrMessageDigestName = json.StringOf("pkcs7.verify.signerInfo[i].authAttr." & Chr(34) & "1.2.840.113549.1.9.4" & Chr(34) & ".name")
    authAttrMessageDigestDigest = json.StringOf("pkcs7.verify.signerInfo[i].authAttr." & Chr(34) & "1.2.840.113549.1.9.4" & Chr(34) & ".digest")
    authAttrSigningCertificateV2Name = json.StringOf("pkcs7.verify.signerInfo[i].authAttr." & Chr(34) & "1.2.840.113549.1.9.16.2.47" & Chr(34) & ".name")
    authAttrSigningCertificateV2Der = json.StringOf("pkcs7.verify.signerInfo[i].authAttr." & Chr(34) & "1.2.840.113549.1.9.16.2.47" & Chr(34) & ".der")
    i = i + 1
Loop