xref: /aosp_15_r20/external/libchrome/base/sha1_unittest.cc (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1*635a8641SAndroid Build Coastguard Worker // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file.
4*635a8641SAndroid Build Coastguard Worker 
5*635a8641SAndroid Build Coastguard Worker #include "base/sha1.h"
6*635a8641SAndroid Build Coastguard Worker 
7*635a8641SAndroid Build Coastguard Worker #include <stddef.h>
8*635a8641SAndroid Build Coastguard Worker 
9*635a8641SAndroid Build Coastguard Worker #include <string>
10*635a8641SAndroid Build Coastguard Worker 
11*635a8641SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
12*635a8641SAndroid Build Coastguard Worker 
TEST(SHA1Test,Test1)13*635a8641SAndroid Build Coastguard Worker TEST(SHA1Test, Test1) {
14*635a8641SAndroid Build Coastguard Worker   // Example A.1 from FIPS 180-2: one-block message.
15*635a8641SAndroid Build Coastguard Worker   std::string input = "abc";
16*635a8641SAndroid Build Coastguard Worker 
17*635a8641SAndroid Build Coastguard Worker   int expected[] = { 0xa9, 0x99, 0x3e, 0x36,
18*635a8641SAndroid Build Coastguard Worker                      0x47, 0x06, 0x81, 0x6a,
19*635a8641SAndroid Build Coastguard Worker                      0xba, 0x3e, 0x25, 0x71,
20*635a8641SAndroid Build Coastguard Worker                      0x78, 0x50, 0xc2, 0x6c,
21*635a8641SAndroid Build Coastguard Worker                      0x9c, 0xd0, 0xd8, 0x9d };
22*635a8641SAndroid Build Coastguard Worker 
23*635a8641SAndroid Build Coastguard Worker   std::string output = base::SHA1HashString(input);
24*635a8641SAndroid Build Coastguard Worker   for (size_t i = 0; i < base::kSHA1Length; i++)
25*635a8641SAndroid Build Coastguard Worker     EXPECT_EQ(expected[i], output[i] & 0xFF);
26*635a8641SAndroid Build Coastguard Worker }
27*635a8641SAndroid Build Coastguard Worker 
TEST(SHA1Test,Test2)28*635a8641SAndroid Build Coastguard Worker TEST(SHA1Test, Test2) {
29*635a8641SAndroid Build Coastguard Worker   // Example A.2 from FIPS 180-2: multi-block message.
30*635a8641SAndroid Build Coastguard Worker   std::string input =
31*635a8641SAndroid Build Coastguard Worker       "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
32*635a8641SAndroid Build Coastguard Worker 
33*635a8641SAndroid Build Coastguard Worker   int expected[] = { 0x84, 0x98, 0x3e, 0x44,
34*635a8641SAndroid Build Coastguard Worker                      0x1c, 0x3b, 0xd2, 0x6e,
35*635a8641SAndroid Build Coastguard Worker                      0xba, 0xae, 0x4a, 0xa1,
36*635a8641SAndroid Build Coastguard Worker                      0xf9, 0x51, 0x29, 0xe5,
37*635a8641SAndroid Build Coastguard Worker                      0xe5, 0x46, 0x70, 0xf1 };
38*635a8641SAndroid Build Coastguard Worker 
39*635a8641SAndroid Build Coastguard Worker   std::string output = base::SHA1HashString(input);
40*635a8641SAndroid Build Coastguard Worker   for (size_t i = 0; i < base::kSHA1Length; i++)
41*635a8641SAndroid Build Coastguard Worker     EXPECT_EQ(expected[i], output[i] & 0xFF);
42*635a8641SAndroid Build Coastguard Worker }
43*635a8641SAndroid Build Coastguard Worker 
TEST(SHA1Test,Test3)44*635a8641SAndroid Build Coastguard Worker TEST(SHA1Test, Test3) {
45*635a8641SAndroid Build Coastguard Worker   // Example A.3 from FIPS 180-2: long message.
46*635a8641SAndroid Build Coastguard Worker   std::string input(1000000, 'a');
47*635a8641SAndroid Build Coastguard Worker 
48*635a8641SAndroid Build Coastguard Worker   int expected[] = { 0x34, 0xaa, 0x97, 0x3c,
49*635a8641SAndroid Build Coastguard Worker                      0xd4, 0xc4, 0xda, 0xa4,
50*635a8641SAndroid Build Coastguard Worker                      0xf6, 0x1e, 0xeb, 0x2b,
51*635a8641SAndroid Build Coastguard Worker                      0xdb, 0xad, 0x27, 0x31,
52*635a8641SAndroid Build Coastguard Worker                      0x65, 0x34, 0x01, 0x6f };
53*635a8641SAndroid Build Coastguard Worker 
54*635a8641SAndroid Build Coastguard Worker   std::string output = base::SHA1HashString(input);
55*635a8641SAndroid Build Coastguard Worker   for (size_t i = 0; i < base::kSHA1Length; i++)
56*635a8641SAndroid Build Coastguard Worker     EXPECT_EQ(expected[i], output[i] & 0xFF);
57*635a8641SAndroid Build Coastguard Worker }
58*635a8641SAndroid Build Coastguard Worker 
TEST(SHA1Test,Test1Bytes)59*635a8641SAndroid Build Coastguard Worker TEST(SHA1Test, Test1Bytes) {
60*635a8641SAndroid Build Coastguard Worker   // Example A.1 from FIPS 180-2: one-block message.
61*635a8641SAndroid Build Coastguard Worker   std::string input = "abc";
62*635a8641SAndroid Build Coastguard Worker   unsigned char output[base::kSHA1Length];
63*635a8641SAndroid Build Coastguard Worker 
64*635a8641SAndroid Build Coastguard Worker   unsigned char expected[] = { 0xa9, 0x99, 0x3e, 0x36,
65*635a8641SAndroid Build Coastguard Worker                                0x47, 0x06, 0x81, 0x6a,
66*635a8641SAndroid Build Coastguard Worker                                0xba, 0x3e, 0x25, 0x71,
67*635a8641SAndroid Build Coastguard Worker                                0x78, 0x50, 0xc2, 0x6c,
68*635a8641SAndroid Build Coastguard Worker                                0x9c, 0xd0, 0xd8, 0x9d };
69*635a8641SAndroid Build Coastguard Worker 
70*635a8641SAndroid Build Coastguard Worker   base::SHA1HashBytes(reinterpret_cast<const unsigned char*>(input.c_str()),
71*635a8641SAndroid Build Coastguard Worker                       input.length(), output);
72*635a8641SAndroid Build Coastguard Worker   for (size_t i = 0; i < base::kSHA1Length; i++)
73*635a8641SAndroid Build Coastguard Worker     EXPECT_EQ(expected[i], output[i]);
74*635a8641SAndroid Build Coastguard Worker }
75*635a8641SAndroid Build Coastguard Worker 
TEST(SHA1Test,Test2Bytes)76*635a8641SAndroid Build Coastguard Worker TEST(SHA1Test, Test2Bytes) {
77*635a8641SAndroid Build Coastguard Worker   // Example A.2 from FIPS 180-2: multi-block message.
78*635a8641SAndroid Build Coastguard Worker   std::string input =
79*635a8641SAndroid Build Coastguard Worker       "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
80*635a8641SAndroid Build Coastguard Worker   unsigned char output[base::kSHA1Length];
81*635a8641SAndroid Build Coastguard Worker 
82*635a8641SAndroid Build Coastguard Worker   unsigned char expected[] = { 0x84, 0x98, 0x3e, 0x44,
83*635a8641SAndroid Build Coastguard Worker                                0x1c, 0x3b, 0xd2, 0x6e,
84*635a8641SAndroid Build Coastguard Worker                                0xba, 0xae, 0x4a, 0xa1,
85*635a8641SAndroid Build Coastguard Worker                                0xf9, 0x51, 0x29, 0xe5,
86*635a8641SAndroid Build Coastguard Worker                                0xe5, 0x46, 0x70, 0xf1 };
87*635a8641SAndroid Build Coastguard Worker 
88*635a8641SAndroid Build Coastguard Worker   base::SHA1HashBytes(reinterpret_cast<const unsigned char*>(input.c_str()),
89*635a8641SAndroid Build Coastguard Worker                       input.length(), output);
90*635a8641SAndroid Build Coastguard Worker   for (size_t i = 0; i < base::kSHA1Length; i++)
91*635a8641SAndroid Build Coastguard Worker     EXPECT_EQ(expected[i], output[i]);
92*635a8641SAndroid Build Coastguard Worker }
93*635a8641SAndroid Build Coastguard Worker 
TEST(SHA1Test,Test3Bytes)94*635a8641SAndroid Build Coastguard Worker TEST(SHA1Test, Test3Bytes) {
95*635a8641SAndroid Build Coastguard Worker   // Example A.3 from FIPS 180-2: long message.
96*635a8641SAndroid Build Coastguard Worker   std::string input(1000000, 'a');
97*635a8641SAndroid Build Coastguard Worker   unsigned char output[base::kSHA1Length];
98*635a8641SAndroid Build Coastguard Worker 
99*635a8641SAndroid Build Coastguard Worker   unsigned char expected[] = { 0x34, 0xaa, 0x97, 0x3c,
100*635a8641SAndroid Build Coastguard Worker                                0xd4, 0xc4, 0xda, 0xa4,
101*635a8641SAndroid Build Coastguard Worker                                0xf6, 0x1e, 0xeb, 0x2b,
102*635a8641SAndroid Build Coastguard Worker                                0xdb, 0xad, 0x27, 0x31,
103*635a8641SAndroid Build Coastguard Worker                                0x65, 0x34, 0x01, 0x6f };
104*635a8641SAndroid Build Coastguard Worker 
105*635a8641SAndroid Build Coastguard Worker   base::SHA1HashBytes(reinterpret_cast<const unsigned char*>(input.c_str()),
106*635a8641SAndroid Build Coastguard Worker                       input.length(), output);
107*635a8641SAndroid Build Coastguard Worker   for (size_t i = 0; i < base::kSHA1Length; i++)
108*635a8641SAndroid Build Coastguard Worker     EXPECT_EQ(expected[i], output[i]);
109*635a8641SAndroid Build Coastguard Worker }
110