UNPKG

p7s-info

Version:
62 lines (51 loc) 2.39 kB
#!/usr/bin/env node // Import. const fs = require('fs'); const CColor = require('ccolor'); const jk = require('jkurwa'); const Help = require('./lib/help'); // Constants. const PROCESS_TITLE = 'p7s-info'; const KEY_PARAM_HELP = '--help'; const KEY_PARAM_VERSION = '--version'; // Set process title. process.title = PROCESS_TITLE; // Define params. const appArguments = process.argv.slice(2); const [maybeServiceCommand] = appArguments; const showHelp = maybeServiceCommand === KEY_PARAM_HELP; const showVersion = maybeServiceCommand === KEY_PARAM_VERSION; const [p7sFilePath, signedContentFilePath] = appArguments; const isWrongCommand = !showHelp && !showVersion && !p7sFilePath; // Start async thread. (async () => { // If service command. if (showHelp) { Help.show(); process.exit(0); } if (showVersion) { Help.version(); process.exit(0); } // If wrong command. if (isWrongCommand) { Help.wrongParams(); process.exit(1); } // Get P7S in BASE64 encoding. let p7sFileBuffer; try { p7sFileBuffer = fs.readFileSync(p7sFilePath); } catch (error) { console.log(CColor.red(`Can not read file "${p7sFilePath}".`)); process.exit(1); } const p7sFileBase64 = p7sFileBuffer.toString('base64'); // Define signature info. const message = new jk.models.Message(jk.b64_decode(p7sFileBase64)); const cert = message && message.signer(); const signedContent = message.info && message.info.contentInfo && message.info.contentInfo.content; const pem = cert && cert.as_pem(); const signTime = message && message.pattrs && message.pattrs.signingTime && new Date(message.pattrs.signingTime).toISOString(); const signer = { ...cert.subject, ipn: cert.extension && cert.extension.ipn }; const issuer = cert.issuer; const serial = cert.serial; const { signatureAlgorithm, pubkeyAlgorithm, extension } = cert; const { issuers, ocsp, tsp } = extension; // Save signed content if need it. if (signedContentFilePath) { try { fs.writeFileSync(signedContentFilePath, typeof signedContent !== 'undefined' ? signedContent : ''); } catch (error) { console.log(CColor.red(`Can not write file "${signedContentFilePath}".`)); process.exit(1); } } // Show signature info. const signatureInfo = JSON.stringify({ pem, signTime, signer, issuer, serial, signatureAlgorithm, pubkeyAlgorithm, issuers, ocsp, tsp }, null, 2); console.log(signatureInfo); })();