Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PureBasic) P7S - Access Signature Information (date/time, certificate used, etc.)Examine a PKCS7 signature (.p7s) and get information about it. Note: This example requires Chilkat v9.5.0.75 or greater.
IncludeFile "CkBinData.pb" IncludeFile "CkJsonObject.pb" IncludeFile "CkDateTime.pb" IncludeFile "CkCrypt2.pb" Procedure ChilkatExample() ; This requires the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. ; First load the .p7s file into a BinData object.. bd.i = CkBinData::ckCreate() If bd.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success.i = CkBinData::ckLoadFile(bd,"qa_data/p7s/sample.p7s") If success <> 1 Debug "Failed to load .p7s file." CkBinData::ckDispose(bd) ProcedureReturn EndIf ; IMPORTANT: This example requires Chilkat v9.5.0.75 or greater. crypt.i = CkCrypt2::ckCreate() If crypt.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; Assuming this is a signature that contains the original data that was signed.. success = CkCrypt2::ckOpaqueVerifyBd(crypt,bd) If success <> 1 Debug CkCrypt2::ckLastErrorText(crypt) CkBinData::ckDispose(bd) CkCrypt2::ckDispose(crypt) ProcedureReturn EndIf ; Examine the LastJsonData after signature verification.. json.i = CkCrypt2::ckLastJsonData(crypt) CkJsonObject::setCkEmitCompact(json, 0) Debug CkJsonObject::ckEmit(json) ; -- ; IMPORTANT: This example requires Chilkat v9.5.0.75 or greater. ; -- ; Sample output... ; Go to http://tools.chilkat.io/jsonParse.cshtml ; and paste the JSON into the online form to generate JSON parsing code. ; { ; "pkcs7": { ; "verify": { ; "digestAlgorithms": [ ; "sha256" ; ], ; "signerInfo": [ ; { ; "cert": { ; "serialNumber": "AAC5FC48C0FD8FBB", ; "issuerCN": "AC ABCDEF RFB v5", ; "issuerDN": "", ; "digestAlgOid": "2.16.840.1.101.3.4.2.1", ; "digestAlgName": "SHA-256" ; }, ; "contentType": "1.2.840.113549.1.7.1", ; "signingTime": "180607195054Z", ; "messageDigest": "trzyxXbZ96z2M4mncyZ7BNMV4yIT92+5sS27Fu64iG8=", ; "signingAlgOid": "1.2.840.113549.1.1.11", ; "signerDigest": "trzyxXbZ96z2M4mncyZ7BNMV4yIT92+5sS27Fu64iG8=" ; }, ; { ; "cert": { ; "serialNumber": "324FB38ABD59723F", ; "issuerCN": "AC ABCDEF RFB v5", ; "issuerDN": "", ; "digestAlgOid": "2.16.840.1.101.3.4.2.1", ; "digestAlgName": "SHA-256" ; }, ; "contentType": "1.2.840.113549.1.7.1", ; "signingTime": "180608182517Z", ; "messageDigest": "trzyxXbZ96z2M4mncyZ7BNMV4yIT92+5sS27Fu64iG8=", ; "signingAlgOid": "1.2.840.113549.1.1.11", ; "signerDigest": "trzyxXbZ96z2M4mncyZ7BNMV4yIT92+5sS27Fu64iG8=" ; } ; ] ; } ; } ; } ; i.i count_i.i strVal.s certSerialNumber.s certIssuerCN.s certIssuerDN.s certDigestAlgOid.s certDigestAlgName.s contentType.s signingTime.s messageDigest.s signingAlgOid.s signerDigest.s dt.i = CkDateTime::ckCreate() If dt.i = 0 Debug "Failed to create object." ProcedureReturn EndIf i = 0 count_i = CkJsonObject::ckSizeOfArray(json,"pkcs7.verify.digestAlgorithms") While i < count_i CkJsonObject::setCkI(json, i) strVal = CkJsonObject::ckStringOf(json,"pkcs7.verify.digestAlgorithms[i]") i = i + 1 Wend i = 0 count_i = CkJsonObject::ckSizeOfArray(json,"pkcs7.verify.signerInfo") While i < count_i CkJsonObject::setCkI(json, i) certSerialNumber = CkJsonObject::ckStringOf(json,"pkcs7.verify.signerInfo[i].cert.serialNumber") certIssuerCN = CkJsonObject::ckStringOf(json,"pkcs7.verify.signerInfo[i].cert.issuerCN") certIssuerDN = CkJsonObject::ckStringOf(json,"pkcs7.verify.signerInfo[i].cert.issuerDN") certDigestAlgOid = CkJsonObject::ckStringOf(json,"pkcs7.verify.signerInfo[i].cert.digestAlgOid") certDigestAlgName = CkJsonObject::ckStringOf(json,"pkcs7.verify.signerInfo[i].cert.digestAlgName") contentType = CkJsonObject::ckStringOf(json,"pkcs7.verify.signerInfo[i].contentType") signingTime = CkJsonObject::ckStringOf(json,"pkcs7.verify.signerInfo[i].signingTime") ; The signingTime isin UTCTime format. ; UTCTime values take the form of either "YYMMDDhhmm[ss]Z" or "YYMMDDhhmm[ss](+|-)hhmm" ; Starting in Chilkat v9.5.0.77, the SetFromTimestamp method auto-recognizes the UTCTime format and parses it correctly. success = CkDateTime::ckSetFromTimestamp(dt,signingTime) ; To get the signingTime in other date/time formats, look at the online reference documentation for CkDateTime. ; There are numerous methods such as GetAsDateTime, GetAsIso8601, GetAsUnixTime, GetAsRfc822, etc. messageDigest = CkJsonObject::ckStringOf(json,"pkcs7.verify.signerInfo[i].messageDigest") signingAlgOid = CkJsonObject::ckStringOf(json,"pkcs7.verify.signerInfo[i].signingAlgOid") signerDigest = CkJsonObject::ckStringOf(json,"pkcs7.verify.signerInfo[i].signerDigest") i = i + 1 Wend CkJsonObject::ckDispose(json) ; println crypt.LastErrorText; Debug "Success." CkBinData::ckDispose(bd) CkCrypt2::ckDispose(crypt) CkDateTime::ckDispose(dt) ProcedureReturn EndProcedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.