1*e7b1675dSTing-Kang Chang // Copyright 2023 Google LLC
2*e7b1675dSTing-Kang Chang //
3*e7b1675dSTing-Kang Chang // Licensed under the Apache License, Version 2.0 (the "License");
4*e7b1675dSTing-Kang Chang // you may not use this file except in compliance with the License.
5*e7b1675dSTing-Kang Chang // You may obtain a copy of the License at
6*e7b1675dSTing-Kang Chang //
7*e7b1675dSTing-Kang Chang // http://www.apache.org/licenses/LICENSE-2.0
8*e7b1675dSTing-Kang Chang //
9*e7b1675dSTing-Kang Chang // Unless required by applicable law or agreed to in writing, software
10*e7b1675dSTing-Kang Chang // distributed under the License is distributed on an "AS IS" BASIS,
11*e7b1675dSTing-Kang Chang // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*e7b1675dSTing-Kang Chang // See the License for the specific language governing permissions and
13*e7b1675dSTing-Kang Chang // limitations under the License.
14*e7b1675dSTing-Kang Chang //
15*e7b1675dSTing-Kang Chang ////////////////////////////////////////////////////////////////////////////////
16*e7b1675dSTing-Kang Chang
17*e7b1675dSTing-Kang Chang #include "tink/mac/hmac_parameters.h"
18*e7b1675dSTing-Kang Chang
19*e7b1675dSTing-Kang Chang #include <memory>
20*e7b1675dSTing-Kang Chang #include <tuple>
21*e7b1675dSTing-Kang Chang
22*e7b1675dSTing-Kang Chang #include "gmock/gmock.h"
23*e7b1675dSTing-Kang Chang #include "gtest/gtest.h"
24*e7b1675dSTing-Kang Chang #include "tink/util/statusor.h"
25*e7b1675dSTing-Kang Chang #include "tink/util/test_matchers.h"
26*e7b1675dSTing-Kang Chang
27*e7b1675dSTing-Kang Chang namespace crypto {
28*e7b1675dSTing-Kang Chang namespace tink {
29*e7b1675dSTing-Kang Chang namespace {
30*e7b1675dSTing-Kang Chang
31*e7b1675dSTing-Kang Chang using ::crypto::tink::test::IsOk;
32*e7b1675dSTing-Kang Chang using ::crypto::tink::test::StatusIs;
33*e7b1675dSTing-Kang Chang using ::testing::Combine;
34*e7b1675dSTing-Kang Chang using ::testing::Eq;
35*e7b1675dSTing-Kang Chang using ::testing::Range;
36*e7b1675dSTing-Kang Chang using ::testing::TestWithParam;
37*e7b1675dSTing-Kang Chang using ::testing::Values;
38*e7b1675dSTing-Kang Chang
39*e7b1675dSTing-Kang Chang struct CreateTestCase {
40*e7b1675dSTing-Kang Chang HmacParameters::Variant variant;
41*e7b1675dSTing-Kang Chang int key_size;
42*e7b1675dSTing-Kang Chang int cryptographic_tag_size;
43*e7b1675dSTing-Kang Chang int total_tag_size;
44*e7b1675dSTing-Kang Chang HmacParameters::HashType hash_type;
45*e7b1675dSTing-Kang Chang bool has_id_requirement;
46*e7b1675dSTing-Kang Chang };
47*e7b1675dSTing-Kang Chang
48*e7b1675dSTing-Kang Chang using HmacParametersCreateTest = TestWithParam<CreateTestCase>;
49*e7b1675dSTing-Kang Chang
50*e7b1675dSTing-Kang Chang INSTANTIATE_TEST_SUITE_P(
51*e7b1675dSTing-Kang Chang HmacParametersCreateTestSuite, HmacParametersCreateTest,
52*e7b1675dSTing-Kang Chang Values(CreateTestCase{HmacParameters::Variant::kNoPrefix, /*key_size=*/16,
53*e7b1675dSTing-Kang Chang /*cryptographic_tag_size=*/20, /*total_tag_size=*/20,
54*e7b1675dSTing-Kang Chang HmacParameters::HashType::kSha1,
55*e7b1675dSTing-Kang Chang /*has_id_requirement=*/false},
56*e7b1675dSTing-Kang Chang CreateTestCase{HmacParameters::Variant::kTink, /*key_size=*/16,
57*e7b1675dSTing-Kang Chang /*cryptographic_tag_size=*/28, /*total_tag_size=*/33,
58*e7b1675dSTing-Kang Chang HmacParameters::HashType::kSha224,
59*e7b1675dSTing-Kang Chang /*has_id_requirement=*/true},
60*e7b1675dSTing-Kang Chang CreateTestCase{HmacParameters::Variant::kCrunchy, /*key_size=*/16,
61*e7b1675dSTing-Kang Chang /*cryptographic_tag_size=*/32, /*total_tag_size=*/37,
62*e7b1675dSTing-Kang Chang HmacParameters::HashType::kSha256,
63*e7b1675dSTing-Kang Chang /*has_id_requirement=*/true},
64*e7b1675dSTing-Kang Chang CreateTestCase{HmacParameters::Variant::kLegacy, /*key_size=*/32,
65*e7b1675dSTing-Kang Chang /*cryptographic_tag_size=*/48, /*total_tag_size=*/53,
66*e7b1675dSTing-Kang Chang HmacParameters::HashType::kSha384,
67*e7b1675dSTing-Kang Chang /*has_id_requirement=*/true},
68*e7b1675dSTing-Kang Chang CreateTestCase{HmacParameters::Variant::kNoPrefix,
69*e7b1675dSTing-Kang Chang /*key_size=*/32, /*cryptographic_tag_size=*/64,
70*e7b1675dSTing-Kang Chang /*total_tag_size=*/64,
71*e7b1675dSTing-Kang Chang HmacParameters::HashType::kSha512,
72*e7b1675dSTing-Kang Chang /*has_id_requirement=*/false}));
73*e7b1675dSTing-Kang Chang
TEST_P(HmacParametersCreateTest,Create)74*e7b1675dSTing-Kang Chang TEST_P(HmacParametersCreateTest, Create) {
75*e7b1675dSTing-Kang Chang CreateTestCase test_case = GetParam();
76*e7b1675dSTing-Kang Chang
77*e7b1675dSTing-Kang Chang util::StatusOr<HmacParameters> parameters = HmacParameters::Create(
78*e7b1675dSTing-Kang Chang test_case.key_size, test_case.cryptographic_tag_size, test_case.hash_type,
79*e7b1675dSTing-Kang Chang test_case.variant);
80*e7b1675dSTing-Kang Chang ASSERT_THAT(parameters, IsOk());
81*e7b1675dSTing-Kang Chang
82*e7b1675dSTing-Kang Chang EXPECT_THAT(parameters->GetVariant(), Eq(test_case.variant));
83*e7b1675dSTing-Kang Chang EXPECT_THAT(parameters->KeySizeInBytes(), Eq(test_case.key_size));
84*e7b1675dSTing-Kang Chang EXPECT_THAT(parameters->CryptographicTagSizeInBytes(),
85*e7b1675dSTing-Kang Chang Eq(test_case.cryptographic_tag_size));
86*e7b1675dSTing-Kang Chang EXPECT_THAT(parameters->TotalTagSizeInBytes(), Eq(test_case.total_tag_size));
87*e7b1675dSTing-Kang Chang EXPECT_THAT(parameters->GetHashType(), Eq(test_case.hash_type));
88*e7b1675dSTing-Kang Chang EXPECT_THAT(parameters->HasIdRequirement(), Eq(test_case.has_id_requirement));
89*e7b1675dSTing-Kang Chang }
90*e7b1675dSTing-Kang Chang
TEST(HmacParametersTest,CreateWithInvalidVariantFails)91*e7b1675dSTing-Kang Chang TEST(HmacParametersTest, CreateWithInvalidVariantFails) {
92*e7b1675dSTing-Kang Chang EXPECT_THAT(HmacParameters::Create(
93*e7b1675dSTing-Kang Chang /*key_size_in_bytes=*/16,
94*e7b1675dSTing-Kang Chang /*cryptographic_tag_size_in_bytes=*/12,
95*e7b1675dSTing-Kang Chang HmacParameters::HashType::kSha256,
96*e7b1675dSTing-Kang Chang HmacParameters::Variant::
97*e7b1675dSTing-Kang Chang kDoNotUseInsteadUseDefaultWhenWritingSwitchStatements)
98*e7b1675dSTing-Kang Chang .status(),
99*e7b1675dSTing-Kang Chang StatusIs(absl::StatusCode::kInvalidArgument));
100*e7b1675dSTing-Kang Chang }
101*e7b1675dSTing-Kang Chang
TEST(HmacParametersTest,CreateWithInvalidHashTypeFails)102*e7b1675dSTing-Kang Chang TEST(HmacParametersTest, CreateWithInvalidHashTypeFails) {
103*e7b1675dSTing-Kang Chang EXPECT_THAT(HmacParameters::Create(
104*e7b1675dSTing-Kang Chang /*key_size_in_bytes=*/32,
105*e7b1675dSTing-Kang Chang /*cryptographic_tag_size_in_bytes=*/12,
106*e7b1675dSTing-Kang Chang HmacParameters::HashType::
107*e7b1675dSTing-Kang Chang kDoNotUseInsteadUseDefaultWhenWritingSwitchStatements,
108*e7b1675dSTing-Kang Chang HmacParameters::Variant::kNoPrefix)
109*e7b1675dSTing-Kang Chang .status(),
110*e7b1675dSTing-Kang Chang StatusIs(absl::StatusCode::kInvalidArgument));
111*e7b1675dSTing-Kang Chang }
112*e7b1675dSTing-Kang Chang
TEST(HmacParametersTest,CreateWithInvalidKeySizeFails)113*e7b1675dSTing-Kang Chang TEST(HmacParametersTest, CreateWithInvalidKeySizeFails) {
114*e7b1675dSTing-Kang Chang EXPECT_THAT(HmacParameters::Create(/*key_size_in_bytes=*/15,
115*e7b1675dSTing-Kang Chang /*cryptographic_tag_size_in_bytes=*/16,
116*e7b1675dSTing-Kang Chang HmacParameters::HashType::kSha256,
117*e7b1675dSTing-Kang Chang HmacParameters::Variant::kNoPrefix)
118*e7b1675dSTing-Kang Chang .status(),
119*e7b1675dSTing-Kang Chang StatusIs(absl::StatusCode::kInvalidArgument));
120*e7b1675dSTing-Kang Chang }
121*e7b1675dSTing-Kang Chang
TEST(HmacParametersTest,CreateWithInvalidTagSizeFails)122*e7b1675dSTing-Kang Chang TEST(HmacParametersTest, CreateWithInvalidTagSizeFails) {
123*e7b1675dSTing-Kang Chang // Too small.
124*e7b1675dSTing-Kang Chang EXPECT_THAT(HmacParameters::Create(/*key_size_in_bytes=*/32,
125*e7b1675dSTing-Kang Chang /*cryptographic_tag_size_in_bytes=*/7,
126*e7b1675dSTing-Kang Chang HmacParameters::HashType::kSha224,
127*e7b1675dSTing-Kang Chang HmacParameters::Variant::kNoPrefix)
128*e7b1675dSTing-Kang Chang .status(),
129*e7b1675dSTing-Kang Chang StatusIs(absl::StatusCode::kInvalidArgument));
130*e7b1675dSTing-Kang Chang // Too big for kSha1.
131*e7b1675dSTing-Kang Chang EXPECT_THAT(HmacParameters::Create(/*key_size_in_bytes=*/32,
132*e7b1675dSTing-Kang Chang /*cryptographic_tag_size_in_bytes=*/21,
133*e7b1675dSTing-Kang Chang HmacParameters::HashType::kSha1,
134*e7b1675dSTing-Kang Chang HmacParameters::Variant::kNoPrefix)
135*e7b1675dSTing-Kang Chang .status(),
136*e7b1675dSTing-Kang Chang StatusIs(absl::StatusCode::kInvalidArgument));
137*e7b1675dSTing-Kang Chang // Too big for kSha224.
138*e7b1675dSTing-Kang Chang EXPECT_THAT(HmacParameters::Create(/*key_size_in_bytes=*/32,
139*e7b1675dSTing-Kang Chang /*cryptographic_tag_size_in_bytes=*/29,
140*e7b1675dSTing-Kang Chang HmacParameters::HashType::kSha224,
141*e7b1675dSTing-Kang Chang HmacParameters::Variant::kNoPrefix)
142*e7b1675dSTing-Kang Chang .status(),
143*e7b1675dSTing-Kang Chang StatusIs(absl::StatusCode::kInvalidArgument));
144*e7b1675dSTing-Kang Chang // Too big for kSha256;
145*e7b1675dSTing-Kang Chang EXPECT_THAT(HmacParameters::Create(/*key_size_in_bytes=*/32,
146*e7b1675dSTing-Kang Chang /*cryptographic_tag_size_in_bytes=*/33,
147*e7b1675dSTing-Kang Chang HmacParameters::HashType::kSha256,
148*e7b1675dSTing-Kang Chang HmacParameters::Variant::kNoPrefix)
149*e7b1675dSTing-Kang Chang .status(),
150*e7b1675dSTing-Kang Chang StatusIs(absl::StatusCode::kInvalidArgument));
151*e7b1675dSTing-Kang Chang // Too big for kSha384;
152*e7b1675dSTing-Kang Chang EXPECT_THAT(HmacParameters::Create(/*key_size_in_bytes=*/32,
153*e7b1675dSTing-Kang Chang /*cryptographic_tag_size_in_bytes=*/49,
154*e7b1675dSTing-Kang Chang HmacParameters::HashType::kSha384,
155*e7b1675dSTing-Kang Chang HmacParameters::Variant::kNoPrefix)
156*e7b1675dSTing-Kang Chang .status(),
157*e7b1675dSTing-Kang Chang StatusIs(absl::StatusCode::kInvalidArgument));
158*e7b1675dSTing-Kang Chang // Too big for kSha512;
159*e7b1675dSTing-Kang Chang EXPECT_THAT(HmacParameters::Create(/*key_size_in_bytes=*/32,
160*e7b1675dSTing-Kang Chang /*cryptographic_tag_size_in_bytes=*/65,
161*e7b1675dSTing-Kang Chang HmacParameters::HashType::kSha512,
162*e7b1675dSTing-Kang Chang HmacParameters::Variant::kNoPrefix)
163*e7b1675dSTing-Kang Chang .status(),
164*e7b1675dSTing-Kang Chang StatusIs(absl::StatusCode::kInvalidArgument));
165*e7b1675dSTing-Kang Chang }
166*e7b1675dSTing-Kang Chang
TEST(HmacParametersTest,CopyConstructor)167*e7b1675dSTing-Kang Chang TEST(HmacParametersTest, CopyConstructor) {
168*e7b1675dSTing-Kang Chang util::StatusOr<HmacParameters> parameters = HmacParameters::Create(
169*e7b1675dSTing-Kang Chang /*key_size_in_bytes=*/32,
170*e7b1675dSTing-Kang Chang /*cryptographic_tag_size_in_bytes=*/12, HmacParameters::HashType::kSha256,
171*e7b1675dSTing-Kang Chang HmacParameters::Variant::kTink);
172*e7b1675dSTing-Kang Chang ASSERT_THAT(parameters, IsOk());
173*e7b1675dSTing-Kang Chang
174*e7b1675dSTing-Kang Chang HmacParameters copy(*parameters);
175*e7b1675dSTing-Kang Chang EXPECT_THAT(copy.GetVariant(), Eq(parameters->GetVariant()));
176*e7b1675dSTing-Kang Chang EXPECT_THAT(copy.CryptographicTagSizeInBytes(),
177*e7b1675dSTing-Kang Chang Eq(parameters->CryptographicTagSizeInBytes()));
178*e7b1675dSTing-Kang Chang EXPECT_THAT(copy.TotalTagSizeInBytes(),
179*e7b1675dSTing-Kang Chang Eq(parameters->TotalTagSizeInBytes()));
180*e7b1675dSTing-Kang Chang EXPECT_THAT(copy.GetHashType(), Eq(parameters->GetHashType()));
181*e7b1675dSTing-Kang Chang EXPECT_THAT(copy.HasIdRequirement(), Eq(parameters->HasIdRequirement()));
182*e7b1675dSTing-Kang Chang }
183*e7b1675dSTing-Kang Chang
TEST(HmacParametersTest,CopyAssignment)184*e7b1675dSTing-Kang Chang TEST(HmacParametersTest, CopyAssignment) {
185*e7b1675dSTing-Kang Chang util::StatusOr<HmacParameters> parameters = HmacParameters::Create(
186*e7b1675dSTing-Kang Chang /*key_size_in_bytes=*/32,
187*e7b1675dSTing-Kang Chang /*cryptographic_tag_size_in_bytes=*/12, HmacParameters::HashType::kSha512,
188*e7b1675dSTing-Kang Chang HmacParameters::Variant::kTink);
189*e7b1675dSTing-Kang Chang ASSERT_THAT(parameters, IsOk());
190*e7b1675dSTing-Kang Chang
191*e7b1675dSTing-Kang Chang HmacParameters copy = *parameters;
192*e7b1675dSTing-Kang Chang EXPECT_THAT(copy.GetVariant(), Eq(parameters->GetVariant()));
193*e7b1675dSTing-Kang Chang EXPECT_THAT(copy.CryptographicTagSizeInBytes(),
194*e7b1675dSTing-Kang Chang Eq(parameters->CryptographicTagSizeInBytes()));
195*e7b1675dSTing-Kang Chang EXPECT_THAT(copy.TotalTagSizeInBytes(),
196*e7b1675dSTing-Kang Chang Eq(parameters->TotalTagSizeInBytes()));
197*e7b1675dSTing-Kang Chang EXPECT_THAT(copy.GetHashType(), Eq(parameters->GetHashType()));
198*e7b1675dSTing-Kang Chang EXPECT_THAT(copy.HasIdRequirement(), Eq(parameters->HasIdRequirement()));
199*e7b1675dSTing-Kang Chang }
200*e7b1675dSTing-Kang Chang
201*e7b1675dSTing-Kang Chang using HmacParametersVariantTest = TestWithParam<
202*e7b1675dSTing-Kang Chang std::tuple<int, int, HmacParameters::HashType, HmacParameters::Variant>>;
203*e7b1675dSTing-Kang Chang
204*e7b1675dSTing-Kang Chang INSTANTIATE_TEST_SUITE_P(HmacParametersVariantTestSuite,
205*e7b1675dSTing-Kang Chang HmacParametersVariantTest,
206*e7b1675dSTing-Kang Chang Combine(Range(16, 32), Range(10, 20),
207*e7b1675dSTing-Kang Chang Values(HmacParameters::HashType::kSha1,
208*e7b1675dSTing-Kang Chang HmacParameters::HashType::kSha224,
209*e7b1675dSTing-Kang Chang HmacParameters::HashType::kSha256,
210*e7b1675dSTing-Kang Chang HmacParameters::HashType::kSha384,
211*e7b1675dSTing-Kang Chang HmacParameters::HashType::kSha512),
212*e7b1675dSTing-Kang Chang Values(HmacParameters::Variant::kTink,
213*e7b1675dSTing-Kang Chang HmacParameters::Variant::kCrunchy,
214*e7b1675dSTing-Kang Chang HmacParameters::Variant::kLegacy,
215*e7b1675dSTing-Kang Chang HmacParameters::Variant::kNoPrefix)));
216*e7b1675dSTing-Kang Chang
TEST_P(HmacParametersVariantTest,ParametersEquals)217*e7b1675dSTing-Kang Chang TEST_P(HmacParametersVariantTest, ParametersEquals) {
218*e7b1675dSTing-Kang Chang int key_size;
219*e7b1675dSTing-Kang Chang int cryptographic_tag_size;
220*e7b1675dSTing-Kang Chang HmacParameters::HashType hash_type;
221*e7b1675dSTing-Kang Chang HmacParameters::Variant variant;
222*e7b1675dSTing-Kang Chang std::tie(key_size, cryptographic_tag_size, hash_type, variant) = GetParam();
223*e7b1675dSTing-Kang Chang
224*e7b1675dSTing-Kang Chang util::StatusOr<HmacParameters> parameters = HmacParameters::Create(
225*e7b1675dSTing-Kang Chang key_size, cryptographic_tag_size, hash_type, variant);
226*e7b1675dSTing-Kang Chang ASSERT_THAT(parameters, IsOk());
227*e7b1675dSTing-Kang Chang
228*e7b1675dSTing-Kang Chang util::StatusOr<HmacParameters> other_parameters = HmacParameters::Create(
229*e7b1675dSTing-Kang Chang key_size, cryptographic_tag_size, hash_type, variant);
230*e7b1675dSTing-Kang Chang ASSERT_THAT(other_parameters, IsOk());
231*e7b1675dSTing-Kang Chang
232*e7b1675dSTing-Kang Chang EXPECT_TRUE(*parameters == *other_parameters);
233*e7b1675dSTing-Kang Chang EXPECT_TRUE(*other_parameters == *parameters);
234*e7b1675dSTing-Kang Chang EXPECT_FALSE(*parameters != *other_parameters);
235*e7b1675dSTing-Kang Chang EXPECT_FALSE(*other_parameters != *parameters);
236*e7b1675dSTing-Kang Chang }
237*e7b1675dSTing-Kang Chang
TEST(HmacParametersTest,KeySizeNotEqual)238*e7b1675dSTing-Kang Chang TEST(HmacParametersTest, KeySizeNotEqual) {
239*e7b1675dSTing-Kang Chang util::StatusOr<HmacParameters> parameters = HmacParameters::Create(
240*e7b1675dSTing-Kang Chang /*key_size_in_bytes=*/16,
241*e7b1675dSTing-Kang Chang /*cryptographic_tag_size_in_bytes=*/10, HmacParameters::HashType::kSha224,
242*e7b1675dSTing-Kang Chang HmacParameters::Variant::kNoPrefix);
243*e7b1675dSTing-Kang Chang ASSERT_THAT(parameters, IsOk());
244*e7b1675dSTing-Kang Chang
245*e7b1675dSTing-Kang Chang util::StatusOr<HmacParameters> other_parameters = HmacParameters::Create(
246*e7b1675dSTing-Kang Chang /*key_size_in_bytes=*/32,
247*e7b1675dSTing-Kang Chang /*cryptographic_tag_size_in_bytes=*/10, HmacParameters::HashType::kSha224,
248*e7b1675dSTing-Kang Chang HmacParameters::Variant::kNoPrefix);
249*e7b1675dSTing-Kang Chang ASSERT_THAT(other_parameters, IsOk());
250*e7b1675dSTing-Kang Chang
251*e7b1675dSTing-Kang Chang EXPECT_TRUE(*parameters != *other_parameters);
252*e7b1675dSTing-Kang Chang EXPECT_FALSE(*parameters == *other_parameters);
253*e7b1675dSTing-Kang Chang }
254*e7b1675dSTing-Kang Chang
TEST(HmacParametersTest,HashTypeNotEqual)255*e7b1675dSTing-Kang Chang TEST(HmacParametersTest, HashTypeNotEqual) {
256*e7b1675dSTing-Kang Chang util::StatusOr<HmacParameters> parameters = HmacParameters::Create(
257*e7b1675dSTing-Kang Chang /*key_size_in_bytes=*/32,
258*e7b1675dSTing-Kang Chang /*cryptographic_tag_size_in_bytes=*/10, HmacParameters::HashType::kSha256,
259*e7b1675dSTing-Kang Chang HmacParameters::Variant::kNoPrefix);
260*e7b1675dSTing-Kang Chang ASSERT_THAT(parameters, IsOk());
261*e7b1675dSTing-Kang Chang
262*e7b1675dSTing-Kang Chang util::StatusOr<HmacParameters> other_parameters = HmacParameters::Create(
263*e7b1675dSTing-Kang Chang /*key_size_in_bytes=*/32,
264*e7b1675dSTing-Kang Chang /*cryptographic_tag_size_in_bytes=*/10, HmacParameters::HashType::kSha512,
265*e7b1675dSTing-Kang Chang HmacParameters::Variant::kNoPrefix);
266*e7b1675dSTing-Kang Chang ASSERT_THAT(other_parameters, IsOk());
267*e7b1675dSTing-Kang Chang
268*e7b1675dSTing-Kang Chang EXPECT_TRUE(*parameters != *other_parameters);
269*e7b1675dSTing-Kang Chang EXPECT_FALSE(*parameters == *other_parameters);
270*e7b1675dSTing-Kang Chang }
271*e7b1675dSTing-Kang Chang
TEST(HmacParametersTest,TagSizeNotEqual)272*e7b1675dSTing-Kang Chang TEST(HmacParametersTest, TagSizeNotEqual) {
273*e7b1675dSTing-Kang Chang util::StatusOr<HmacParameters> parameters = HmacParameters::Create(
274*e7b1675dSTing-Kang Chang /*key_size_in_bytes=*/32,
275*e7b1675dSTing-Kang Chang /*cryptographic_tag_size_in_bytes=*/10, HmacParameters::HashType::kSha256,
276*e7b1675dSTing-Kang Chang HmacParameters::Variant::kNoPrefix);
277*e7b1675dSTing-Kang Chang ASSERT_THAT(parameters, IsOk());
278*e7b1675dSTing-Kang Chang
279*e7b1675dSTing-Kang Chang util::StatusOr<HmacParameters> other_parameters = HmacParameters::Create(
280*e7b1675dSTing-Kang Chang /*key_size_in_bytes=*/32,
281*e7b1675dSTing-Kang Chang /*cryptographic_tag_size_in_bytes=*/11, HmacParameters::HashType::kSha256,
282*e7b1675dSTing-Kang Chang HmacParameters::Variant::kNoPrefix);
283*e7b1675dSTing-Kang Chang ASSERT_THAT(other_parameters, IsOk());
284*e7b1675dSTing-Kang Chang
285*e7b1675dSTing-Kang Chang EXPECT_TRUE(*parameters != *other_parameters);
286*e7b1675dSTing-Kang Chang EXPECT_FALSE(*parameters == *other_parameters);
287*e7b1675dSTing-Kang Chang }
288*e7b1675dSTing-Kang Chang
TEST(HmacParametersTest,VariantNotEqual)289*e7b1675dSTing-Kang Chang TEST(HmacParametersTest, VariantNotEqual) {
290*e7b1675dSTing-Kang Chang util::StatusOr<HmacParameters> parameters = HmacParameters::Create(
291*e7b1675dSTing-Kang Chang /*key_size_in_bytes=*/32,
292*e7b1675dSTing-Kang Chang /*cryptographic_tag_size_in_bytes=*/10, HmacParameters::HashType::kSha256,
293*e7b1675dSTing-Kang Chang HmacParameters::Variant::kNoPrefix);
294*e7b1675dSTing-Kang Chang ASSERT_THAT(parameters, IsOk());
295*e7b1675dSTing-Kang Chang
296*e7b1675dSTing-Kang Chang util::StatusOr<HmacParameters> other_parameters = HmacParameters::Create(
297*e7b1675dSTing-Kang Chang /*key_size_in_bytes=*/32,
298*e7b1675dSTing-Kang Chang /*cryptographic_tag_size_in_bytes=*/10, HmacParameters::HashType::kSha256,
299*e7b1675dSTing-Kang Chang HmacParameters::Variant::kTink);
300*e7b1675dSTing-Kang Chang ASSERT_THAT(other_parameters, IsOk());
301*e7b1675dSTing-Kang Chang
302*e7b1675dSTing-Kang Chang EXPECT_TRUE(*parameters != *other_parameters);
303*e7b1675dSTing-Kang Chang EXPECT_FALSE(*parameters == *other_parameters);
304*e7b1675dSTing-Kang Chang }
305*e7b1675dSTing-Kang Chang
306*e7b1675dSTing-Kang Chang } // namespace
307*e7b1675dSTing-Kang Chang } // namespace tink
308*e7b1675dSTing-Kang Chang } // namespace crypto
309