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
(DataFlex) Extract PKCS7 Signature DigestDemonstrates how to extract a signature digest from a PKCS7 signature.
Use ChilkatAx-win32.pkg Procedure Test Handle hoCrypt String sP7mFile String sOutPath Boolean iVerified Variant vPkcs7Data Handle hoPkcs7Data Boolean iSuccess Handle hoSbBase64 String sHexStr Boolean iBHaveBase64 Integer i String sDigest String sTemp1 Integer iTemp1 Boolean bTemp1 // This example requires the Chilkat Crypt API to have been previously unlocked. // See Unlock Chilkat Crypt for sample code. Get Create (RefClass(cComChilkatCrypt2)) To hoCrypt If (Not(IsComObjectCreated(hoCrypt))) Begin Send CreateComObject of hoCrypt End Move "qa_data/p7m/test.pdf.p7m" To sP7mFile Move "qa_output/test.pdf" To sOutPath // First let's see if this .p7m signature can be verified, and the original file extracted. Get ComVerifyP7M Of hoCrypt sP7mFile sOutPath To iVerified If (iVerified <> True) Begin Get ComLastErrorText Of hoCrypt To sTemp1 Showln sTemp1 Procedure_Return End // How many signers? // (The NumSignerCerts property is set whenever a signature is verified.) Get ComNumSignerCerts Of hoCrypt To iTemp1 Showln "Num Signers: " iTemp1 // Load the .p7m into memory... Get Create (RefClass(cComChilkatBinData)) To hoPkcs7Data If (Not(IsComObjectCreated(hoPkcs7Data))) Begin Send CreateComObject of hoPkcs7Data End Get ComLoadFile Of hoPkcs7Data sP7mFile To iSuccess // Check to see if this .p7m contains the binary bytes, or if it's // already base64 encoded. Get the 1st two bytes. If the first two // bytes are the us-ascii values "MI", then we have base64. Get Create (RefClass(cComChilkatStringBuilder)) To hoSbBase64 If (Not(IsComObjectCreated(hoSbBase64))) Begin Send CreateComObject of hoSbBase64 End Get ComGetEncodedChunk Of hoPkcs7Data 0 2 "hex" To sHexStr Get ComAppend Of hoSbBase64 sHexStr To iSuccess Move False To iBHaveBase64 Get ComContentsEqual Of hoSbBase64 "4D49" True To bTemp1 If (bTemp1 = True) Begin Move True To iBHaveBase64 Send ComClear To hoSbBase64 Get pvComObject of hoPkcs7Data to vPkcs7Data Get ComAppendBd Of hoSbBase64 vPkcs7Data "utf-8" 0 0 To iSuccess End // Get each signer's signature digest. Set ComEncodingMode Of hoCrypt To "base64" Move 0 To i While (i < (ComNumSignerCerts(hoCrypt))) If (iBHaveBase64) Begin Get ComGetAsString Of hoSbBase64 To sTemp1 Get ComPkcs7ExtractDigest Of hoCrypt i sTemp1 To sDigest End Else Begin Get ComGetEncoded Of hoPkcs7Data "base64" To sTemp1 Get ComPkcs7ExtractDigest Of hoCrypt i sTemp1 To sDigest End Get ComLastMethodSuccess Of hoCrypt To bTemp1 If (bTemp1 <> True) Begin Get ComLastErrorText Of hoCrypt To sTemp1 Showln sTemp1 Procedure_Return End Showln "Signer " (i + 1) " digest = " sDigest Move (i + 1) To i Loop End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.