xref: /aosp_15_r20/external/tink/cc/util/enums.cc (revision e7b1675dde1b92d52ec075b0a92829627f2c52a5)
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 "absl/status/status.h"
20*e7b1675dSTing-Kang Chang #include "absl/strings/str_cat.h"
21*e7b1675dSTing-Kang Chang #include "tink/util/status.h"
22*e7b1675dSTing-Kang Chang #include "proto/common.pb.h"
23*e7b1675dSTing-Kang Chang #include "proto/ecdsa.pb.h"
24*e7b1675dSTing-Kang Chang #include "proto/tink.pb.h"
25*e7b1675dSTing-Kang Chang 
26*e7b1675dSTing-Kang Chang namespace crypto {
27*e7b1675dSTing-Kang Chang namespace tink {
28*e7b1675dSTing-Kang Chang namespace util {
29*e7b1675dSTing-Kang Chang 
30*e7b1675dSTing-Kang Chang namespace pb = google::crypto::tink;
31*e7b1675dSTing-Kang Chang 
32*e7b1675dSTing-Kang Chang // static
SubtleToProto(subtle::EllipticCurveType type)33*e7b1675dSTing-Kang Chang pb::EllipticCurveType Enums::SubtleToProto(subtle::EllipticCurveType type) {
34*e7b1675dSTing-Kang Chang   switch (type) {
35*e7b1675dSTing-Kang Chang     case subtle::EllipticCurveType::NIST_P256:
36*e7b1675dSTing-Kang Chang       return pb::EllipticCurveType::NIST_P256;
37*e7b1675dSTing-Kang Chang     case subtle::EllipticCurveType::NIST_P384:
38*e7b1675dSTing-Kang Chang       return pb::EllipticCurveType::NIST_P384;
39*e7b1675dSTing-Kang Chang     case subtle::EllipticCurveType::NIST_P521:
40*e7b1675dSTing-Kang Chang       return pb::EllipticCurveType::NIST_P521;
41*e7b1675dSTing-Kang Chang     case subtle::EllipticCurveType::CURVE25519:
42*e7b1675dSTing-Kang Chang       return pb::EllipticCurveType::CURVE25519;
43*e7b1675dSTing-Kang Chang     default:
44*e7b1675dSTing-Kang Chang       return pb::EllipticCurveType::UNKNOWN_CURVE;
45*e7b1675dSTing-Kang Chang   }
46*e7b1675dSTing-Kang Chang }
47*e7b1675dSTing-Kang Chang 
48*e7b1675dSTing-Kang Chang // static
ProtoToSubtle(pb::EllipticCurveType type)49*e7b1675dSTing-Kang Chang subtle::EllipticCurveType Enums::ProtoToSubtle(pb::EllipticCurveType type) {
50*e7b1675dSTing-Kang Chang   switch (type) {
51*e7b1675dSTing-Kang Chang     case pb::EllipticCurveType::NIST_P256:
52*e7b1675dSTing-Kang Chang       return subtle::EllipticCurveType::NIST_P256;
53*e7b1675dSTing-Kang Chang     case pb::EllipticCurveType::NIST_P384:
54*e7b1675dSTing-Kang Chang       return subtle::EllipticCurveType::NIST_P384;
55*e7b1675dSTing-Kang Chang     case pb::EllipticCurveType::NIST_P521:
56*e7b1675dSTing-Kang Chang       return subtle::EllipticCurveType::NIST_P521;
57*e7b1675dSTing-Kang Chang     case pb::EllipticCurveType::CURVE25519:
58*e7b1675dSTing-Kang Chang       return subtle::EllipticCurveType::CURVE25519;
59*e7b1675dSTing-Kang Chang     default:
60*e7b1675dSTing-Kang Chang       return subtle::EllipticCurveType::UNKNOWN_CURVE;
61*e7b1675dSTing-Kang Chang   }
62*e7b1675dSTing-Kang Chang }
63*e7b1675dSTing-Kang Chang 
64*e7b1675dSTing-Kang Chang // static
SubtleToProto(subtle::EcPointFormat format)65*e7b1675dSTing-Kang Chang pb::EcPointFormat Enums::SubtleToProto(subtle::EcPointFormat format) {
66*e7b1675dSTing-Kang Chang   switch (format) {
67*e7b1675dSTing-Kang Chang     case subtle::EcPointFormat::UNCOMPRESSED:
68*e7b1675dSTing-Kang Chang       return pb::EcPointFormat::UNCOMPRESSED;
69*e7b1675dSTing-Kang Chang     case subtle::EcPointFormat::DO_NOT_USE_CRUNCHY_UNCOMPRESSED:
70*e7b1675dSTing-Kang Chang       return pb::EcPointFormat::DO_NOT_USE_CRUNCHY_UNCOMPRESSED;
71*e7b1675dSTing-Kang Chang     case subtle::EcPointFormat::COMPRESSED:
72*e7b1675dSTing-Kang Chang       return pb::EcPointFormat::COMPRESSED;
73*e7b1675dSTing-Kang Chang     default:
74*e7b1675dSTing-Kang Chang       return pb::EcPointFormat::UNKNOWN_FORMAT;
75*e7b1675dSTing-Kang Chang   }
76*e7b1675dSTing-Kang Chang }
77*e7b1675dSTing-Kang Chang 
78*e7b1675dSTing-Kang Chang // static
ProtoToSubtle(pb::EcPointFormat format)79*e7b1675dSTing-Kang Chang subtle::EcPointFormat Enums::ProtoToSubtle(pb::EcPointFormat format) {
80*e7b1675dSTing-Kang Chang   switch (format) {
81*e7b1675dSTing-Kang Chang     case pb::EcPointFormat::UNCOMPRESSED:
82*e7b1675dSTing-Kang Chang       return subtle::EcPointFormat::UNCOMPRESSED;
83*e7b1675dSTing-Kang Chang     case pb::EcPointFormat::DO_NOT_USE_CRUNCHY_UNCOMPRESSED:
84*e7b1675dSTing-Kang Chang       return subtle::EcPointFormat::DO_NOT_USE_CRUNCHY_UNCOMPRESSED;
85*e7b1675dSTing-Kang Chang     case pb::EcPointFormat::COMPRESSED:
86*e7b1675dSTing-Kang Chang       return subtle::EcPointFormat::COMPRESSED;
87*e7b1675dSTing-Kang Chang     default:
88*e7b1675dSTing-Kang Chang       return subtle::EcPointFormat::UNKNOWN_FORMAT;
89*e7b1675dSTing-Kang Chang   }
90*e7b1675dSTing-Kang Chang }
91*e7b1675dSTing-Kang Chang 
92*e7b1675dSTing-Kang Chang // static
SubtleToProto(subtle::HashType type)93*e7b1675dSTing-Kang Chang pb::HashType Enums::SubtleToProto(subtle::HashType type) {
94*e7b1675dSTing-Kang Chang   switch (type) {
95*e7b1675dSTing-Kang Chang     case subtle::HashType::SHA1:
96*e7b1675dSTing-Kang Chang       return pb::HashType::SHA1;
97*e7b1675dSTing-Kang Chang     case subtle::HashType::SHA224:
98*e7b1675dSTing-Kang Chang       return pb::HashType::SHA224;
99*e7b1675dSTing-Kang Chang     case subtle::HashType::SHA256:
100*e7b1675dSTing-Kang Chang       return pb::HashType::SHA256;
101*e7b1675dSTing-Kang Chang     case subtle::HashType::SHA384:
102*e7b1675dSTing-Kang Chang       return pb::HashType::SHA384;
103*e7b1675dSTing-Kang Chang     case subtle::HashType::SHA512:
104*e7b1675dSTing-Kang Chang       return pb::HashType::SHA512;
105*e7b1675dSTing-Kang Chang     default:
106*e7b1675dSTing-Kang Chang       return pb::HashType::UNKNOWN_HASH;
107*e7b1675dSTing-Kang Chang   }
108*e7b1675dSTing-Kang Chang }
109*e7b1675dSTing-Kang Chang 
110*e7b1675dSTing-Kang Chang // static
ProtoToSubtle(pb::HashType type)111*e7b1675dSTing-Kang Chang subtle::HashType Enums::ProtoToSubtle(pb::HashType type) {
112*e7b1675dSTing-Kang Chang   switch (type) {
113*e7b1675dSTing-Kang Chang     case pb::HashType::SHA1:
114*e7b1675dSTing-Kang Chang       return subtle::HashType::SHA1;
115*e7b1675dSTing-Kang Chang     case pb::HashType::SHA224:
116*e7b1675dSTing-Kang Chang       return subtle::HashType::SHA224;
117*e7b1675dSTing-Kang Chang     case pb::HashType::SHA256:
118*e7b1675dSTing-Kang Chang       return subtle::HashType::SHA256;
119*e7b1675dSTing-Kang Chang     case pb::HashType::SHA384:
120*e7b1675dSTing-Kang Chang       return subtle::HashType::SHA384;
121*e7b1675dSTing-Kang Chang     case pb::HashType::SHA512:
122*e7b1675dSTing-Kang Chang       return subtle::HashType::SHA512;
123*e7b1675dSTing-Kang Chang     default:
124*e7b1675dSTing-Kang Chang       return subtle::HashType::UNKNOWN_HASH;
125*e7b1675dSTing-Kang Chang   }
126*e7b1675dSTing-Kang Chang }
127*e7b1675dSTing-Kang Chang 
128*e7b1675dSTing-Kang Chang // static
ProtoToSubtle(pb::EcdsaSignatureEncoding encoding)129*e7b1675dSTing-Kang Chang subtle::EcdsaSignatureEncoding Enums::ProtoToSubtle(
130*e7b1675dSTing-Kang Chang     pb::EcdsaSignatureEncoding encoding) {
131*e7b1675dSTing-Kang Chang   switch (encoding) {
132*e7b1675dSTing-Kang Chang     case pb::EcdsaSignatureEncoding::DER:
133*e7b1675dSTing-Kang Chang       return subtle::EcdsaSignatureEncoding::DER;
134*e7b1675dSTing-Kang Chang     case pb::EcdsaSignatureEncoding::IEEE_P1363:
135*e7b1675dSTing-Kang Chang       return subtle::EcdsaSignatureEncoding::IEEE_P1363;
136*e7b1675dSTing-Kang Chang     default:
137*e7b1675dSTing-Kang Chang       return subtle::EcdsaSignatureEncoding::UNKNOWN_ENCODING;
138*e7b1675dSTing-Kang Chang   }
139*e7b1675dSTing-Kang Chang }
140*e7b1675dSTing-Kang Chang 
141*e7b1675dSTing-Kang Chang // static
SubtleToProto(subtle::EcdsaSignatureEncoding encoding)142*e7b1675dSTing-Kang Chang pb::EcdsaSignatureEncoding Enums::SubtleToProto(
143*e7b1675dSTing-Kang Chang     subtle::EcdsaSignatureEncoding encoding) {
144*e7b1675dSTing-Kang Chang   switch (encoding) {
145*e7b1675dSTing-Kang Chang     case subtle::EcdsaSignatureEncoding::DER:
146*e7b1675dSTing-Kang Chang       return pb::EcdsaSignatureEncoding::DER;
147*e7b1675dSTing-Kang Chang     case subtle::EcdsaSignatureEncoding::IEEE_P1363:
148*e7b1675dSTing-Kang Chang       return pb::EcdsaSignatureEncoding::IEEE_P1363;
149*e7b1675dSTing-Kang Chang     default:
150*e7b1675dSTing-Kang Chang       return pb::EcdsaSignatureEncoding::UNKNOWN_ENCODING;
151*e7b1675dSTing-Kang Chang   }
152*e7b1675dSTing-Kang Chang }
153*e7b1675dSTing-Kang Chang 
154*e7b1675dSTing-Kang Chang // static
KeyStatusName(pb::KeyStatusType key_status_type)155*e7b1675dSTing-Kang Chang const char* Enums::KeyStatusName(pb::KeyStatusType key_status_type) {
156*e7b1675dSTing-Kang Chang   switch (key_status_type) {
157*e7b1675dSTing-Kang Chang     case pb::KeyStatusType::ENABLED:
158*e7b1675dSTing-Kang Chang       return "ENABLED";
159*e7b1675dSTing-Kang Chang     case pb::KeyStatusType::DISABLED:
160*e7b1675dSTing-Kang Chang       return "DISABLED";
161*e7b1675dSTing-Kang Chang     case pb::KeyStatusType::DESTROYED:
162*e7b1675dSTing-Kang Chang       return "DESTROYED";
163*e7b1675dSTing-Kang Chang     default:
164*e7b1675dSTing-Kang Chang       return "UNKNOWN_STATUS";
165*e7b1675dSTing-Kang Chang   }
166*e7b1675dSTing-Kang Chang }
167*e7b1675dSTing-Kang Chang 
168*e7b1675dSTing-Kang Chang // static
HashName(pb::HashType hash_type)169*e7b1675dSTing-Kang Chang const char* Enums::HashName(pb::HashType hash_type) {
170*e7b1675dSTing-Kang Chang   switch (hash_type) {
171*e7b1675dSTing-Kang Chang     case pb::HashType::SHA1:
172*e7b1675dSTing-Kang Chang       return "SHA1";
173*e7b1675dSTing-Kang Chang     case pb::HashType::SHA224:
174*e7b1675dSTing-Kang Chang       return "SHA224";
175*e7b1675dSTing-Kang Chang     case pb::HashType::SHA256:
176*e7b1675dSTing-Kang Chang       return "SHA256";
177*e7b1675dSTing-Kang Chang     case pb::HashType::SHA384:
178*e7b1675dSTing-Kang Chang       return "SHA384";
179*e7b1675dSTing-Kang Chang     case pb::HashType::SHA512:
180*e7b1675dSTing-Kang Chang       return "SHA512";
181*e7b1675dSTing-Kang Chang     default:
182*e7b1675dSTing-Kang Chang       return "UNKNOWN_HASH";
183*e7b1675dSTing-Kang Chang   }
184*e7b1675dSTing-Kang Chang }
185*e7b1675dSTing-Kang Chang 
186*e7b1675dSTing-Kang Chang // static
HashLength(pb::HashType hash_type)187*e7b1675dSTing-Kang Chang util::StatusOr<int> Enums::HashLength(pb::HashType hash_type) {
188*e7b1675dSTing-Kang Chang   switch (hash_type) {
189*e7b1675dSTing-Kang Chang     case pb::HashType::SHA224:
190*e7b1675dSTing-Kang Chang       return 28;
191*e7b1675dSTing-Kang Chang     case pb::HashType::SHA256:
192*e7b1675dSTing-Kang Chang       return 32;
193*e7b1675dSTing-Kang Chang     case pb::HashType::SHA384:
194*e7b1675dSTing-Kang Chang       return 48;
195*e7b1675dSTing-Kang Chang     case pb::HashType::SHA512:
196*e7b1675dSTing-Kang Chang       return 64;
197*e7b1675dSTing-Kang Chang     default:
198*e7b1675dSTing-Kang Chang       return util::Status(absl::StatusCode::kInvalidArgument,
199*e7b1675dSTing-Kang Chang                           absl::StrCat("Unsupported hashing algorithm ",
200*e7b1675dSTing-Kang Chang                                        util::Enums::HashName(hash_type)));
201*e7b1675dSTing-Kang Chang   }
202*e7b1675dSTing-Kang Chang }
203*e7b1675dSTing-Kang Chang 
204*e7b1675dSTing-Kang Chang // static
KeyMaterialName(pb::KeyData::KeyMaterialType key_material_type)205*e7b1675dSTing-Kang Chang const char* Enums::KeyMaterialName(
206*e7b1675dSTing-Kang Chang     pb::KeyData::KeyMaterialType key_material_type) {
207*e7b1675dSTing-Kang Chang   switch (key_material_type) {
208*e7b1675dSTing-Kang Chang     case pb::KeyData::SYMMETRIC:
209*e7b1675dSTing-Kang Chang       return "SYMMETRIC";
210*e7b1675dSTing-Kang Chang     case pb::KeyData::ASYMMETRIC_PRIVATE:
211*e7b1675dSTing-Kang Chang       return "ASYMMETRIC_PRIVATE";
212*e7b1675dSTing-Kang Chang     case pb::KeyData::ASYMMETRIC_PUBLIC:
213*e7b1675dSTing-Kang Chang       return "ASYMMETRIC_PUBLIC";
214*e7b1675dSTing-Kang Chang     case pb::KeyData::REMOTE:
215*e7b1675dSTing-Kang Chang       return "REMOTE";
216*e7b1675dSTing-Kang Chang     default:
217*e7b1675dSTing-Kang Chang       return "UNKNOWN_KEYMATERIAL";
218*e7b1675dSTing-Kang Chang   }
219*e7b1675dSTing-Kang Chang }
220*e7b1675dSTing-Kang Chang 
221*e7b1675dSTing-Kang Chang // static
OutputPrefixName(pb::OutputPrefixType output_prefix_type)222*e7b1675dSTing-Kang Chang const char* Enums::OutputPrefixName(pb::OutputPrefixType output_prefix_type) {
223*e7b1675dSTing-Kang Chang   switch (output_prefix_type) {
224*e7b1675dSTing-Kang Chang     case pb::OutputPrefixType::TINK:
225*e7b1675dSTing-Kang Chang       return "TINK";
226*e7b1675dSTing-Kang Chang     case pb::OutputPrefixType::LEGACY:
227*e7b1675dSTing-Kang Chang       return "LEGACY";
228*e7b1675dSTing-Kang Chang     case pb::OutputPrefixType::RAW:
229*e7b1675dSTing-Kang Chang       return "RAW";
230*e7b1675dSTing-Kang Chang     case pb::OutputPrefixType::CRUNCHY:
231*e7b1675dSTing-Kang Chang       return "CRUNCHY";
232*e7b1675dSTing-Kang Chang     default:
233*e7b1675dSTing-Kang Chang       return "UNKNOWN_PREFIX";
234*e7b1675dSTing-Kang Chang   }
235*e7b1675dSTing-Kang Chang }
236*e7b1675dSTing-Kang Chang 
237*e7b1675dSTing-Kang Chang // static
KeyStatus(absl::string_view name)238*e7b1675dSTing-Kang Chang pb::KeyStatusType Enums::KeyStatus(absl::string_view name) {
239*e7b1675dSTing-Kang Chang   if (name == "ENABLED") return pb::KeyStatusType::ENABLED;
240*e7b1675dSTing-Kang Chang   if (name == "DISABLED") return pb::KeyStatusType::DISABLED;
241*e7b1675dSTing-Kang Chang   if (name == "DESTROYED") return pb::KeyStatusType::DESTROYED;
242*e7b1675dSTing-Kang Chang   return pb::KeyStatusType::UNKNOWN_STATUS;
243*e7b1675dSTing-Kang Chang }
244*e7b1675dSTing-Kang Chang 
245*e7b1675dSTing-Kang Chang // static
Hash(absl::string_view name)246*e7b1675dSTing-Kang Chang pb::HashType Enums::Hash(absl::string_view name) {
247*e7b1675dSTing-Kang Chang   if (name == "SHA1") return pb::HashType::SHA1;
248*e7b1675dSTing-Kang Chang   if (name == "SHA224") return pb::HashType::SHA224;
249*e7b1675dSTing-Kang Chang   if (name == "SHA256") return pb::HashType::SHA256;
250*e7b1675dSTing-Kang Chang   if (name == "SHA384") return pb::HashType::SHA384;
251*e7b1675dSTing-Kang Chang   if (name == "SHA512") return pb::HashType::SHA512;
252*e7b1675dSTing-Kang Chang   return pb::HashType::UNKNOWN_HASH;
253*e7b1675dSTing-Kang Chang }
254*e7b1675dSTing-Kang Chang 
255*e7b1675dSTing-Kang Chang // static
KeyMaterial(absl::string_view name)256*e7b1675dSTing-Kang Chang pb::KeyData::KeyMaterialType Enums::KeyMaterial(absl::string_view name) {
257*e7b1675dSTing-Kang Chang   if (name == "SYMMETRIC") return pb::KeyData::SYMMETRIC;
258*e7b1675dSTing-Kang Chang   if (name == "ASYMMETRIC_PRIVATE") return pb::KeyData::ASYMMETRIC_PRIVATE;
259*e7b1675dSTing-Kang Chang   if (name == "ASYMMETRIC_PUBLIC") return pb::KeyData::ASYMMETRIC_PUBLIC;
260*e7b1675dSTing-Kang Chang   if (name == "REMOTE") return pb::KeyData::REMOTE;
261*e7b1675dSTing-Kang Chang   return pb::KeyData::UNKNOWN_KEYMATERIAL;
262*e7b1675dSTing-Kang Chang }
263*e7b1675dSTing-Kang Chang 
264*e7b1675dSTing-Kang Chang // static
OutputPrefix(absl::string_view name)265*e7b1675dSTing-Kang Chang pb::OutputPrefixType Enums::OutputPrefix(absl::string_view name) {
266*e7b1675dSTing-Kang Chang   if (name == "TINK") return pb::OutputPrefixType::TINK;
267*e7b1675dSTing-Kang Chang   if (name == "LEGACY") return pb::OutputPrefixType::LEGACY;
268*e7b1675dSTing-Kang Chang   if (name == "RAW") return pb::OutputPrefixType::RAW;
269*e7b1675dSTing-Kang Chang   if (name == "CRUNCHY") return pb::OutputPrefixType::CRUNCHY;
270*e7b1675dSTing-Kang Chang   return pb::OutputPrefixType::UNKNOWN_PREFIX;
271*e7b1675dSTing-Kang Chang }
272*e7b1675dSTing-Kang Chang 
273*e7b1675dSTing-Kang Chang }  // namespace util
274*e7b1675dSTing-Kang Chang }  // namespace tink
275*e7b1675dSTing-Kang Chang }  // namespace crypto
276