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 in MemoryDemonstrates how to create a Passbook .pkpass archive by creating a signature of a manifest file and then zipping to a .pkpass archive in memory
; This requires the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. ; --------------------------------------------------------------------------------------------- ; This example is the same as Sign Manifest File to Generate a Passbook .pkpass file ; except everything happens in memory (no input files, no output files) ; --------------------------------------------------------------------------------------------- ; First create the manifest.json Local $bSuccess $oManifest = ObjCreate("Chilkat.JsonObject") $oCrypt = ObjCreate("Chilkat.Crypt2") $oZip = ObjCreate("Chilkat.Zip") $oZip.NewZip("notUsedAndNeverCreated.zip") $oCrypt.HashAlgorithm = "sha1" ; Return hashes as lowercase hex. $oCrypt.EncodingMode = "hexlower" Local $sDigestStr $oPngData = ObjCreate("Chilkat.BinData") ; Assume we load the pngData with bytes for "icon.png" from somewhere, such as a byte array in memory. Local $oEntry = $oZip.AppendBd("icon.png",$oPngData) $sDigestStr = $oCrypt.HashBdENC($oPngData) $oManifest.UpdateString("""icon.png""",$sDigestStr) $oPngData.Clear() ; Assume we load the pngData with bytes for "icon@2x.png" from somewhere... $oEntry = $oZip.AppendBd("icon@2x.png",$oPngData) $sDigestStr = $oCrypt.HashBdENC($oPngData) $oManifest.UpdateString("""icon@2x.png""",$sDigestStr) $oPngData.Clear() ; Assume we load the pngData with bytes for "logo.png" from somewhere... $oEntry = $oZip.AppendBd("logo.png",$oPngData) $sDigestStr = $oCrypt.HashBdENC($oPngData) $oManifest.UpdateString("""logo.png""",$sDigestStr) $oPngData.Clear() ; Assume we load the pngData with bytes for "logo@2x.png" from somewhere... $oEntry = $oZip.AppendBd("logo@2x.png",$oPngData) $sDigestStr = $oCrypt.HashBdENC($oPngData) $oManifest.UpdateString("""logo@2x.png""",$sDigestStr) Local $sPassJson = "{ .... }"; Contains the contents of pass.json $oEntry = $oZip.AppendString("pass.json",$sPassJson) $sDigestStr = $oCrypt.HashStringENC($sPassJson) $oManifest.UpdateString("""pass.json""",$sDigestStr) $oEntry = $oZip.AppendString("manifest.json",$oManifest.Emit()) ; 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 $oBdPfx = ObjCreate("Chilkat.BinData") ; Assume we loaded a PFX into bdPfx.... Local $sPfxPassword = "test123" $oCert = ObjCreate("Chilkat.Cert") $bSuccess = $oCert.LoadPfxBd($oBdPfx,$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 to produce a signature $oCrypt.EncodingMode = "base64" Local $sig = $oCrypt.SignStringENC($oManifest.Emit()) $oBdSig = ObjCreate("Chilkat.BinData") $oBdSig.AppendEncoded($sig,"base64") $oEntry = $oZip.AppendBd("signature",$oBdSig) ; --------------------------------------------------------------------------------------------- ; 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). ; the .zip is written to bdZip $oBdZip = ObjCreate("Chilkat.BinData") $bSuccess = $oZip.WriteBd($oBdZip) If ($bSuccess <> True) Then ConsoleWrite($oZip.LastErrorText & @CRLF) Exit EndIf ConsoleWrite("Success." & @CRLF) |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.