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
(AutoIt) 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.
; 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 Local $bSuccess $oManifest = ObjCreate("Chilkat.JsonObject") $oCrypt = ObjCreate("Chilkat.Crypt2") $oZip = ObjCreate("Chilkat.Zip") $oZip.NewZip("qa_data/p7s/pass-wallet/example.pkpass") ; Set the AppendFromDir property to prevent that relative paths from being stored in the .pkpass archive. $oZip.AppendFromDir = "qa_data/p7s/pass-wallet/" $oCrypt.HashAlgorithm = "sha1" ; Return hashes as lowercase hex. $oCrypt.EncodingMode = "hexlower" Local $sFileHash Local $sFilePath $sFilePath = "qa_data/p7s/pass-wallet/icon.png" $sFileHash = $oCrypt.HashFileENC($sFilePath) $oZip.AppendOneFileOrDir("icon.png",False) $oManifest.UpdateString("""icon.png""",$sFileHash) $sFilePath = "qa_data/p7s/pass-wallet/icon@2x.png" $sFileHash = $oCrypt.HashFileENC($sFilePath) $oZip.AppendOneFileOrDir("icon@2x.png",False) $oManifest.UpdateString("""icon@2x.png""",$sFileHash) $sFilePath = "qa_data/p7s/pass-wallet/logo.png" $sFileHash = $oCrypt.HashFileENC($sFilePath) $oZip.AppendOneFileOrDir("logo.png",False) $oManifest.UpdateString("""logo.png""",$sFileHash) $sFilePath = "qa_data/p7s/pass-wallet/logo@2x.png" $sFileHash = $oCrypt.HashFileENC($sFilePath) $oZip.AppendOneFileOrDir("logo@2x.png",False) $oManifest.UpdateString("""logo@2x.png""",$sFileHash) $sFilePath = "qa_data/p7s/pass-wallet/pass.json" $sFileHash = $oCrypt.HashFileENC($sFilePath) $oZip.AppendOneFileOrDir("pass.json",False) $oManifest.UpdateString("""pass.json""",$sFileHash) $oSbJson = ObjCreate("Chilkat.StringBuilder") $oManifest.EmitSb($oSbJson) Local $sManifestPath = "qa_data/p7s/pass-wallet/manifest.json" $oSbJson.WriteFile($sManifestPath,"utf-8",False) $oZip.AppendOneFileOrDir("manifest.json",False) ; Make sure we have the Apple WWDR intermediate certificate available for ; the cert chain in the signature. $oCertVault = ObjCreate("Chilkat.XmlCertVault") $oAppleWwdrCert = ObjCreate("Chilkat.Cert") $bSuccess = $oAppleWwdrCert.LoadByCommonName("Apple Worldwide Developer Relations Certification Authority") If ($bSuccess <> True) Then ConsoleWrite("The Apple WWDR intermediate certificate is not installed." & @CRLF) ConsoleWrite("It is available at https://developer.apple.com/certificationauthority/AppleWWDRCA.cer" & @CRLF) ConsoleWrite("You may alternatively load the .cer like this..." & @CRLF) $bSuccess = $oAppleWwdrCert.LoadFromFile("qa_data/certs/AppleWWDRCA.cer") If ($bSuccess <> True) Then ConsoleWrite($oAppleWwdrCert.LastErrorText & @CRLF) Exit EndIf EndIf $oCertVault.AddCert($oAppleWwdrCert) $oCrypt.UseCertVault($oCertVault) ; Use a digital certificate and private key from a PFX file (.pfx or .p12). Local $sPfxPath = "qa_data/pfx/cert_test123.pfx" Local $sPfxPassword = "test123" $oCert = ObjCreate("Chilkat.Cert") $bSuccess = $oCert.LoadPfxFile($sPfxPath,$sPfxPassword) If ($bSuccess <> True) Then ConsoleWrite($oCert.LastErrorText & @CRLF) Exit EndIf ; Provide the signing cert (with associated private key). $bSuccess = $oCrypt.SetSigningCert($oCert) If ($bSuccess <> True) Then ConsoleWrite($oCrypt.LastErrorText & @CRLF) Exit 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.) $oJsonSignedAttrs = ObjCreate("Chilkat.JsonObject") $oJsonSignedAttrs.UpdateInt("contentType",1) $oJsonSignedAttrs.UpdateInt("signingTime",1) $oCrypt.SigningAttributes = $oJsonSignedAttrs.Emit() ; Sign the manifest JSON file to produce a file named "signature". Local $sigPath = "qa_data/p7s/pass-wallet/signature" ; Create the "signature" file. $bSuccess = $oCrypt.CreateP7S($sManifestPath,$sigPath) If ($bSuccess = False) Then ConsoleWrite($oCrypt.LastErrorText & @CRLF) Exit EndIf $oZip.AppendOneFileOrDir("signature",False) ; --------------------------------------------------------------------------------------------- ; 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). $bSuccess = $oZip.WriteZipAndClose() If ($bSuccess <> True) Then ConsoleWrite($oZip.LastErrorText & @CRLF) Exit EndIf ConsoleWrite("Success." & @CRLF) |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.