blob: 2413380a4d037ed2d301ffa11349cd2c2241c622 [file] [log] [blame]
Thai Duong7689ed62015-03-20 16:50:18 -07001/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Janis Danisevskisf54cc932017-05-10 15:29:10 -070017#include <keymaster/km_openssl/hmac.h>
Thai Duong7689ed62015-03-20 16:50:18 -070018
19#include <gtest/gtest.h>
20#include <string.h>
21
Shawn Willdenb6837e72015-05-16 09:20:59 -060022#include "android_keymaster_test_utils.h"
Thai Duong7689ed62015-03-20 16:50:18 -070023
24using std::string;
25
Thai Duong7689ed62015-03-20 16:50:18 -070026namespace keymaster {
27
28namespace test {
29
30struct HmacTest {
31 const char* data;
32 const char* key;
33 uint8_t digest[32];
34};
35
36static const HmacTest kHmacTests[] = {
37 {
38 "Test Using Larger Than Block-Size Key - Hash Key First",
39 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
40 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
41 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
42 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
43 {
Shawn Willden32873522020-12-14 22:29:46 -070044 0x60, 0xe4, 0x31, 0x59, 0x1e, 0xe0, 0xb6, 0x7f, 0x0d, 0x8a, 0x26,
45 0xaa, 0xcb, 0xf5, 0xb7, 0x7f, 0x8e, 0x0b, 0xc6, 0x21, 0x37, 0x28,
46 0xc5, 0x14, 0x05, 0x46, 0x04, 0x0f, 0x0e, 0xe3, 0x7f, 0x54,
Thai Duong7689ed62015-03-20 16:50:18 -070047 },
48 },
49 {
50 "The test message for the MD2, MD5, and SHA-1 hashing algorithms.",
51 "46697265666f7820616e64205468756e64657242697264206172652061776573"
52 "6f6d652100",
53 {
Shawn Willden32873522020-12-14 22:29:46 -070054 0x05, 0x75, 0x9a, 0x9e, 0x70, 0x5e, 0xe7, 0x44, 0xe2, 0x46, 0x4b,
55 0x92, 0x22, 0x14, 0x22, 0xe0, 0x1b, 0x92, 0x8a, 0x0c, 0xfe, 0xf5,
56 0x49, 0xe9, 0xa7, 0x1b, 0x56, 0x7d, 0x1d, 0x29, 0x40, 0x48,
Thai Duong7689ed62015-03-20 16:50:18 -070057 },
58 },
59};
60
61TEST(HmacTest, SHA256) {
62 for (size_t i = 0; i < 2; i++) {
63 const HmacTest& test(kHmacTests[i]);
64
65 HmacSha256 hmac;
66 const string key = hex2str(test.key);
67 Buffer key_buffer(key.data(), key.size());
68 ASSERT_TRUE(hmac.Init(key_buffer));
69
70 uint8_t digest_copy[sizeof(test.digest)];
71 memcpy(digest_copy, test.digest, sizeof(test.digest));
72 Buffer digest_buffer(reinterpret_cast<uint8_t*>(digest_copy), sizeof(digest_copy));
73
74 Buffer data_buffer(test.data, strlen(test.data));
75 EXPECT_TRUE(hmac.Verify(data_buffer, digest_buffer));
76
77 digest_copy[16] ^= 0x80;
78 digest_buffer.Reinitialize(reinterpret_cast<uint8_t*>(digest_copy), sizeof(digest_copy));
79 EXPECT_FALSE(hmac.Verify(data_buffer, digest_buffer));
80 }
81}
82
83} // namespace test
84} // namespace keymaster