1 | var 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 |
|
12 | module.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 |