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
(Visual FoxPro) Sign Manifest File to Generate a Passbook .pkpass fileDemonstrates how to create a Passbook .pkpass archive by creating a signature of a manifest file and then zipping to a .pkpass archive. Note: Chilkat also has the capability to do everything in-memory (no files would be involved). If this is of interest, please send email to support@chilkatsoft.com Note: This example requires Chilkat v9.5.0.75.
LOCAL lnSuccess LOCAL loManifest LOCAL loCrypt LOCAL loZip LOCAL lcFileHash LOCAL lcFilePath LOCAL loSbJson LOCAL lcManifestPath LOCAL loCertVault LOCAL loAppleWwdrCert LOCAL lcPfxPath LOCAL lcPfxPassword LOCAL loCert LOCAL loJsonSignedAttrs LOCAL lcSigPath * Note: Requires Chilkat v9.5.0.75 or greater. * This requires the Chilkat API to have been previously unlocked. * See Global Unlock Sample for sample code. * --------------------------------------------------------------------------------------------- * Note: Chilkat also has the capability to do everything in-memory (no files would be involved). * See this example: Sign Manifest File to Generate a Passbook .pkpass in Memory * --------------------------------------------------------------------------------------------- * First create the manifest.json * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.JsonObject') loManifest = CreateObject('Chilkat.JsonObject') * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Crypt2') loCrypt = CreateObject('Chilkat.Crypt2') * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Zip') loZip = CreateObject('Chilkat.Zip') loZip.NewZip("qa_data/p7s/pass-wallet/example.pkpass") * Set the AppendFromDir property to prevent that relative paths from being stored in the .pkpass archive. loZip.AppendFromDir = "qa_data/p7s/pass-wallet/" loCrypt.HashAlgorithm = "sha1" * Return hashes as lowercase hex. loCrypt.EncodingMode = "hexlower" lcFilePath = "qa_data/p7s/pass-wallet/icon.png" lcFileHash = loCrypt.HashFileENC(lcFilePath) loZip.AppendOneFileOrDir("icon.png",0) loManifest.UpdateString('"icon.png"',lcFileHash) lcFilePath = "qa_data/p7s/pass-wallet/icon@2x.png" lcFileHash = loCrypt.HashFileENC(lcFilePath) loZip.AppendOneFileOrDir("icon@2x.png",0) loManifest.UpdateString('"icon@2x.png"',lcFileHash) lcFilePath = "qa_data/p7s/pass-wallet/logo.png" lcFileHash = loCrypt.HashFileENC(lcFilePath) loZip.AppendOneFileOrDir("logo.png",0) loManifest.UpdateString('"logo.png"',lcFileHash) lcFilePath = "qa_data/p7s/pass-wallet/logo@2x.png" lcFileHash = loCrypt.HashFileENC(lcFilePath) loZip.AppendOneFileOrDir("logo@2x.png",0) loManifest.UpdateString('"logo@2x.png"',lcFileHash) lcFilePath = "qa_data/p7s/pass-wallet/pass.json" lcFileHash = loCrypt.HashFileENC(lcFilePath) loZip.AppendOneFileOrDir("pass.json",0) loManifest.UpdateString('"pass.json"',lcFileHash) * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.StringBuilder') loSbJson = CreateObject('Chilkat.StringBuilder') loManifest.EmitSb(loSbJson) lcManifestPath = "qa_data/p7s/pass-wallet/manifest.json" loSbJson.WriteFile(lcManifestPath,"utf-8",0) loZip.AppendOneFileOrDir("manifest.json",0) * Make sure we have the Apple WWDR intermediate certificate available for * the cert chain in the signature. * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.XmlCertVault') loCertVault = CreateObject('Chilkat.XmlCertVault') * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Cert') loAppleWwdrCert = CreateObject('Chilkat.Cert') lnSuccess = loAppleWwdrCert.LoadByCommonName("Apple Worldwide Developer Relations Certification Authority") IF (lnSuccess <> 1) THEN ? "The Apple WWDR intermediate certificate is not installed." ? "It is available at https://developer.apple.com/certificationauthority/AppleWWDRCA.cer" ? "You may alternatively load the .cer like this..." lnSuccess = loAppleWwdrCert.LoadFromFile("qa_data/certs/AppleWWDRCA.cer") IF (lnSuccess <> 1) THEN ? loAppleWwdrCert.LastErrorText RELEASE loManifest RELEASE loCrypt RELEASE loZip RELEASE loSbJson RELEASE loCertVault RELEASE loAppleWwdrCert CANCEL ENDIF ENDIF loCertVault.AddCert(loAppleWwdrCert) loCrypt.UseCertVault(loCertVault) * Use a digital certificate and private key from a PFX file (.pfx or .p12). lcPfxPath = "qa_data/pfx/cert_test123.pfx" lcPfxPassword = "test123" * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Cert') loCert = CreateObject('Chilkat.Cert') lnSuccess = loCert.LoadPfxFile(lcPfxPath,lcPfxPassword) IF (lnSuccess <> 1) THEN ? loCert.LastErrorText RELEASE loManifest RELEASE loCrypt RELEASE loZip RELEASE loSbJson RELEASE loCertVault RELEASE loAppleWwdrCert RELEASE loCert CANCEL ENDIF * Provide the signing cert (with associated private key). lnSuccess = loCrypt.SetSigningCert(loCert) IF (lnSuccess <> 1) THEN ? loCrypt.LastErrorText RELEASE loManifest RELEASE loCrypt RELEASE loZip RELEASE loSbJson RELEASE loCertVault RELEASE loAppleWwdrCert RELEASE loCert CANCEL ENDIF * Specify the signed attributes to be included. * (These attributes appear to not be necessary, but we're including * them just in case they become necessary in the future.) * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.JsonObject') loJsonSignedAttrs = CreateObject('Chilkat.JsonObject') loJsonSignedAttrs.UpdateInt("contentType",1) loJsonSignedAttrs.UpdateInt("signingTime",1) loCrypt.SigningAttributes = loJsonSignedAttrs.Emit() * Sign the manifest JSON file to produce a file named "signature". lcSigPath = "qa_data/p7s/pass-wallet/signature" * Create the "signature" file. lnSuccess = loCrypt.CreateP7S(lcManifestPath,lcSigPath) IF (lnSuccess = 0) THEN ? loCrypt.LastErrorText RELEASE loManifest RELEASE loCrypt RELEASE loZip RELEASE loSbJson RELEASE loCertVault RELEASE loAppleWwdrCert RELEASE loCert RELEASE loJsonSignedAttrs CANCEL ENDIF loZip.AppendOneFileOrDir("signature",0) * --------------------------------------------------------------------------------------------- * Note: Chilkat also has the capability to do everything in-memory (no files would be involved). * If this is of interest, please send email to support@chilkatsoft.com * --------------------------------------------------------------------------------------------- * Create the .pkipass archive (which is a .zip archive containing the required files). lnSuccess = loZip.WriteZipAndClose() IF (lnSuccess <> 1) THEN ? loZip.LastErrorText RELEASE loManifest RELEASE loCrypt RELEASE loZip RELEASE loSbJson RELEASE loCertVault RELEASE loAppleWwdrCert RELEASE loCert RELEASE loJsonSignedAttrs CANCEL ENDIF ? "Success." RELEASE loManifest RELEASE loCrypt RELEASE loZip RELEASE loSbJson RELEASE loCertVault RELEASE loAppleWwdrCert RELEASE loCert RELEASE loJsonSignedAttrs |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.