12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- // Copyright 2019 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "base/hash/md5_constexpr.h"
- #include "base/hash/md5.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace base {
- namespace internal {
- // Provide storage for the various constants, allowing the functions to be used
- // at runtime for these tests.
- constexpr std::array<uint32_t, 64> MD5CE::kConstants;
- constexpr std::array<uint32_t, 16> MD5CE::kShifts;
- constexpr MD5CE::IntermediateData MD5CE::kInitialIntermediateData;
- } // namespace internal
- // A constexpr comparison operator for MD5Results, allowing compile time tests
- // to be expressed.
- constexpr bool Equal(const MD5Digest& lhs, const MD5Digest& rhs) {
- for (size_t i = 0; i < std::size(lhs.a); ++i) {
- if (lhs.a[i] != rhs.a[i])
- return false;
- }
- return true;
- }
- // Ensure that everything works at compile-time by comparing to a few
- // reference hashes.
- constexpr char kMessage0[] = "message digest";
- static_assert(MD5Hash64Constexpr(kMessage0) == 0xF96B697D7CB7938Dull,
- "incorrect MD5Hash64 implementation");
- static_assert(MD5Hash32Constexpr(kMessage0) == 0xF96B697Dul,
- "incorrect MD5Hash32 implementation");
- constexpr char kMessage1[] = "The quick brown fox jumps over the lazy dog";
- static_assert(MD5Hash64Constexpr(kMessage1, std::size(kMessage1) - 1) ==
- 0x9E107D9D372BB682ull,
- "incorrect MD5Hash64 implementation");
- static_assert(MD5Hash32Constexpr(kMessage1, std::size(kMessage1) - 1) ==
- 0x9E107D9Dul,
- "incorrect MD5Hash32 implementation");
- // Comparison operator for checking that the constexpr MD5 implementation
- // matches the default implementation.
- void ExpectEqual(const MD5Digest& lhs, const MD5Digest& rhs) {
- for (size_t i = 0; i < std::size(lhs.a); ++i)
- EXPECT_EQ(lhs.a[i], rhs.a[i]);
- }
- } // namespace base
|