UNPKG

jsonld-signatures-merkleproof2019

Version:

A jsonld signature implementation to support MerkleProof2019 verification in Verifiable Credential context

35 lines (34 loc) 1.33 kB
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')); } }