From 991f7708008927789973f2927e84616bbb6bc947 Mon Sep 17 00:00:00 2001 From: orignal Date: Thu, 7 Sep 2017 16:33:27 -0400 Subject: [PATCH] gost hash for merkle tree --- src/server/shared/Bitcoin/Block.cpp | 4 ++-- src/server/shared/Crypto.cpp | 12 ++++++++++++ src/server/shared/Crypto.h | 3 ++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/server/shared/Bitcoin/Block.cpp b/src/server/shared/Bitcoin/Block.cpp index 855c06c..770c1eb 100644 --- a/src/server/shared/Bitcoin/Block.cpp +++ b/src/server/shared/Bitcoin/Block.cpp @@ -16,7 +16,7 @@ namespace Bitcoin for (uint32 i = 0; i < size; i += 2) { uint32 i2 = std::min(i+1, size-1); - merkleTree.push_back(Crypto::GOSTD(Util::Join(merkleTree[j+i], merkleTree[j+i2]))); + merkleTree.push_back(Crypto::GOSTD(merkleTree[j+i], merkleTree[j+i2])); } j += size; @@ -35,7 +35,7 @@ namespace Bitcoin uint32 j = 0; for (uint32 size = tx.size(); size > 1; size = (size+1)/2) { - merkleTree[j+size] = Crypto::GOSTD(Util::Join(merkleTree[j], merkleTree[j+1])); + merkleTree[j+size] = Crypto::GOSTD(merkleTree[j], merkleTree[j+1]); j += size; } diff --git a/src/server/shared/Crypto.cpp b/src/server/shared/Crypto.cpp index 8118b2d..20e1189 100644 --- a/src/server/shared/Crypto.cpp +++ b/src/server/shared/Crypto.cpp @@ -14,4 +14,16 @@ namespace Crypto hash.push_back (hash2[31-i]); return hash; } + + BinaryData GOSTD(BinaryData data1, BinaryData data2) + { + BinaryData data3 = data1; + data3.insert(data3.end(), data2.begin(), data2.end()); + uint8_t hash1[64]; + std::vector hash(32); + i2p::crypto::GOSTR3411_2012_512 (&data3[0], data3.size (), hash1); + i2p::crypto::GOSTR3411_2012_256 (hash1, 64, &hash[0]); + // we don't convert to Little Endian here + return hash; + } } diff --git a/src/server/shared/Crypto.h b/src/server/shared/Crypto.h index 778de85..5f85936 100644 --- a/src/server/shared/Crypto.h +++ b/src/server/shared/Crypto.h @@ -10,6 +10,7 @@ namespace Crypto { BinaryData GOSTD(BinaryData data); -} + BinaryData GOSTD(BinaryData data1, BinaryData data2); // for merkle + } #endif