UNPKG

1.58 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 , loadRecipients = require('../utils/loadRecipients')
7 , Progress = require('progress')
8
9module.exports = function (inSig, inFile, options) {
10 if (inSig.indexOf('.salty-sig') === -1) {
11 inSig += '.salty-sig'
12 }
13 if (!inFile) {
14 inFile = inSig.replace('.salty-sig', '')
15 }
16 fs.readFile(inSig, {encoding: 'utf8'}, function (err, headerStr) {
17 if (err) throw err
18 loadRecipients(options.parent.wallet, function (err, recipients) {
19 if (err) throw err
20 var inStat = fs.statSync(inFile)
21 var inStream = fs.createReadStream(inFile)
22 var header = libHeader.parse(headerStr).toObject()
23 assert(header['hash'])
24 assert(header['nonce'])
25 assert(header['from-salty-id'])
26 var bar = new Progress(' verifying [:bar] :percent ETA: :etas', { total: inStat.size, width: 80 })
27 var nonce = Buffer(header['nonce'], 'base64')
28 var hashStream = crypto.createHmac('sha256', nonce)
29 inStream
30 .on('data', function (chunk) {
31 bar.tick(chunk.length)
32 })
33 .pipe(hashStream)
34 .once('data', function (hash) {
35 bar.terminate()
36 header = libHeader.parse(headerStr).validate(hash).toObject()
37 if (recipients[header['from-salty-id']]) {
38 header['from-salty-id'] = recipients[header['from-salty-id']].toString(true)
39 }
40 printHeader(header)
41 })
42 })
43 })
44}
\No newline at end of file