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