I am using the Stampery API to anchor hashes into different Blockchains. I wanted to independently verify that my hash with the given Merkle Proof from Stampery. I tried to follow their Whitepaper but with no success.
What I've tried so far is the following:
Hash:
265D0E134C56080CBD9049427C39C5B6425FDC909FC16072FC4AA0D6957B7264
Merkle proof:
R 4C83C6F2C253CD8B44A3EDEB076B65877BEBA0DCA2B85497C3B7E74785EC5618
R 9F016BF9C9CD4C4F55D171C211666B214C38C7FBDDCED9BC5D2D4239E6C7CE19
L 5461D61A21A6EF783737F328DA8BB8BF5D24804B8574F0E6CBEC076D026C2FBE
R FD894CD6289981AEEC0CE250C841257276FE56D2A003BFE482B2E669BA4A93AC
Merkle root:
16DA7D280DC9B527985F8749636DFB5E3C6B3856A4C7F7CB3E8BA6AEC9F33EB7
Code:
var mP = [
"4C83C6F2C253CD8B44A3EDEB076B65877BEBA0DCA2B85497C3B7E74785EC5618",
"9F016BF9C9CD4C4F55D171C211666B214C38C7FBDDCED9BC5D2D4239E6C7CE19",
"5461D61A21A6EF783737F328DA8BB8BF5D24804B8574F0E6CBEC076D026C2FBE",
"FD894CD6289981AEEC0CE250C841257276FE56D2A003BFE482B2E669BA4A93AC"
];
r = SHA3( SHA3( mP[2]+SHA3( SHA3(hash+mP[0]) +mP[1])) +mP[3] );
with $r \neq merkleRoot $. Here I simply applied the SHA3 (Keccak) algorithm (as mentioned in the paper) successive, taking into account the L and R from the Merkle Proof. I guess, that the Ls and Rs decide the order of the operands of the SHA3 function.
I am not sure what I am doing wrong and would be happy for any help!
Edit: With the help aesedepece I got a minimal node version running:
var crypto = require('crypto');
function SHA256(x) {
var buf = new Buffer(x, 'hex');
return crypto.createHash('sha256').update(buf).digest('hex');
}
var hash = "265D0E134C56080CBD9049427C39C5B6425FDC909FC16072FC4AA0D6957B7264";
var mP = [
"4C83C6F2C253CD8B44A3EDEB076B65877BEBA0DCA2B85497C3B7E74785EC5618",
"9F016BF9C9CD4C4F55D171C211666B214C38C7FBDDCED9BC5D2D4239E6C7CE19",
"5461D61A21A6EF783737F328DA8BB8BF5D24804B8574F0E6CBEC076D026C2FBE",
"FD894CD6289981AEEC0CE250C841257276FE56D2A003BFE482B2E669BA4A93AC"
];
var merkleRoot = "265D0E134C56080CBD9049427C39C5B6425FDC909FC16072FC4AA0D6957B7264";
var r = SHA256(SHA256(mP[2]+SHA256(SHA256(hash+mP[0])+mP[1]))+mP[3]);
console.log(r);
SHA3(SHA3(SHA3(mP[2]+SHA3(hash+mP[3]))+mP[1])+mP[0])
, which still does not give me the merkle root. $\endgroup$ – Knowledge Mar 19 '18 at 7:24