B4X Requires Chilkat v11.0.0+
B4X
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
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