Skip to content
This repository was archived by the owner on Apr 8, 2026. It is now read-only.

Commit f124cc8

Browse files
committed
cpp: Use little-endian load for std::hash
1 parent d8426d2 commit f124cc8

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

include/evmc/evmc.hpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -833,8 +833,8 @@ struct hash<evmc::address>
833833
using namespace evmc;
834834
using namespace fnv;
835835
return static_cast<size_t>(fnv1a_by64(
836-
fnv1a_by64(fnv1a_by64(fnv::offset_basis, load64be(&s.bytes[0])), load64be(&s.bytes[8])),
837-
load32be(&s.bytes[16])));
836+
fnv1a_by64(fnv1a_by64(fnv::offset_basis, load64le(&s.bytes[0])), load64le(&s.bytes[8])),
837+
load32le(&s.bytes[16])));
838838
}
839839
};
840840

@@ -848,10 +848,10 @@ struct hash<evmc::bytes32>
848848
using namespace evmc;
849849
using namespace fnv;
850850
return static_cast<size_t>(
851-
fnv1a_by64(fnv1a_by64(fnv1a_by64(fnv1a_by64(fnv::offset_basis, load64be(&s.bytes[0])),
852-
load64be(&s.bytes[8])),
853-
load64be(&s.bytes[16])),
854-
load64be(&s.bytes[24])));
851+
fnv1a_by64(fnv1a_by64(fnv1a_by64(fnv1a_by64(fnv::offset_basis, load64le(&s.bytes[0])),
852+
load64le(&s.bytes[8])),
853+
load64le(&s.bytes[16])),
854+
load64le(&s.bytes[24])));
855855
}
856856
};
857857
} // namespace std

test/unittests/cpp_test.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,11 +127,19 @@ TEST(cpp, std_hash)
127127
std::fill_n(eb.bytes, sizeof(eb), uint8_t{0xee});
128128
EXPECT_EQ(std::hash<evmc::bytes32>{}(eb), static_cast<size_t>(0xbb14e5c56b477375));
129129

130-
auto rand_address = 0xaa00bb00cc00dd00ee00ff001100220033004400_address;
131-
EXPECT_EQ(std::hash<evmc::address>{}(rand_address), static_cast<size_t>(0x17f74b6894b0f6b7));
130+
const auto rand_address_1 = 0xaa00bb00cc00dd00ee00ff001100220033004400_address;
131+
EXPECT_EQ(std::hash<evmc::address>{}(rand_address_1), static_cast<size_t>(0x30022347e325524e));
132132

133-
auto rand_bytes32 = 0xbb01bb02bb03bb04bb05bb06bb07bb08bb09bb0abb0bbb0cbb0dbb0ebb0fbb00_bytes32;
134-
EXPECT_EQ(std::hash<evmc::bytes32>{}(rand_bytes32), static_cast<size_t>(0x4efee0983bb6c4f5));
133+
const auto rand_address_2 = 0x00dd00cc00bb00aa0022001100ff00ee00440033_address;
134+
EXPECT_EQ(std::hash<evmc::address>{}(rand_address_2), static_cast<size_t>(0x17f74b6894b0f6b7));
135+
136+
const auto rand_bytes32_1 =
137+
0xbb01bb02bb03bb04bb05bb06bb07bb08bb09bb0abb0bbb0cbb0dbb0ebb0fbb00_bytes32;
138+
EXPECT_EQ(std::hash<evmc::bytes32>{}(rand_bytes32_1), static_cast<size_t>(0x4f857586d70f2db9));
139+
140+
const auto rand_bytes32_2 =
141+
0x04bb03bb02bb01bb08bb07bb06bb05bb0cbb0bbb0abb09bb00bb0fbb0ebb0dbb_bytes32;
142+
EXPECT_EQ(std::hash<evmc::bytes32>{}(rand_bytes32_2), static_cast<size_t>(0x4efee0983bb6c4f5));
135143

136144
#pragma warning(pop)
137145
}

0 commit comments

Comments
 (0)