1*e7b1675dSTing-Kang Chang // Copyright 2017 Google Inc.
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/util/enums.h"
18*e7b1675dSTing-Kang Chang
19*e7b1675dSTing-Kang Chang #include "gtest/gtest.h"
20*e7b1675dSTing-Kang Chang #include "tink/subtle/common_enums.h"
21*e7b1675dSTing-Kang Chang #include "proto/common.pb.h"
22*e7b1675dSTing-Kang Chang
23*e7b1675dSTing-Kang Chang using crypto::tink::util::Enums;
24*e7b1675dSTing-Kang Chang
25*e7b1675dSTing-Kang Chang namespace crypto {
26*e7b1675dSTing-Kang Chang
27*e7b1675dSTing-Kang Chang namespace pb = google::crypto::tink;
28*e7b1675dSTing-Kang Chang
29*e7b1675dSTing-Kang Chang namespace tink {
30*e7b1675dSTing-Kang Chang namespace {
31*e7b1675dSTing-Kang Chang
32*e7b1675dSTing-Kang Chang class EnumsTest : public ::testing::Test {};
33*e7b1675dSTing-Kang Chang
TEST_F(EnumsTest,testEllipticCurveType)34*e7b1675dSTing-Kang Chang TEST_F(EnumsTest, testEllipticCurveType) {
35*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::EllipticCurveType::NIST_P256,
36*e7b1675dSTing-Kang Chang Enums::SubtleToProto(subtle::EllipticCurveType::NIST_P256));
37*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::EllipticCurveType::NIST_P384,
38*e7b1675dSTing-Kang Chang Enums::SubtleToProto(subtle::EllipticCurveType::NIST_P384));
39*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::EllipticCurveType::NIST_P521,
40*e7b1675dSTing-Kang Chang Enums::SubtleToProto(subtle::EllipticCurveType::NIST_P521));
41*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::EllipticCurveType::CURVE25519,
42*e7b1675dSTing-Kang Chang Enums::SubtleToProto(subtle::EllipticCurveType::CURVE25519));
43*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::EllipticCurveType::UNKNOWN_CURVE,
44*e7b1675dSTing-Kang Chang Enums::SubtleToProto(subtle::EllipticCurveType::UNKNOWN_CURVE));
45*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::EllipticCurveType::UNKNOWN_CURVE,
46*e7b1675dSTing-Kang Chang Enums::SubtleToProto((subtle::EllipticCurveType)42));
47*e7b1675dSTing-Kang Chang
48*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::EllipticCurveType::NIST_P256,
49*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle(pb::EllipticCurveType::NIST_P256));
50*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::EllipticCurveType::NIST_P384,
51*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle(pb::EllipticCurveType::NIST_P384));
52*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::EllipticCurveType::NIST_P521,
53*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle(pb::EllipticCurveType::NIST_P521));
54*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::EllipticCurveType::CURVE25519,
55*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle(pb::EllipticCurveType::CURVE25519));
56*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::EllipticCurveType::UNKNOWN_CURVE,
57*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle(pb::EllipticCurveType::UNKNOWN_CURVE));
58*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::EllipticCurveType::UNKNOWN_CURVE,
59*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle((pb::EllipticCurveType)42));
60*e7b1675dSTing-Kang Chang
61*e7b1675dSTing-Kang Chang // Check that enum conversion covers the entire range of the proto-enum.
62*e7b1675dSTing-Kang Chang int count = 0;
63*e7b1675dSTing-Kang Chang for (int int_type = static_cast<int>(pb::EllipticCurveType_MIN);
64*e7b1675dSTing-Kang Chang int_type <= static_cast<int>(pb::EllipticCurveType_MAX); int_type++) {
65*e7b1675dSTing-Kang Chang if (pb::EllipticCurveType_IsValid(int_type)) {
66*e7b1675dSTing-Kang Chang pb::EllipticCurveType type = static_cast<pb::EllipticCurveType>(int_type);
67*e7b1675dSTing-Kang Chang EXPECT_EQ(type, Enums::SubtleToProto(Enums::ProtoToSubtle(type)));
68*e7b1675dSTing-Kang Chang count++;
69*e7b1675dSTing-Kang Chang }
70*e7b1675dSTing-Kang Chang }
71*e7b1675dSTing-Kang Chang EXPECT_EQ(5, count);
72*e7b1675dSTing-Kang Chang }
73*e7b1675dSTing-Kang Chang
TEST_F(EnumsTest,testHashType)74*e7b1675dSTing-Kang Chang TEST_F(EnumsTest, testHashType) {
75*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::HashType::SHA1, Enums::SubtleToProto(subtle::HashType::SHA1));
76*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::HashType::SHA224,
77*e7b1675dSTing-Kang Chang Enums::SubtleToProto(subtle::HashType::SHA224));
78*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::HashType::SHA256,
79*e7b1675dSTing-Kang Chang Enums::SubtleToProto(subtle::HashType::SHA256));
80*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::HashType::SHA384,
81*e7b1675dSTing-Kang Chang Enums::SubtleToProto(subtle::HashType::SHA384));
82*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::HashType::SHA512,
83*e7b1675dSTing-Kang Chang Enums::SubtleToProto(subtle::HashType::SHA512));
84*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::HashType::UNKNOWN_HASH,
85*e7b1675dSTing-Kang Chang Enums::SubtleToProto(subtle::HashType::UNKNOWN_HASH));
86*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::HashType::UNKNOWN_HASH,
87*e7b1675dSTing-Kang Chang Enums::SubtleToProto((subtle::HashType)42));
88*e7b1675dSTing-Kang Chang
89*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::HashType::SHA1, Enums::ProtoToSubtle(pb::HashType::SHA1));
90*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::HashType::SHA224,
91*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle(pb::HashType::SHA224));
92*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::HashType::SHA256,
93*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle(pb::HashType::SHA256));
94*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::HashType::SHA384,
95*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle(pb::HashType::SHA384));
96*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::HashType::SHA512,
97*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle(pb::HashType::SHA512));
98*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::HashType::UNKNOWN_HASH,
99*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle(pb::HashType::UNKNOWN_HASH));
100*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::HashType::UNKNOWN_HASH,
101*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle((pb::HashType)42));
102*e7b1675dSTing-Kang Chang
103*e7b1675dSTing-Kang Chang // Check that enum conversion covers the entire range of the proto-enum.
104*e7b1675dSTing-Kang Chang int count = 0;
105*e7b1675dSTing-Kang Chang for (int int_type = static_cast<int>(pb::HashType_MIN);
106*e7b1675dSTing-Kang Chang int_type <= static_cast<int>(pb::HashType_MAX); int_type++) {
107*e7b1675dSTing-Kang Chang if (pb::HashType_IsValid(int_type)) {
108*e7b1675dSTing-Kang Chang pb::HashType type = static_cast<pb::HashType>(int_type);
109*e7b1675dSTing-Kang Chang EXPECT_EQ(type, Enums::SubtleToProto(Enums::ProtoToSubtle(type)));
110*e7b1675dSTing-Kang Chang count++;
111*e7b1675dSTing-Kang Chang }
112*e7b1675dSTing-Kang Chang }
113*e7b1675dSTing-Kang Chang EXPECT_EQ(6, count);
114*e7b1675dSTing-Kang Chang }
115*e7b1675dSTing-Kang Chang
TEST_F(EnumsTest,testHashSize)116*e7b1675dSTing-Kang Chang TEST_F(EnumsTest, testHashSize) {
117*e7b1675dSTing-Kang Chang EXPECT_EQ(Enums::HashLength(pb::HashType::SHA256).value(), 32);
118*e7b1675dSTing-Kang Chang EXPECT_EQ(Enums::HashLength(pb::HashType::SHA384).value(), 48);
119*e7b1675dSTing-Kang Chang EXPECT_EQ(Enums::HashLength(pb::HashType::SHA512).value(), 64);
120*e7b1675dSTing-Kang Chang EXPECT_TRUE(!Enums::HashLength(pb::HashType::UNKNOWN_HASH).ok());
121*e7b1675dSTing-Kang Chang EXPECT_TRUE(!Enums::HashLength(pb::HashType::SHA1).ok());
122*e7b1675dSTing-Kang Chang }
123*e7b1675dSTing-Kang Chang
TEST_F(EnumsTest,testEcPointFormat)124*e7b1675dSTing-Kang Chang TEST_F(EnumsTest, testEcPointFormat) {
125*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::EcPointFormat::UNCOMPRESSED,
126*e7b1675dSTing-Kang Chang Enums::SubtleToProto(subtle::EcPointFormat::UNCOMPRESSED));
127*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::EcPointFormat::DO_NOT_USE_CRUNCHY_UNCOMPRESSED,
128*e7b1675dSTing-Kang Chang Enums::SubtleToProto(
129*e7b1675dSTing-Kang Chang subtle::EcPointFormat::DO_NOT_USE_CRUNCHY_UNCOMPRESSED));
130*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::EcPointFormat::COMPRESSED,
131*e7b1675dSTing-Kang Chang Enums::SubtleToProto(subtle::EcPointFormat::COMPRESSED));
132*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::EcPointFormat::UNKNOWN_FORMAT,
133*e7b1675dSTing-Kang Chang Enums::SubtleToProto(subtle::EcPointFormat::UNKNOWN_FORMAT));
134*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::EcPointFormat::UNKNOWN_FORMAT,
135*e7b1675dSTing-Kang Chang Enums::SubtleToProto((subtle::EcPointFormat)42));
136*e7b1675dSTing-Kang Chang
137*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::EcPointFormat::UNCOMPRESSED,
138*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle(pb::EcPointFormat::UNCOMPRESSED));
139*e7b1675dSTing-Kang Chang EXPECT_EQ(
140*e7b1675dSTing-Kang Chang subtle::EcPointFormat::DO_NOT_USE_CRUNCHY_UNCOMPRESSED,
141*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle(pb::EcPointFormat::DO_NOT_USE_CRUNCHY_UNCOMPRESSED));
142*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::EcPointFormat::COMPRESSED,
143*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle(pb::EcPointFormat::COMPRESSED));
144*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::EcPointFormat::UNKNOWN_FORMAT,
145*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle(pb::EcPointFormat::UNKNOWN_FORMAT));
146*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::EcPointFormat::UNKNOWN_FORMAT,
147*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle((pb::EcPointFormat)42));
148*e7b1675dSTing-Kang Chang
149*e7b1675dSTing-Kang Chang // Check that enum conversion covers the entire range of the proto-enum.
150*e7b1675dSTing-Kang Chang int count = 0;
151*e7b1675dSTing-Kang Chang for (int int_format = static_cast<int>(pb::EcPointFormat_MIN);
152*e7b1675dSTing-Kang Chang int_format <= static_cast<int>(pb::EcPointFormat_MAX); int_format++) {
153*e7b1675dSTing-Kang Chang if (pb::EcPointFormat_IsValid(int_format)) {
154*e7b1675dSTing-Kang Chang pb::EcPointFormat format = static_cast<pb::EcPointFormat>(int_format);
155*e7b1675dSTing-Kang Chang EXPECT_EQ(format, Enums::SubtleToProto(Enums::ProtoToSubtle(format)));
156*e7b1675dSTing-Kang Chang count++;
157*e7b1675dSTing-Kang Chang }
158*e7b1675dSTing-Kang Chang }
159*e7b1675dSTing-Kang Chang EXPECT_EQ(4, count);
160*e7b1675dSTing-Kang Chang }
161*e7b1675dSTing-Kang Chang
TEST_F(EnumsTest,testEcdsaSignatureEncoding)162*e7b1675dSTing-Kang Chang TEST_F(EnumsTest, testEcdsaSignatureEncoding) {
163*e7b1675dSTing-Kang Chang EXPECT_EQ(
164*e7b1675dSTing-Kang Chang pb::EcdsaSignatureEncoding::UNKNOWN_ENCODING,
165*e7b1675dSTing-Kang Chang Enums::SubtleToProto(subtle::EcdsaSignatureEncoding::UNKNOWN_ENCODING));
166*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::EcdsaSignatureEncoding::IEEE_P1363,
167*e7b1675dSTing-Kang Chang Enums::SubtleToProto(subtle::EcdsaSignatureEncoding::IEEE_P1363));
168*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::EcdsaSignatureEncoding::DER,
169*e7b1675dSTing-Kang Chang Enums::SubtleToProto(subtle::EcdsaSignatureEncoding::DER));
170*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::EcdsaSignatureEncoding::UNKNOWN_ENCODING,
171*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle(pb::EcdsaSignatureEncoding::UNKNOWN_ENCODING));
172*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::EcdsaSignatureEncoding::IEEE_P1363,
173*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle(pb::EcdsaSignatureEncoding::IEEE_P1363));
174*e7b1675dSTing-Kang Chang EXPECT_EQ(subtle::EcdsaSignatureEncoding::DER,
175*e7b1675dSTing-Kang Chang Enums::ProtoToSubtle(pb::EcdsaSignatureEncoding::DER));
176*e7b1675dSTing-Kang Chang // Check that enum conversion covers the entire range of the proto-enum.
177*e7b1675dSTing-Kang Chang int count = 0;
178*e7b1675dSTing-Kang Chang for (int int_encoding = static_cast<int>(pb::EcdsaSignatureEncoding_MIN);
179*e7b1675dSTing-Kang Chang int_encoding <= static_cast<int>(pb::EcdsaSignatureEncoding_MAX);
180*e7b1675dSTing-Kang Chang int_encoding++) {
181*e7b1675dSTing-Kang Chang if (pb::EcdsaSignatureEncoding_IsValid(int_encoding)) {
182*e7b1675dSTing-Kang Chang pb::EcdsaSignatureEncoding encoding =
183*e7b1675dSTing-Kang Chang static_cast<pb::EcdsaSignatureEncoding>(int_encoding);
184*e7b1675dSTing-Kang Chang EXPECT_EQ(encoding, Enums::SubtleToProto(Enums::ProtoToSubtle(encoding)));
185*e7b1675dSTing-Kang Chang count++;
186*e7b1675dSTing-Kang Chang }
187*e7b1675dSTing-Kang Chang }
188*e7b1675dSTing-Kang Chang EXPECT_EQ(3, count);
189*e7b1675dSTing-Kang Chang }
190*e7b1675dSTing-Kang Chang
TEST_F(EnumsTest,testKeyStatusName)191*e7b1675dSTing-Kang Chang TEST_F(EnumsTest, testKeyStatusName) {
192*e7b1675dSTing-Kang Chang EXPECT_EQ("ENABLED",
193*e7b1675dSTing-Kang Chang std::string(Enums::KeyStatusName(pb::KeyStatusType::ENABLED)));
194*e7b1675dSTing-Kang Chang EXPECT_EQ("DISABLED",
195*e7b1675dSTing-Kang Chang std::string(Enums::KeyStatusName(pb::KeyStatusType::DISABLED)));
196*e7b1675dSTing-Kang Chang EXPECT_EQ("DESTROYED",
197*e7b1675dSTing-Kang Chang std::string(Enums::KeyStatusName(pb::KeyStatusType::DESTROYED)));
198*e7b1675dSTing-Kang Chang EXPECT_EQ(
199*e7b1675dSTing-Kang Chang "UNKNOWN_STATUS",
200*e7b1675dSTing-Kang Chang std::string(Enums::KeyStatusName(pb::KeyStatusType::UNKNOWN_STATUS)));
201*e7b1675dSTing-Kang Chang EXPECT_EQ("UNKNOWN_STATUS",
202*e7b1675dSTing-Kang Chang std::string(Enums::KeyStatusName((pb::KeyStatusType)42)));
203*e7b1675dSTing-Kang Chang
204*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::KeyStatusType::ENABLED, Enums::KeyStatus("ENABLED"));
205*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::KeyStatusType::DISABLED, Enums::KeyStatus("DISABLED"));
206*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::KeyStatusType::DESTROYED, Enums::KeyStatus("DESTROYED"));
207*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::KeyStatusType::UNKNOWN_STATUS,
208*e7b1675dSTing-Kang Chang Enums::KeyStatus("Other string"));
209*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::KeyStatusType::UNKNOWN_STATUS,
210*e7b1675dSTing-Kang Chang Enums::KeyStatus("UNKNOWN_STATUS"));
211*e7b1675dSTing-Kang Chang
212*e7b1675dSTing-Kang Chang // Check that enum conversion covers the entire range of the proto-enum.
213*e7b1675dSTing-Kang Chang int count = 0;
214*e7b1675dSTing-Kang Chang for (int int_status = static_cast<int>(pb::KeyStatusType_MIN);
215*e7b1675dSTing-Kang Chang int_status <= static_cast<int>(pb::KeyStatusType_MAX); int_status++) {
216*e7b1675dSTing-Kang Chang if (pb::KeyStatusType_IsValid(int_status)) {
217*e7b1675dSTing-Kang Chang pb::KeyStatusType status = static_cast<pb::KeyStatusType>(int_status);
218*e7b1675dSTing-Kang Chang EXPECT_EQ(status, Enums::KeyStatus(Enums::KeyStatusName(status)));
219*e7b1675dSTing-Kang Chang count++;
220*e7b1675dSTing-Kang Chang }
221*e7b1675dSTing-Kang Chang }
222*e7b1675dSTing-Kang Chang EXPECT_EQ(4, count);
223*e7b1675dSTing-Kang Chang }
224*e7b1675dSTing-Kang Chang
TEST_F(EnumsTest,testHashName)225*e7b1675dSTing-Kang Chang TEST_F(EnumsTest, testHashName) {
226*e7b1675dSTing-Kang Chang EXPECT_EQ("SHA1", std::string(Enums::HashName(pb::HashType::SHA1)));
227*e7b1675dSTing-Kang Chang EXPECT_EQ("SHA256", std::string(Enums::HashName(pb::HashType::SHA256)));
228*e7b1675dSTing-Kang Chang EXPECT_EQ("SHA512", std::string(Enums::HashName(pb::HashType::SHA512)));
229*e7b1675dSTing-Kang Chang EXPECT_EQ("UNKNOWN_HASH",
230*e7b1675dSTing-Kang Chang std::string(Enums::HashName(pb::HashType::UNKNOWN_HASH)));
231*e7b1675dSTing-Kang Chang EXPECT_EQ("UNKNOWN_HASH", std::string(Enums::HashName((pb::HashType)42)));
232*e7b1675dSTing-Kang Chang
233*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::HashType::SHA1, Enums::Hash("SHA1"));
234*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::HashType::SHA224, Enums::Hash("SHA224"));
235*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::HashType::SHA256, Enums::Hash("SHA256"));
236*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::HashType::SHA384, Enums::Hash("SHA384"));
237*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::HashType::SHA512, Enums::Hash("SHA512"));
238*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::HashType::UNKNOWN_HASH, Enums::Hash("Other string"));
239*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::HashType::UNKNOWN_HASH, Enums::Hash("UNKNOWN_HASH"));
240*e7b1675dSTing-Kang Chang
241*e7b1675dSTing-Kang Chang // Check that enum conversion covers the entire range of the proto-enum.
242*e7b1675dSTing-Kang Chang int count = 0;
243*e7b1675dSTing-Kang Chang for (int int_hash = static_cast<int>(pb::HashType_MIN);
244*e7b1675dSTing-Kang Chang int_hash <= static_cast<int>(pb::HashType_MAX); int_hash++) {
245*e7b1675dSTing-Kang Chang if (pb::HashType_IsValid(int_hash)) {
246*e7b1675dSTing-Kang Chang pb::HashType hash = static_cast<pb::HashType>(int_hash);
247*e7b1675dSTing-Kang Chang EXPECT_EQ(hash, Enums::Hash(Enums::HashName(hash)));
248*e7b1675dSTing-Kang Chang count++;
249*e7b1675dSTing-Kang Chang }
250*e7b1675dSTing-Kang Chang }
251*e7b1675dSTing-Kang Chang EXPECT_EQ(6, count);
252*e7b1675dSTing-Kang Chang }
253*e7b1675dSTing-Kang Chang
TEST_F(EnumsTest,testKeyMaterialName)254*e7b1675dSTing-Kang Chang TEST_F(EnumsTest, testKeyMaterialName) {
255*e7b1675dSTing-Kang Chang EXPECT_EQ("SYMMETRIC",
256*e7b1675dSTing-Kang Chang std::string(Enums::KeyMaterialName(pb::KeyData::SYMMETRIC)));
257*e7b1675dSTing-Kang Chang EXPECT_EQ(
258*e7b1675dSTing-Kang Chang "ASYMMETRIC_PRIVATE",
259*e7b1675dSTing-Kang Chang std::string(Enums::KeyMaterialName(pb::KeyData::ASYMMETRIC_PRIVATE)));
260*e7b1675dSTing-Kang Chang EXPECT_EQ(
261*e7b1675dSTing-Kang Chang "ASYMMETRIC_PUBLIC",
262*e7b1675dSTing-Kang Chang std::string(Enums::KeyMaterialName(pb::KeyData::ASYMMETRIC_PUBLIC)));
263*e7b1675dSTing-Kang Chang EXPECT_EQ("REMOTE", std::string(Enums::KeyMaterialName(pb::KeyData::REMOTE)));
264*e7b1675dSTing-Kang Chang EXPECT_EQ(
265*e7b1675dSTing-Kang Chang "UNKNOWN_KEYMATERIAL",
266*e7b1675dSTing-Kang Chang std::string(Enums::KeyMaterialName(pb::KeyData::UNKNOWN_KEYMATERIAL)));
267*e7b1675dSTing-Kang Chang EXPECT_EQ(
268*e7b1675dSTing-Kang Chang "UNKNOWN_KEYMATERIAL",
269*e7b1675dSTing-Kang Chang std::string(Enums::KeyMaterialName((pb::KeyData::KeyMaterialType)42)));
270*e7b1675dSTing-Kang Chang
271*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::KeyData::SYMMETRIC, Enums::KeyMaterial("SYMMETRIC"));
272*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::KeyData::ASYMMETRIC_PRIVATE,
273*e7b1675dSTing-Kang Chang Enums::KeyMaterial("ASYMMETRIC_PRIVATE"));
274*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::KeyData::ASYMMETRIC_PUBLIC,
275*e7b1675dSTing-Kang Chang Enums::KeyMaterial("ASYMMETRIC_PUBLIC"));
276*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::KeyData::REMOTE, Enums::KeyMaterial("REMOTE"));
277*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::KeyData::UNKNOWN_KEYMATERIAL,
278*e7b1675dSTing-Kang Chang Enums::KeyMaterial("Other string"));
279*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::KeyData::UNKNOWN_KEYMATERIAL,
280*e7b1675dSTing-Kang Chang Enums::KeyMaterial("UNKNOWN_KEYMATERIAL"));
281*e7b1675dSTing-Kang Chang
282*e7b1675dSTing-Kang Chang // Check that enum conversion covers the entire range of the proto-enum.
283*e7b1675dSTing-Kang Chang int count = 0;
284*e7b1675dSTing-Kang Chang for (int int_type = static_cast<int>(pb::KeyData::KeyMaterialType_MIN);
285*e7b1675dSTing-Kang Chang int_type <= static_cast<int>(pb::KeyData::KeyMaterialType_MAX);
286*e7b1675dSTing-Kang Chang int_type++) {
287*e7b1675dSTing-Kang Chang if (pb::KeyData::KeyMaterialType_IsValid(int_type)) {
288*e7b1675dSTing-Kang Chang pb::KeyData::KeyMaterialType type =
289*e7b1675dSTing-Kang Chang static_cast<pb::KeyData::KeyMaterialType>(int_type);
290*e7b1675dSTing-Kang Chang EXPECT_EQ(type, Enums::KeyMaterial(Enums::KeyMaterialName(type)));
291*e7b1675dSTing-Kang Chang count++;
292*e7b1675dSTing-Kang Chang }
293*e7b1675dSTing-Kang Chang }
294*e7b1675dSTing-Kang Chang EXPECT_EQ(5, count);
295*e7b1675dSTing-Kang Chang }
296*e7b1675dSTing-Kang Chang
TEST_F(EnumsTest,testOutputPrefixName)297*e7b1675dSTing-Kang Chang TEST_F(EnumsTest, testOutputPrefixName) {
298*e7b1675dSTing-Kang Chang EXPECT_EQ("TINK",
299*e7b1675dSTing-Kang Chang std::string(Enums::OutputPrefixName(pb::OutputPrefixType::TINK)));
300*e7b1675dSTing-Kang Chang EXPECT_EQ("LEGACY",
301*e7b1675dSTing-Kang Chang std::string(Enums::OutputPrefixName(pb::OutputPrefixType::LEGACY)));
302*e7b1675dSTing-Kang Chang EXPECT_EQ("RAW",
303*e7b1675dSTing-Kang Chang std::string(Enums::OutputPrefixName(pb::OutputPrefixType::RAW)));
304*e7b1675dSTing-Kang Chang EXPECT_EQ(
305*e7b1675dSTing-Kang Chang "CRUNCHY",
306*e7b1675dSTing-Kang Chang std::string(Enums::OutputPrefixName(pb::OutputPrefixType::CRUNCHY)));
307*e7b1675dSTing-Kang Chang EXPECT_EQ("UNKNOWN_PREFIX", std::string(Enums::OutputPrefixName(
308*e7b1675dSTing-Kang Chang pb::OutputPrefixType::UNKNOWN_PREFIX)));
309*e7b1675dSTing-Kang Chang EXPECT_EQ("UNKNOWN_PREFIX",
310*e7b1675dSTing-Kang Chang std::string(Enums::OutputPrefixName((pb::OutputPrefixType)42)));
311*e7b1675dSTing-Kang Chang
312*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::OutputPrefixType::TINK, Enums::OutputPrefix("TINK"));
313*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::OutputPrefixType::LEGACY, Enums::OutputPrefix("LEGACY"));
314*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::OutputPrefixType::RAW, Enums::OutputPrefix("RAW"));
315*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::OutputPrefixType::CRUNCHY, Enums::OutputPrefix("CRUNCHY"));
316*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::OutputPrefixType::UNKNOWN_PREFIX,
317*e7b1675dSTing-Kang Chang Enums::OutputPrefix("Other string"));
318*e7b1675dSTing-Kang Chang EXPECT_EQ(pb::OutputPrefixType::UNKNOWN_PREFIX,
319*e7b1675dSTing-Kang Chang Enums::OutputPrefix("UNKNOWN_PREFIX"));
320*e7b1675dSTing-Kang Chang
321*e7b1675dSTing-Kang Chang // Check that enum conversion covers the entire range of the proto-enum.
322*e7b1675dSTing-Kang Chang int count = 0;
323*e7b1675dSTing-Kang Chang for (int int_type = static_cast<int>(pb::OutputPrefixType_MIN);
324*e7b1675dSTing-Kang Chang int_type <= static_cast<int>(pb::OutputPrefixType_MAX); int_type++) {
325*e7b1675dSTing-Kang Chang if (pb::OutputPrefixType_IsValid(int_type)) {
326*e7b1675dSTing-Kang Chang pb::OutputPrefixType type = static_cast<pb::OutputPrefixType>(int_type);
327*e7b1675dSTing-Kang Chang EXPECT_EQ(type, Enums::OutputPrefix(Enums::OutputPrefixName(type)));
328*e7b1675dSTing-Kang Chang count++;
329*e7b1675dSTing-Kang Chang }
330*e7b1675dSTing-Kang Chang }
331*e7b1675dSTing-Kang Chang EXPECT_EQ(5, count);
332*e7b1675dSTing-Kang Chang }
333*e7b1675dSTing-Kang Chang
334*e7b1675dSTing-Kang Chang } // namespace
335*e7b1675dSTing-Kang Chang } // namespace tink
336*e7b1675dSTing-Kang Chang } // namespace crypto
337