jsonld-signatures-merkleproof2019
Version:
A jsonld signature implementation to support MerkleProof2019 verification in Verifiable Credential context
35 lines (34 loc) • 1.33 kB
JavaScript
import sha256 from 'sha256';
import VerifierError from '../models/VerifierError';
import { toByteArray } from '../utils/data';
import getText from '../helpers/getText';
export default function ensureValidReceipt(receipt) {
let proofHash = receipt.targetHash;
const merkleRoot = receipt.merkleRoot;
try {
const proof = receipt.path;
if (proof && proofHash) {
for (const index in proof) {
const node = proof[index];
let appendedBuffer;
if (typeof node.left !== 'undefined') {
appendedBuffer = toByteArray(`${node.left}${proofHash}`);
proofHash = sha256(appendedBuffer);
}
else if (typeof node.right !== 'undefined') {
appendedBuffer = toByteArray(`${proofHash}${node.right}`);
proofHash = sha256(appendedBuffer);
}
else {
throw new VerifierError('checkReceipt', 'Trigger catch error.');
}
}
}
}
catch (e) {
throw new VerifierError('checkReceipt', getText('errors', 'ensureValidReceipt'));
}
if (proofHash !== merkleRoot) {
throw new VerifierError('checkReceipt', getText('errors', 'invalidMerkleReceipt'));
}
}