我正在尝试使用 nodejs 验证来自 QLDB 的文档。我一直在尽可能多地关注Java 验证示例,但我无法计算出与分类帐中存储的摘要相同的摘要。
这是我想出的代码。我从 QLDB 查询证明和块哈希,然后尝试以与 Java 示例相同的方式计算摘要。但是在连接两个哈希并根据结果计算新哈希后,我得到了错误的输出crypto.createHash('sha256').update(c).digest("base64")
。我也尝试过使用“base64”而不是“hex”,但结果不同。
const rBlock = makeReader(res.Revision.IonText);
var block = [];
rBlock.next();
rBlock.stepIn();
rBlock.next();
while (rBlock.next() != null) {
if (rBlock.fieldName() == 'hash') {
block.push(Buffer.from(rBlock.byteValue()).toString('hex'));
}
}
console.log(block);
var proof = [];
const rProof = makeReader(res.Proof.IonText);
rProof.next();
rProof.stepIn();
while (rProof.next() != null) {
proof.push(Buffer.from(rProof.byteValue()).toString('hex'));
}
var ph = block[0];
var c;
for (var i = 0; i < proof.length; i++) {
console.log(proof[i])
for (var j = 0; j < ph.length; j++) {
if (parseInt(ph[j]) > parseInt(proof[i][j])){
c = ph + proof[i];
break;
}
if (parseInt(ph[j]) < parseInt(proof[i][j])){
c = proof[i] + ph;
break;
}
}
ph = crypto.createHash('sha256').update(c).digest("hex");
console.log(ph);
console.log();
}