3 // vim: set filetype=javascript :
4 // Copyright 2015 Joyent, Inc. All rights reserved.
6 var dashdash = require('dashdash');
7 var sshpk = require('../lib/index');
8 var fs = require('fs');
9 var path = require('path');
15 help: 'Hash algorithm (sha1, sha256, sha384, sha512)'
18 names: ['verbose', 'v'],
20 help: 'Display verbose info about key and hash used'
23 names: ['identity', 'i'],
25 help: 'Path to (public) key to use'
30 help: 'Input filename'
33 names: ['format', 't'],
35 help: 'Signature format (asn1, ssh, raw)'
38 names: ['signature', 's'],
40 help: 'base64-encoded signature data'
45 help: 'Shows this help text'
49 if (require.main === module) {
50 var parser = dashdash.createParser({
55 var opts = parser.parse(process.argv);
57 console.error('sshpk-verify: error: %s', e.message);
61 if (opts.help || opts._args.length > 1) {
62 var help = parser.help({}).trimRight();
63 console.error('sshpk-verify: sign data using an SSH key\n');
69 var help = parser.help({}).trimRight();
70 console.error('sshpk-verify: the -i or --identity option ' +
76 if (!opts.signature) {
77 var help = parser.help({}).trimRight();
78 console.error('sshpk-verify: the -s or --signature option ' +
84 var keyData = fs.readFileSync(opts.identity);
88 key = sshpk.parseKey(keyData);
90 console.error('sshpk-verify: error loading key "' +
91 opts.identity + '": ' + e.name + ': ' + e.message);
95 var fmt = opts.format || 'asn1';
96 var sigData = new Buffer(opts.signature, 'base64');
100 sig = sshpk.parseSignature(sigData, key.type, fmt);
102 console.error('sshpk-verify: error parsing signature: ' +
103 e.name + ': ' + e.message);
107 var hash = opts.hash || key.defaultHashAlgorithm();
111 verifier = key.createVerify(hash);
113 console.error('sshpk-verify: error creating verifier: ' +
114 e.name + ': ' + e.message);
119 console.error('sshpk-verify: using %s-%s with a %d bit key',
120 key.type, hash, key.size);
123 var inFile = process.stdin;
124 var inFileName = 'stdin';
128 inFilePath = opts.file;
129 } else if (opts._args.length === 1) {
130 inFilePath = opts._args[0];
134 inFileName = path.basename(inFilePath);
138 fs.accessSync(inFilePath, fs.R_OK);
139 inFile = fs.createReadStream(inFilePath);
142 console.error('sshpk-verify: error opening input file' +
143 ': ' + e.name + ': ' + e.message);
147 inFile.pipe(verifier);
148 inFile.on('end', function () {
151 ret = verifier.verify(sig);
153 console.error('sshpk-verify: error verifying data: ' +
154 e.name + ': ' + e.message);
163 console.error('NOT OK');