From e09da5cb54e0e71ceae441e1635d646b7077da68 Mon Sep 17 00:00:00 2001 From: orignal Date: Mon, 19 Jan 2015 14:30:30 -0500 Subject: [PATCH] correct CRC32 verification at big endian CPU --- Reseed.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Reseed.cpp b/Reseed.cpp index 9c72dc84..fd57b2e9 100644 --- a/Reseed.cpp +++ b/Reseed.cpp @@ -266,9 +266,9 @@ namespace data s.read ((char *)&compressionMethod, 2); compressionMethod = le16toh (compressionMethod); s.seekg (4, std::ios::cur); // skip fields we don't care about - uint32_t crc32, compressedSize, uncompressedSize; - s.read ((char *)&crc32, 4); - crc32 = le32toh (crc32); + uint32_t compressedSize, uncompressedSize; + uint8_t crc32[4]; + s.read ((char *)crc32, 4); s.read ((char *)&compressedSize, 4); compressedSize = le32toh (compressedSize); s.read ((char *)&uncompressedSize, 4); @@ -292,8 +292,7 @@ namespace data return numFiles; } - s.read ((char *)&crc32, 4); - crc32 = le32toh (crc32); + s.read ((char *)crc32, 4); s.read ((char *)&compressedSize, 4); compressedSize = le32toh (compressedSize) + 4; // ??? we must consider signature as part of compressed data s.read ((char *)&uncompressedSize, 4); @@ -321,7 +320,7 @@ namespace data { uint8_t * uncompressed = new uint8_t[uncompressedSize]; decompressor.Get (uncompressed, uncompressedSize); - if (CryptoPP::CRC32().VerifyDigest ((uint8_t *)&crc32, uncompressed, uncompressedSize)) + if (CryptoPP::CRC32().VerifyDigest (crc32, uncompressed, uncompressedSize)) { i2p::data::netdb.AddRouterInfo (uncompressed, uncompressedSize); numFiles++;