Sample code for 30+ languages & platforms
Visual FoxPro Requires Chilkat v11.7.0+

Verify the Authenticode Signature of an MSI, PowerShell, or VBScript File

See more Code Signing Examples

Demonstrates how to verify the Authenticode signature of a Windows Installer package (.msi), a PowerShell file (.ps1, .psm1, .psd1), or a VBScript file (.vbs), and how to get the certificate of the signer. Verifying these file types requires Chilkat v11.7.0 or later.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL lcPath
LOCAL loCodeSign
LOCAL loSigInfo
LOCAL lnValid
LOCAL loSignerCert

lnSuccess = 0

*  This example requires the Chilkat API to have been previously unlocked.
*  See Global Unlock Sample for sample code.

*  Starting in Chilkat v11.7.0, VerifySignature can verify the Authenticode signature of
*    - Windows Installer packages (.msi)
*    - PowerShell scripts, modules, and data files (.ps1, .psm1, .psd1)
*    - VBScript files (.vbs)
*  in addition to EXE and DLL files.

*  This example verifies a signed PowerShell script.
*  To verify an .msi or a .vbs, pass the path of that file instead.
lcPath = "C:/someDir/Deploy.ps1"

loCodeSign = CreateObject('Chilkat.CodeSign')
loSigInfo = CreateObject('Chilkat.JsonObject')

*  VerifySignature returns true if the file has a valid Authenticode signature.
*  It returns false if the file is not signed, if the file was changed after it was signed,
*  or if the signing certificate is not trusted.
lnValid = loCodeSign.VerifySignature(lcPath,loSigInfo)
IF (lnValid = 0) THEN
    *  The LastErrorText explains why the verification failed.
    ? loCodeSign.LastErrorText
    RELEASE loCodeSign
    RELEASE loSigInfo
    CANCEL
ENDIF

? "The Authenticode signature is valid."

*  The details of the signature are returned in the JSON, in the same layout as for an EXE or DLL.
*  See Verify Authenticode Signature of EXE or DLL for a sample of the JSON and code that parses it.
? "signing algorithm: " + loSigInfo.StringOf("pkcs7.verify.signerInfo[0].signingAlgName")
? "hash algorithm: " + loSigInfo.StringOf("pkcs7.verify.signerInfo[0].cert.digestAlgName")

*  Get the certificate of the signer.
*  The signer certificate is available only after a call to VerifySignature that returned true.
*  It is the public certificate only.  It does not include the signer's private key.
loSignerCert = CreateObject('Chilkat.Cert')
lnSuccess = loCodeSign.GetSignerCert(loSignerCert)
IF (lnSuccess = 0) THEN
    ? loCodeSign.LastErrorText
    RELEASE loCodeSign
    RELEASE loSigInfo
    RELEASE loSignerCert
    CANCEL
ENDIF

? "signed by: " + loSignerCert.SubjectCN
? "certificate issued by: " + loSignerCert.IssuerCN
? "certificate serial number: " + loSignerCert.SerialNumber
? "certificate valid until: " + loSignerCert.ValidToStr

RELEASE loCodeSign
RELEASE loSigInfo
RELEASE loSignerCert