chainscript
Version:
Client for chainscript.io
93 lines (63 loc) • 2.24 kB
JavaScript
;
exports.__esModule = true;
exports['default'] = verifyPDF;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _stream = require('stream');
var _multihashes = require('multihashes');
var _multihashes2 = _interopRequireDefault(_multihashes);
var _bs58 = require('bs58');
var _bs582 = _interopRequireDefault(_bs58);
var _invertHash = require('invert-hash');
var _invertHash2 = _interopRequireDefault(_invertHash);
var _objectPath = require('object-path');
var _objectPath2 = _interopRequireDefault(_objectPath);
var _readFromPDF = require('./readFromPDF');
var _readFromPDF2 = _interopRequireDefault(_readFromPDF);
var _hashPDF = require('./hashPDF');
var _hashPDF2 = _interopRequireDefault(_hashPDF);
var _hashFile = require('./hashFile');
var INVERTED_HASH_MAP = _invertHash2['default'](_hashFile.HASH_MAP);
function verifyPDF(input, root, toJson) {
if (root === undefined) root = 'body.content.hash';
var hash = undefined;
var algorithm = undefined;
var input1 = undefined;
var input2 = undefined;
if (typeof input === 'string') {
input1 = input;
input2 = input;
} else {
input1 = new _stream.PassThrough();
input2 = new _stream.PassThrough();
input.pipe(input1);
input.pipe(input2);
}
return _readFromPDF2['default'](input1).then(function (json) {
if (!json) {
if (toJson) {
return { verified: false, wants: null, has: null };
}
throw new Error('Failed');
}
hash = _objectPath2['default'].get(json, root);
var buf = new Buffer(_bs582['default'].decode(hash));
var algorithmName = _multihashes2['default'].decode(buf).name;
algorithm = INVERTED_HASH_MAP[algorithmName];
if (typeof algorithm === 'undefined') {
throw new Error('Unsupported algorithm: ' + algorithmName);
}
return _hashPDF2['default'](input2, algorithm, null);
}).then(function (h) {
if (hash === h) {
if (toJson) {
return { verified: true, wants: hash, has: h };
}
return true;
}
if (toJson) {
return { verified: false, wants: hash, has: h };
}
throw new Error('Failed');
});
}
module.exports = exports['default'];