From f42dea2b1e89f1f11bc1c1e59913eb24ca989fdf Mon Sep 17 00:00:00 2001 From: George Tankersley Date: Fri, 16 Nov 2018 21:57:21 +0000 Subject: [PATCH] parser: present block hashes in big endian order --- parser/block_header.go | 7 +++++++ parser/block_header_test.go | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/parser/block_header.go b/parser/block_header.go index 739116a..c00f120 100644 --- a/parser/block_header.go +++ b/parser/block_header.go @@ -150,6 +150,7 @@ func parseNBits(b []byte) *big.Int { return new(big.Int).SetBytes(targetBytes) } +// GetHash returns the bytes of a block hash in big-endian order. func (hdr *blockHeader) GetHash() []byte { if hdr.cachedHash != nil { return hdr.cachedHash @@ -165,6 +166,12 @@ func (hdr *blockHeader) GetHash() []byte { digest := sha256.Sum256(serializedHeader) digest = sha256.Sum256(digest[:]) + // Reverse byte order + for i := 0; i < len(digest)/2; i++ { + j := len(digest) - 1 - i + digest[i], digest[j] = digest[j], digest[i] + } + hdr.cachedHash = digest[:] return hdr.cachedHash } diff --git a/parser/block_header_test.go b/parser/block_header_test.go index 400a296..5a493d5 100644 --- a/parser/block_header_test.go +++ b/parser/block_header_test.go @@ -126,9 +126,9 @@ func TestBlockHeader(t *testing.T) { hash := blockHeader.GetHash() // This is not necessarily true for anything but our current test cases. - for _, b := range hash[28:] { + for _, b := range hash[:4] { if b != 0 { - t.Errorf("Hash lacked trailing zeros") + t.Errorf("Hash lacked leading zeros: %x", hash) } } }