UNPKG

authenticode

Version:

Get authenticode information from Windows runnables

48 lines (47 loc) 2.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.summary = exports.getAuthenticode = exports.SignatureType = exports.SignatureStatus = void 0; const util_1 = require("util"); const child_process_1 = require("child_process"); // https://docs.microsoft.com/en-us/dotnet/api/system.management.automation.signaturestatus var SignatureStatus; (function (SignatureStatus) { SignatureStatus[SignatureStatus["Valid"] = 0] = "Valid"; SignatureStatus[SignatureStatus["UnknownError"] = 1] = "UnknownError"; SignatureStatus[SignatureStatus["NotSigned"] = 2] = "NotSigned"; SignatureStatus[SignatureStatus["HashMismatch"] = 3] = "HashMismatch"; SignatureStatus[SignatureStatus["NotTrusted"] = 4] = "NotTrusted"; SignatureStatus[SignatureStatus["NotSupportedFileFormat"] = 5] = "NotSupportedFileFormat"; SignatureStatus[SignatureStatus["Incompatible"] = 6] = "Incompatible"; })(SignatureStatus = exports.SignatureStatus || (exports.SignatureStatus = {})); var SignatureType; (function (SignatureType) { SignatureType[SignatureType["None"] = 0] = "None"; SignatureType[SignatureType["Authenticode"] = 1] = "Authenticode"; SignatureType[SignatureType["Catalog"] = 2] = "Catalog"; })(SignatureType = exports.SignatureType || (exports.SignatureType = {})); const statusWithSignature = [SignatureStatus.Valid, SignatureStatus.HashMismatch, SignatureStatus.NotTrusted]; async function getAuthenticode(path) { const escapedPath = path.replace('"', '`"'); const command = `Get-AuthenticodeSignature "${escapedPath}" | ConvertTo-Json -Compress`; const encodedCommand = Buffer.from(command, 'utf16le').toString('base64'); const { stdout } = await util_1.promisify(child_process_1.execFile)('powershell.exe', [ '-NoProfile', '-EncodedCommand', encodedCommand ]); return JSON.parse(stdout); } exports.getAuthenticode = getAuthenticode; function signatureIsPresent(signature) { return statusWithSignature.includes(signature.Status); } function summary(signature) { var _a, _b; return { status: (_a = SignatureStatus[signature.Status]) !== null && _a !== void 0 ? _a : String(signature.Status), type: (_b = SignatureType[signature.SignatureType]) !== null && _b !== void 0 ? _b : String(signature.SignatureType), subject: signatureIsPresent(signature) ? signature.SignerCertificate.Subject : null, }; } exports.summary = summary;