UNPKG

2.45 kBJavaScriptView Raw
1var fs = require('fs')
2 , assert = require('assert')
3 , crypto = require('crypto')
4 , printHeader = require('../utils/printHeader')
5 , libHeader = require('../lib/header')
6 , libMessage = require('../lib/message')
7 , loadRecipients = require('../utils/loadRecipients')
8 , translateHeader = require('../utils/translateHeader')
9 , Progress = require('progress')
10 , bs58 = require('bs58')
11
12module.exports = function (inSig, inFile, options) {
13 if (options.armor) {
14 var inStream = inSig ? fs.createReadStream(inSig) : process.stdin
15 var chunks = []
16 inStream.on('data', function (chunk) {
17 chunks.push(chunk)
18 })
19 inStream.once('end', function () {
20 var buf = Buffer.concat(chunks)
21 withStr(buf.toString('utf8').replace(/\r/g, ''))
22 })
23 }
24 else {
25 if (inSig.indexOf('.salty-sig') === -1) {
26 inSig += '.salty-sig'
27 }
28 if (!inFile && !options.armor) {
29 inFile = inSig.replace('.salty-sig', '')
30 }
31 fs.readFile(inSig, {encoding: 'utf8'}, function (err, headerStr) {
32 if (err) throw err
33 withStr(headerStr)
34 })
35 }
36 function withStr (headerStr) {
37 loadRecipients(options.parent.wallet, function (err, recipients) {
38 if (options.armor) {
39 var message = libMessage.parse(headerStr)
40 var hash = crypto.createHash(message.header['hash-algorithm']).update(message.body).digest()
41 header = libHeader.parse(message.header, !options.translate).validate(hash).toObject()
42 header = translateHeader(header, recipients)
43 printHeader(header)
44 process.stdout.write(message.body)
45 }
46 else {
47 var inStat = fs.statSync(inFile)
48 var inStream = fs.createReadStream(inFile)
49 var headerFuncs = libHeader.parse(headerStr, !options.translate)
50 var header = headerFuncs.toObject()
51 assert(header['from-salty-id'])
52 var bar = new Progress(' verifying [:bar] :percent ETA: :etas', { total: inStat.size, width: 80 })
53 var hashStream = crypto.createHash(header['hash-algorithm'])
54 inStream
55 .on('data', function (chunk) {
56 bar.tick(chunk.length)
57 })
58 .pipe(hashStream)
59 .once('data', function (hash) {
60 bar.terminate()
61 header = headerFuncs.validate(hash).toObject()
62 header = options.translate ? translateHeader(header, recipients) : header
63 printHeader(header)
64 })
65 }
66 })
67 }
68}
\No newline at end of file