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
(C) Extract PKCS7 Signature DigestDemonstrates how to extract a signature digest from a PKCS7 signature.
#include <C_CkCrypt2.h> #include <C_CkBinData.h> #include <C_CkStringBuilder.h> void ChilkatSample(void) { HCkCrypt2 crypt; const char *p7mFile; const char *outPath; BOOL verified; HCkBinData pkcs7Data; HCkStringBuilder sbBase64; const char *hexStr; BOOL bHaveBase64; int i; const char *digest; // This example requires the Chilkat Crypt API to have been previously unlocked. // See Unlock Chilkat Crypt for sample code. crypt = CkCrypt2_Create(); p7mFile = "qa_data/p7m/test.pdf.p7m"; outPath = "qa_output/test.pdf"; // First let's see if this .p7m signature can be verified, and the original file extracted. verified = CkCrypt2_VerifyP7M(crypt,p7mFile,outPath); if (verified != TRUE) { printf("%s\n",CkCrypt2_lastErrorText(crypt)); CkCrypt2_Dispose(crypt); return; } // How many signers? // (The NumSignerCerts property is set whenever a signature is verified.) printf("Num Signers: %d\n",CkCrypt2_getNumSignerCerts(crypt)); // Load the .p7m into memory... pkcs7Data = CkBinData_Create(); CkBinData_LoadFile(pkcs7Data,p7mFile); // 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. sbBase64 = CkStringBuilder_Create(); hexStr = CkBinData_getEncodedChunk(pkcs7Data,0,2,"hex"); CkStringBuilder_Append(sbBase64,hexStr); bHaveBase64 = FALSE; if (CkStringBuilder_ContentsEqual(sbBase64,"4D49",TRUE) == TRUE) { bHaveBase64 = TRUE; CkStringBuilder_Clear(sbBase64); CkStringBuilder_AppendBd(sbBase64,pkcs7Data,"utf-8",0,0); } // Get each signer's signature digest. CkCrypt2_putEncodingMode(crypt,"base64"); i = 0; while (i < CkCrypt2_getNumSignerCerts(crypt)) { if (bHaveBase64) { digest = CkCrypt2_pkcs7ExtractDigest(crypt,i,CkStringBuilder_getAsString(sbBase64)); } else { digest = CkCrypt2_pkcs7ExtractDigest(crypt,i,CkBinData_getEncoded(pkcs7Data,"base64")); } if (CkCrypt2_getLastMethodSuccess(crypt) != TRUE) { printf("%s\n",CkCrypt2_lastErrorText(crypt)); CkCrypt2_Dispose(crypt); CkBinData_Dispose(pkcs7Data); CkStringBuilder_Dispose(sbBase64); return; } printf("Signer %d digest = %s\n",i + 1,digest); i = i + 1; } CkCrypt2_Dispose(crypt); CkBinData_Dispose(pkcs7Data); CkStringBuilder_Dispose(sbBase64); } |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.