Instantly share code, notes, and snippets.

Embed
What would you like to do?
Computing Merkle Tree: Example in C++.
#include <QCoreApplication>
#include <QDebug>
#include <QByteArray>
#include <QCryptographicHash>
QByteArray sha256(QByteArray in)
{
QCryptographicHash hash (QCryptographicHash::Sha256);
hash.addData(in);
QByteArray res1 = hash.result();
return res1;
}
QByteArray sha256d(QByteArray in)
{
QCryptographicHash hash (QCryptographicHash::Sha256);
hash.addData(in);
QByteArray res1 = hash.result();
hash.reset();
hash.addData(res1);
return hash.result();
}
QByteArray reverse_hash (QByteArray in)
{
QByteArray res;
if (in.length() != 32) return QByteArray::fromHex("");
for (int i = 0; i < 32; ++i)
{
res.append(in[31 - i]);
}
return res;
}
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
{//BTC block 70003
QByteArray a = QByteArray::fromHex("6a7df1c030c1ad32cbaa21aa491194ac3b945f0dbe61dff2ef95f9c62f5650ee");
QByteArray b = QByteArray::fromHex("8e32e4a5ba602390a1e9cc019bd3a49a68e2116a56310e12c5bbeab142a67720");
a = reverse_hash(a);
b = reverse_hash(b);
QByteArray c = a + b;
QByteArray m = sha256d( c );
m = reverse_hash(m);
qDebug() << m.toHex();
}
{//VTC block 800019
QByteArray a = QByteArray::fromHex("32e60eb21632597c1c1545c63fae57df8d4455648b7d97150b7dcee706749588");
QByteArray b = QByteArray::fromHex("1deed158ada568b9b193473095c8eb2cef2cffe60ccce15c3c82f599a09767a8");
a = reverse_hash(a);
b = reverse_hash(b);
qDebug() << a.toHex();
qDebug() << b.toHex();
QByteArray c = a + b;
QByteArray m = sha256d( c );
m = reverse_hash(m);
qDebug() << m.toHex();
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment