DataFlex
DataFlex
Verify and Unwrap S/MIME, and get Information about CMS Signature
See more MIME Examples
Demonstrates calling the Verify method to verify and unwrap S/MIME. The MIME is restored to the original structure that it would have originally had prior to signing. The Verify method works with both detached signatures, as well as opaque/attached signatures.Calls LastJsonData to get information about the signature(s) that were verified.
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoMime
Boolean iVerified
Variant vJson
Handle hoJson
Variant vSigningTime
Handle hoSigningTime
Variant vAuthAttrSigningTimeUtctime
Handle hoAuthAttrSigningTimeUtctime
String sIssuerCN
String sSerial
String sStrVal
String sCertSerialNumber
String sCertIssuerCN
String sCertDigestAlgOid
String sCertDigestAlgName
String sContentType
String sMessageDigest
String sSigningAlgOid
String sSigningAlgName
String sAuthAttrContentTypeName
String sAuthAttrContentTypeOid
String sAuthAttrSigningTimeName
String sAuthAttrMessageDigestName
String sAuthAttrMessageDigestDigest
String sAuthAttr1_2_840_113549_1_9_15Der
String sAuthAttr1_3_6_1_4_1_311_16_4Der
Integer i
Integer iCount_i
String sTemp1
Move False To iSuccess
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Get Create (RefClass(cComChilkatMime)) To hoMime
If (Not(IsComObjectCreated(hoMime))) Begin
Send CreateComObject of hoMime
End
// Load the signed MIME from a file...
Get ComLoadMimeFile Of hoMime "qa_data/mime/detached_sig.eml" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoMime To sTemp1
Showln sTemp1
Procedure_Return
End
// Verify the S/MIME and restore the MIME
// to the structure/content it had prior to signing.
Get ComVerify Of hoMime To iVerified
If (iVerified = False) Begin
Get ComLastErrorText Of hoMime To sTemp1
Showln sTemp1
Procedure_Return
End
// Examine the details of what was verified.
Get Create (RefClass(cComChilkatJsonObject)) To hoJson
If (Not(IsComObjectCreated(hoJson))) Begin
Send CreateComObject of hoJson
End
Get pvComObject of hoJson to vJson
Send ComGetLastJsonData To hoMime vJson
Set ComEmitCompact Of hoJson To False
Get ComEmit Of hoJson To sTemp1
Showln sTemp1
// The code to parse the following JSON (i.e. extract desired information) is shown below..
// {
// "pkcs7": {
// "verify": {
// "certs": [
// {
// "issuerCN": "VeriSign Class 1 Public Primary Certification Authority - G3",
// "serial": "0702A21A85B84B659E180A6EE6F5A365"
// },
// {
// "issuerCN": "VeriSign Class 1 Public Primary Certification Authority - G3",
// "serial": "008B5B75568454850B00CFAF3848CEB1A4"
// },
// {
// "issuerCN": "Symantec Class 1 Individual Subscriber CA - G5",
// "serial": "619C55C32FF6BD1A7B7E0330D21C8F3C"
// }
// ],
// "digestAlgorithms": [
// "sha1"
// ],
// "signerInfo": [
// {
// "cert": {
// "serialNumber": "619C55C32FF6BD1A7B7E0330D21C8F3C",
// "issuerCN": "Symantec Class 1 Individual Subscriber CA - G5",
// "digestAlgOid": "1.3.14.3.2.26",
// "digestAlgName": "SHA1"
// },
// "contentType": "1.2.840.113549.1.7.1",
// "signingTime": "160428055000Z",
// "messageDigest": "2hJJVmO/jtaJV5uCKMFzIkRRvtY=",
// "signingAlgOid": "1.2.840.113549.1.1.1",
// "signingAlgName": "RSA-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": "160428055000Z"
// },
// "1.2.840.113549.1.9.4": {
// "name": "messageDigest",
// "digest": "2hJJVmO/jtaJV5uCKMFzIkRRvtY="
// },
// "1.2.840.113549.1.9.15": {
// "der": "MFAwCwYJYIZIAWUDBAECMAoGCCqGSIb3DQMHMA4GCCqGSIb3DQMCAgIAgDANBggqhkiG9w0DAgIBQDAHBgUrDgMCBzANBggqhkiG9w0DAgIBKA=="
// },
// "1.3.6.1.4.1.311.16.4": {
// "der": "MIG7MIG...7fgMw0hyPPA=="
// }
// }
// }
// ]
// }
// }
// }
// Use this online tool to generate parsing code from sample JSON:
// Generate Parsing Code from JSON
Get Create (RefClass(cComChilkatDtObj)) To hoSigningTime
If (Not(IsComObjectCreated(hoSigningTime))) Begin
Send CreateComObject of hoSigningTime
End
Get Create (RefClass(cComChilkatDtObj)) To hoAuthAttrSigningTimeUtctime
If (Not(IsComObjectCreated(hoAuthAttrSigningTimeUtctime))) Begin
Send CreateComObject of hoAuthAttrSigningTimeUtctime
End
Move 0 To i
Get ComSizeOfArray Of hoJson "pkcs7.verify.certs" To iCount_i
While (i < iCount_i)
Set ComI Of hoJson To i
Get ComStringOf Of hoJson "pkcs7.verify.certs[i].issuerCN" To sIssuerCN
Get ComStringOf Of hoJson "pkcs7.verify.certs[i].serial" To sSerial
Move (i + 1) To i
Loop
Move 0 To i
Get ComSizeOfArray Of hoJson "pkcs7.verify.digestAlgorithms" To iCount_i
While (i < iCount_i)
Set ComI Of hoJson To i
Get ComStringOf Of hoJson "pkcs7.verify.digestAlgorithms[i]" To sStrVal
Move (i + 1) To i
Loop
Move 0 To i
Get ComSizeOfArray Of hoJson "pkcs7.verify.signerInfo" To iCount_i
While (i < iCount_i)
Set ComI Of hoJson To i
Get ComStringOf Of hoJson "pkcs7.verify.signerInfo[i].cert.serialNumber" To sCertSerialNumber
Get ComStringOf Of hoJson "pkcs7.verify.signerInfo[i].cert.issuerCN" To sCertIssuerCN
Get ComStringOf Of hoJson "pkcs7.verify.signerInfo[i].cert.digestAlgOid" To sCertDigestAlgOid
Get ComStringOf Of hoJson "pkcs7.verify.signerInfo[i].cert.digestAlgName" To sCertDigestAlgName
Get ComStringOf Of hoJson "pkcs7.verify.signerInfo[i].contentType" To sContentType
Get pvComObject of hoSigningTime to vSigningTime
Get ComDtOf Of hoJson "pkcs7.verify.signerInfo[i].signingTime" False vSigningTime To iSuccess
Get ComStringOf Of hoJson "pkcs7.verify.signerInfo[i].messageDigest" To sMessageDigest
Get ComStringOf Of hoJson "pkcs7.verify.signerInfo[i].signingAlgOid" To sSigningAlgOid
Get ComStringOf Of hoJson "pkcs7.verify.signerInfo[i].signingAlgName" To sSigningAlgName
Get ComStringOf Of hoJson 'pkcs7.verify.signerInfo[i].authAttr."1.2.840.113549.1.9.3".name' To sAuthAttrContentTypeName
Get ComStringOf Of hoJson 'pkcs7.verify.signerInfo[i].authAttr."1.2.840.113549.1.9.3".oid' To sAuthAttrContentTypeOid
Get ComStringOf Of hoJson 'pkcs7.verify.signerInfo[i].authAttr."1.2.840.113549.1.9.5".name' To sAuthAttrSigningTimeName
Get pvComObject of hoAuthAttrSigningTimeUtctime to vAuthAttrSigningTimeUtctime
Get ComDtOf Of hoJson 'pkcs7.verify.signerInfo[i].authAttr."1.2.840.113549.1.9.5".utctime' False vAuthAttrSigningTimeUtctime To iSuccess
Get ComStringOf Of hoJson 'pkcs7.verify.signerInfo[i].authAttr."1.2.840.113549.1.9.4".name' To sAuthAttrMessageDigestName
Get ComStringOf Of hoJson 'pkcs7.verify.signerInfo[i].authAttr."1.2.840.113549.1.9.4".digest' To sAuthAttrMessageDigestDigest
Get ComStringOf Of hoJson 'pkcs7.verify.signerInfo[i].authAttr."1.2.840.113549.1.9.15".der' To sAuthAttr1_2_840_113549_1_9_15Der
Get ComStringOf Of hoJson 'pkcs7.verify.signerInfo[i].authAttr."1.3.6.1.4.1.311.16.4".der' To sAuthAttr1_3_6_1_4_1_311_16_4Der
Move (i + 1) To i
Loop
End_Procedure