xref: /aosp_15_r20/external/tink/testing/cross_language/util/utilities.py (revision e7b1675dde1b92d52ec075b0a92829627f2c52a5)
1*e7b1675dSTing-Kang Chang# Copyright 2020 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"""Various utility functions for the cross language tests.
16*e7b1675dSTing-Kang Chang"""
17*e7b1675dSTing-Kang Chang
18*e7b1675dSTing-Kang Changfrom typing import Any, Iterable, List
19*e7b1675dSTing-Kang Chang
20*e7b1675dSTing-Kang Changfrom tink import aead
21*e7b1675dSTing-Kang Changfrom tink import daead
22*e7b1675dSTing-Kang Changfrom tink import hybrid
23*e7b1675dSTing-Kang Changfrom tink import jwt
24*e7b1675dSTing-Kang Changfrom tink import mac
25*e7b1675dSTing-Kang Changfrom tink import prf
26*e7b1675dSTing-Kang Changfrom tink import signature
27*e7b1675dSTing-Kang Changfrom tink import streaming_aead
28*e7b1675dSTing-Kang Chang
29*e7b1675dSTing-Kang Changfrom tink.proto import tink_pb2
30*e7b1675dSTing-Kang Changimport tink_config
31*e7b1675dSTing-Kang Chang
32*e7b1675dSTing-Kang Chang# All languages supported by cross-language tests.
33*e7b1675dSTing-Kang ChangALL_LANGUAGES = ['cc', 'java', 'go', 'python']
34*e7b1675dSTing-Kang Chang
35*e7b1675dSTing-Kang Chang
36*e7b1675dSTing-Kang Chang# For each KeyType, a list of Tinkey KeyTemplate names.
37*e7b1675dSTing-Kang Chang# TODO(juerg): Add missing key template names, and remove deprecated names.
38*e7b1675dSTing-Kang Chang# TODO(tholenst): Change this to a function
39*e7b1675dSTing-Kang ChangKEY_TEMPLATE_NAMES = {
40*e7b1675dSTing-Kang Chang    'AesEaxKey': [
41*e7b1675dSTing-Kang Chang        'AES128_EAX', 'AES128_EAX_RAW', 'AES256_EAX', 'AES256_EAX_RAW'
42*e7b1675dSTing-Kang Chang    ],
43*e7b1675dSTing-Kang Chang    'AesGcmKey': [
44*e7b1675dSTing-Kang Chang        'AES128_GCM', 'AES128_GCM_RAW', 'AES256_GCM', 'AES256_GCM_RAW'
45*e7b1675dSTing-Kang Chang    ],
46*e7b1675dSTing-Kang Chang    'AesGcmSivKey': [
47*e7b1675dSTing-Kang Chang        'AES128_GCM_SIV', 'AES128_GCM_SIV_RAW', 'AES256_GCM_SIV',
48*e7b1675dSTing-Kang Chang        'AES256_GCM_SIV_RAW'
49*e7b1675dSTing-Kang Chang    ],
50*e7b1675dSTing-Kang Chang    'AesCtrHmacAeadKey': [
51*e7b1675dSTing-Kang Chang        'AES128_CTR_HMAC_SHA256', 'AES128_CTR_HMAC_SHA256_RAW',
52*e7b1675dSTing-Kang Chang        'AES256_CTR_HMAC_SHA256', 'AES256_CTR_HMAC_SHA256_RAW'
53*e7b1675dSTing-Kang Chang    ],
54*e7b1675dSTing-Kang Chang    'ChaCha20Poly1305Key': ['CHACHA20_POLY1305', 'CHACHA20_POLY1305_RAW'],
55*e7b1675dSTing-Kang Chang    'XChaCha20Poly1305Key': ['XCHACHA20_POLY1305', 'XCHACHA20_POLY1305_RAW'],
56*e7b1675dSTing-Kang Chang    'KmsAeadKey': [],
57*e7b1675dSTing-Kang Chang    'KmsEnvelopeAeadKey': [],
58*e7b1675dSTing-Kang Chang    'AesSivKey': ['AES256_SIV'],
59*e7b1675dSTing-Kang Chang    'AesCtrHmacStreamingKey': [
60*e7b1675dSTing-Kang Chang        'AES128_CTR_HMAC_SHA256_4KB',
61*e7b1675dSTing-Kang Chang        'AES128_CTR_HMAC_SHA256_1MB',
62*e7b1675dSTing-Kang Chang        'AES256_CTR_HMAC_SHA256_4KB',
63*e7b1675dSTing-Kang Chang        'AES256_CTR_HMAC_SHA256_1MB',
64*e7b1675dSTing-Kang Chang    ],
65*e7b1675dSTing-Kang Chang    'AesGcmHkdfStreamingKey': [
66*e7b1675dSTing-Kang Chang        'AES128_GCM_HKDF_4KB',
67*e7b1675dSTing-Kang Chang        'AES128_GCM_HKDF_1MB',
68*e7b1675dSTing-Kang Chang        'AES256_GCM_HKDF_4KB',
69*e7b1675dSTing-Kang Chang        'AES256_GCM_HKDF_1MB',
70*e7b1675dSTing-Kang Chang    ],
71*e7b1675dSTing-Kang Chang    'EciesAeadHkdfPrivateKey': [
72*e7b1675dSTing-Kang Chang        'ECIES_P256_HKDF_HMAC_SHA256_AES128_GCM',
73*e7b1675dSTing-Kang Chang        'ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_GCM',
74*e7b1675dSTing-Kang Chang        'ECIES_P256_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256',
75*e7b1675dSTing-Kang Chang        'ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256',
76*e7b1675dSTing-Kang Chang    ],
77*e7b1675dSTing-Kang Chang    'HpkePrivateKey': [
78*e7b1675dSTing-Kang Chang        'DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_128_GCM',
79*e7b1675dSTing-Kang Chang        'DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_128_GCM_RAW',
80*e7b1675dSTing-Kang Chang        'DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM',
81*e7b1675dSTing-Kang Chang        'DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM_RAW',
82*e7b1675dSTing-Kang Chang        'DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_CHACHA20_POLY1305',
83*e7b1675dSTing-Kang Chang        'DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_CHACHA20_POLY1305_RAW',
84*e7b1675dSTing-Kang Chang    ],
85*e7b1675dSTing-Kang Chang    'AesCmacKey': ['AES_CMAC'],
86*e7b1675dSTing-Kang Chang    'HmacKey': [
87*e7b1675dSTing-Kang Chang        'HMAC_SHA256_128BITTAG', 'HMAC_SHA256_256BITTAG',
88*e7b1675dSTing-Kang Chang        'HMAC_SHA512_256BITTAG', 'HMAC_SHA512_512BITTAG'
89*e7b1675dSTing-Kang Chang    ],
90*e7b1675dSTing-Kang Chang    'EcdsaPrivateKey': [
91*e7b1675dSTing-Kang Chang        'ECDSA_P256', 'ECDSA_P256_RAW', 'ECDSA_P384', 'ECDSA_P384_SHA384',
92*e7b1675dSTing-Kang Chang        'ECDSA_P384_SHA512', 'ECDSA_P521', 'ECDSA_P256_IEEE_P1363',
93*e7b1675dSTing-Kang Chang        'ECDSA_P384_IEEE_P1363', 'ECDSA_P384_SHA384_IEEE_P1363',
94*e7b1675dSTing-Kang Chang        'ECDSA_P521_IEEE_P1363'
95*e7b1675dSTing-Kang Chang    ],
96*e7b1675dSTing-Kang Chang    'Ed25519PrivateKey': ['ED25519'],
97*e7b1675dSTing-Kang Chang    'RsaSsaPkcs1PrivateKey': [
98*e7b1675dSTing-Kang Chang        'RSA_SSA_PKCS1_3072_SHA256_F4', 'RSA_SSA_PKCS1_4096_SHA512_F4'
99*e7b1675dSTing-Kang Chang    ],
100*e7b1675dSTing-Kang Chang    'RsaSsaPssPrivateKey': [
101*e7b1675dSTing-Kang Chang        'RSA_SSA_PSS_3072_SHA256_SHA256_32_F4',
102*e7b1675dSTing-Kang Chang        'RSA_SSA_PSS_4096_SHA512_SHA512_64_F4'
103*e7b1675dSTing-Kang Chang    ],
104*e7b1675dSTing-Kang Chang    'AesCmacPrfKey': ['AES_CMAC_PRF'],
105*e7b1675dSTing-Kang Chang    'HmacPrfKey': ['HMAC_SHA256_PRF', 'HMAC_SHA512_PRF'],
106*e7b1675dSTing-Kang Chang    'HkdfPrfKey': ['HKDF_SHA256'],
107*e7b1675dSTing-Kang Chang    'JwtHmacKey': [
108*e7b1675dSTing-Kang Chang        'JWT_HS256', 'JWT_HS256_RAW', 'JWT_HS384', 'JWT_HS384_RAW', 'JWT_HS512',
109*e7b1675dSTing-Kang Chang        'JWT_HS512_RAW'
110*e7b1675dSTing-Kang Chang    ],
111*e7b1675dSTing-Kang Chang    'JwtEcdsaPrivateKey': [
112*e7b1675dSTing-Kang Chang        'JWT_ES256', 'JWT_ES256_RAW', 'JWT_ES384', 'JWT_ES384_RAW', 'JWT_ES512',
113*e7b1675dSTing-Kang Chang        'JWT_ES512_RAW'
114*e7b1675dSTing-Kang Chang    ],
115*e7b1675dSTing-Kang Chang    'JwtRsaSsaPkcs1PrivateKey': [
116*e7b1675dSTing-Kang Chang        'JWT_RS256_2048_F4', 'JWT_RS256_2048_F4_RAW', 'JWT_RS256_3072_F4',
117*e7b1675dSTing-Kang Chang        'JWT_RS256_3072_F4_RAW', 'JWT_RS384_3072_F4', 'JWT_RS384_3072_F4_RAW',
118*e7b1675dSTing-Kang Chang        'JWT_RS512_4096_F4', 'JWT_RS512_4096_F4_RAW'
119*e7b1675dSTing-Kang Chang    ],
120*e7b1675dSTing-Kang Chang    'JwtRsaSsaPssPrivateKey': [
121*e7b1675dSTing-Kang Chang        'JWT_PS256_2048_F4', 'JWT_PS256_2048_F4_RAW', 'JWT_PS256_3072_F4',
122*e7b1675dSTing-Kang Chang        'JWT_PS256_3072_F4_RAW', 'JWT_PS384_3072_F4', 'JWT_PS384_3072_F4_RAW',
123*e7b1675dSTing-Kang Chang        'JWT_PS512_4096_F4', 'JWT_PS512_4096_F4_RAW'
124*e7b1675dSTing-Kang Chang    ],
125*e7b1675dSTing-Kang Chang}
126*e7b1675dSTing-Kang Chang
127*e7b1675dSTing-Kang Chang# KeyTemplate (as Protobuf) for each KeyTemplate name.
128*e7b1675dSTing-Kang ChangKEY_TEMPLATE = {
129*e7b1675dSTing-Kang Chang    'AES128_EAX':
130*e7b1675dSTing-Kang Chang        aead.aead_key_templates.AES128_EAX,
131*e7b1675dSTing-Kang Chang    'AES128_EAX_RAW':
132*e7b1675dSTing-Kang Chang        aead.aead_key_templates.AES128_EAX_RAW,
133*e7b1675dSTing-Kang Chang    'AES256_EAX':
134*e7b1675dSTing-Kang Chang        aead.aead_key_templates.AES256_EAX,
135*e7b1675dSTing-Kang Chang    'AES256_EAX_RAW':
136*e7b1675dSTing-Kang Chang        aead.aead_key_templates.AES256_EAX_RAW,
137*e7b1675dSTing-Kang Chang    'AES128_GCM':
138*e7b1675dSTing-Kang Chang        aead.aead_key_templates.AES128_GCM,
139*e7b1675dSTing-Kang Chang    'AES128_GCM_RAW':
140*e7b1675dSTing-Kang Chang        aead.aead_key_templates.AES128_GCM_RAW,
141*e7b1675dSTing-Kang Chang    'AES256_GCM':
142*e7b1675dSTing-Kang Chang        aead.aead_key_templates.AES256_GCM,
143*e7b1675dSTing-Kang Chang    'AES256_GCM_RAW':
144*e7b1675dSTing-Kang Chang        aead.aead_key_templates.AES256_GCM_RAW,
145*e7b1675dSTing-Kang Chang    'AES128_GCM_SIV':
146*e7b1675dSTing-Kang Chang        aead.aead_key_templates.AES128_GCM_SIV,
147*e7b1675dSTing-Kang Chang    'AES128_GCM_SIV_RAW':
148*e7b1675dSTing-Kang Chang        aead.aead_key_templates.AES128_GCM_SIV_RAW,
149*e7b1675dSTing-Kang Chang    'AES256_GCM_SIV':
150*e7b1675dSTing-Kang Chang        aead.aead_key_templates.AES256_GCM_SIV,
151*e7b1675dSTing-Kang Chang    'AES256_GCM_SIV_RAW':
152*e7b1675dSTing-Kang Chang        aead.aead_key_templates.AES256_GCM_SIV_RAW,
153*e7b1675dSTing-Kang Chang    'AES128_CTR_HMAC_SHA256':
154*e7b1675dSTing-Kang Chang        aead.aead_key_templates.AES128_CTR_HMAC_SHA256,
155*e7b1675dSTing-Kang Chang    'AES128_CTR_HMAC_SHA256_RAW':
156*e7b1675dSTing-Kang Chang        aead.aead_key_templates.AES128_CTR_HMAC_SHA256_RAW,
157*e7b1675dSTing-Kang Chang    'AES256_CTR_HMAC_SHA256':
158*e7b1675dSTing-Kang Chang        aead.aead_key_templates.AES256_CTR_HMAC_SHA256,
159*e7b1675dSTing-Kang Chang    'AES256_CTR_HMAC_SHA256_RAW':
160*e7b1675dSTing-Kang Chang        aead.aead_key_templates.AES256_CTR_HMAC_SHA256_RAW,
161*e7b1675dSTing-Kang Chang    'CHACHA20_POLY1305':
162*e7b1675dSTing-Kang Chang        tink_pb2.KeyTemplate(
163*e7b1675dSTing-Kang Chang            type_url=('type.googleapis.com/google.crypto.tink.' +
164*e7b1675dSTing-Kang Chang                      'ChaCha20Poly1305Key'),
165*e7b1675dSTing-Kang Chang            output_prefix_type=tink_pb2.TINK),
166*e7b1675dSTing-Kang Chang    'CHACHA20_POLY1305_RAW':
167*e7b1675dSTing-Kang Chang        tink_pb2.KeyTemplate(
168*e7b1675dSTing-Kang Chang            type_url=('type.googleapis.com/google.crypto.tink.' +
169*e7b1675dSTing-Kang Chang                      'ChaCha20Poly1305Key'),
170*e7b1675dSTing-Kang Chang            output_prefix_type=tink_pb2.RAW),
171*e7b1675dSTing-Kang Chang    'XCHACHA20_POLY1305':
172*e7b1675dSTing-Kang Chang        aead.aead_key_templates.XCHACHA20_POLY1305,
173*e7b1675dSTing-Kang Chang    'XCHACHA20_POLY1305_RAW':
174*e7b1675dSTing-Kang Chang        aead.aead_key_templates.XCHACHA20_POLY1305_RAW,
175*e7b1675dSTing-Kang Chang    'AES256_SIV':
176*e7b1675dSTing-Kang Chang        daead.deterministic_aead_key_templates.AES256_SIV,
177*e7b1675dSTing-Kang Chang    'AES128_CTR_HMAC_SHA256_4KB':
178*e7b1675dSTing-Kang Chang        streaming_aead.streaming_aead_key_templates.AES128_CTR_HMAC_SHA256_4KB,
179*e7b1675dSTing-Kang Chang    'AES128_CTR_HMAC_SHA256_1MB':
180*e7b1675dSTing-Kang Chang        streaming_aead.streaming_aead_key_templates.AES128_CTR_HMAC_SHA256_1MB,
181*e7b1675dSTing-Kang Chang    'AES256_CTR_HMAC_SHA256_4KB':
182*e7b1675dSTing-Kang Chang        streaming_aead.streaming_aead_key_templates.AES256_CTR_HMAC_SHA256_4KB,
183*e7b1675dSTing-Kang Chang    'AES256_CTR_HMAC_SHA256_1MB':
184*e7b1675dSTing-Kang Chang        streaming_aead.streaming_aead_key_templates.AES256_CTR_HMAC_SHA256_1MB,
185*e7b1675dSTing-Kang Chang    'AES128_GCM_HKDF_4KB':
186*e7b1675dSTing-Kang Chang        streaming_aead.streaming_aead_key_templates.AES128_GCM_HKDF_4KB,
187*e7b1675dSTing-Kang Chang    'AES128_GCM_HKDF_1MB':
188*e7b1675dSTing-Kang Chang        streaming_aead.streaming_aead_key_templates.AES128_GCM_HKDF_1MB,
189*e7b1675dSTing-Kang Chang    'AES256_GCM_HKDF_4KB':
190*e7b1675dSTing-Kang Chang        streaming_aead.streaming_aead_key_templates.AES256_GCM_HKDF_4KB,
191*e7b1675dSTing-Kang Chang    'AES256_GCM_HKDF_1MB':
192*e7b1675dSTing-Kang Chang        streaming_aead.streaming_aead_key_templates.AES256_GCM_HKDF_1MB,
193*e7b1675dSTing-Kang Chang    'ECIES_P256_HKDF_HMAC_SHA256_AES128_GCM':
194*e7b1675dSTing-Kang Chang        hybrid.hybrid_key_templates.ECIES_P256_HKDF_HMAC_SHA256_AES128_GCM,
195*e7b1675dSTing-Kang Chang    'ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_GCM':
196*e7b1675dSTing-Kang Chang        hybrid.hybrid_key_templates
197*e7b1675dSTing-Kang Chang        .ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_GCM,
198*e7b1675dSTing-Kang Chang    'ECIES_P256_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256':
199*e7b1675dSTing-Kang Chang        hybrid.hybrid_key_templates
200*e7b1675dSTing-Kang Chang        .ECIES_P256_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256,
201*e7b1675dSTing-Kang Chang    'ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256':
202*e7b1675dSTing-Kang Chang        hybrid.hybrid_key_templates
203*e7b1675dSTing-Kang Chang        .ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256,
204*e7b1675dSTing-Kang Chang    'DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_128_GCM':
205*e7b1675dSTing-Kang Chang        hybrid.hybrid_key_templates
206*e7b1675dSTing-Kang Chang        .DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_128_GCM,
207*e7b1675dSTing-Kang Chang    'DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_128_GCM_RAW':
208*e7b1675dSTing-Kang Chang        hybrid.hybrid_key_templates
209*e7b1675dSTing-Kang Chang        .DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_128_GCM_RAW,
210*e7b1675dSTing-Kang Chang    'DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM':
211*e7b1675dSTing-Kang Chang        hybrid.hybrid_key_templates
212*e7b1675dSTing-Kang Chang        .DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM,
213*e7b1675dSTing-Kang Chang    'DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM_RAW':
214*e7b1675dSTing-Kang Chang        hybrid.hybrid_key_templates
215*e7b1675dSTing-Kang Chang        .DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM_RAW,
216*e7b1675dSTing-Kang Chang    'DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_CHACHA20_POLY1305':
217*e7b1675dSTing-Kang Chang        hybrid.hybrid_key_templates
218*e7b1675dSTing-Kang Chang        .DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_CHACHA20_POLY1305,
219*e7b1675dSTing-Kang Chang    'DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_CHACHA20_POLY1305_RAW':
220*e7b1675dSTing-Kang Chang        hybrid.hybrid_key_templates
221*e7b1675dSTing-Kang Chang        .DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_CHACHA20_POLY1305_RAW,
222*e7b1675dSTing-Kang Chang    'AES_CMAC':
223*e7b1675dSTing-Kang Chang        mac.mac_key_templates.AES_CMAC,
224*e7b1675dSTing-Kang Chang    'HMAC_SHA256_128BITTAG':
225*e7b1675dSTing-Kang Chang        mac.mac_key_templates.HMAC_SHA256_128BITTAG,
226*e7b1675dSTing-Kang Chang    'HMAC_SHA256_256BITTAG':
227*e7b1675dSTing-Kang Chang        mac.mac_key_templates.HMAC_SHA256_256BITTAG,
228*e7b1675dSTing-Kang Chang    'HMAC_SHA512_256BITTAG':
229*e7b1675dSTing-Kang Chang        mac.mac_key_templates.HMAC_SHA512_256BITTAG,
230*e7b1675dSTing-Kang Chang    'HMAC_SHA512_512BITTAG':
231*e7b1675dSTing-Kang Chang        mac.mac_key_templates.HMAC_SHA512_512BITTAG,
232*e7b1675dSTing-Kang Chang    'ECDSA_P256':
233*e7b1675dSTing-Kang Chang        signature.signature_key_templates.ECDSA_P256,
234*e7b1675dSTing-Kang Chang    'ECDSA_P256_RAW':
235*e7b1675dSTing-Kang Chang        signature.signature_key_templates.ECDSA_P256_RAW,
236*e7b1675dSTing-Kang Chang    'ECDSA_P384':
237*e7b1675dSTing-Kang Chang        signature.signature_key_templates.ECDSA_P384,
238*e7b1675dSTing-Kang Chang    'ECDSA_P384_SHA384':
239*e7b1675dSTing-Kang Chang        signature.signature_key_templates.ECDSA_P384_SHA384,
240*e7b1675dSTing-Kang Chang    'ECDSA_P384_SHA512':
241*e7b1675dSTing-Kang Chang        signature.signature_key_templates.ECDSA_P384_SHA512,
242*e7b1675dSTing-Kang Chang    'ECDSA_P521':
243*e7b1675dSTing-Kang Chang        signature.signature_key_templates.ECDSA_P521,
244*e7b1675dSTing-Kang Chang    'ECDSA_P256_IEEE_P1363':
245*e7b1675dSTing-Kang Chang        signature.signature_key_templates.ECDSA_P256_IEEE_P1363,
246*e7b1675dSTing-Kang Chang    'ECDSA_P384_IEEE_P1363':
247*e7b1675dSTing-Kang Chang        signature.signature_key_templates.ECDSA_P384_IEEE_P1363,
248*e7b1675dSTing-Kang Chang    'ECDSA_P384_SHA384_IEEE_P1363':
249*e7b1675dSTing-Kang Chang        signature.signature_key_templates.ECDSA_P384_SHA384_IEEE_P1363,
250*e7b1675dSTing-Kang Chang    'ECDSA_P521_IEEE_P1363':
251*e7b1675dSTing-Kang Chang        signature.signature_key_templates.ECDSA_P521_IEEE_P1363,
252*e7b1675dSTing-Kang Chang    'ED25519':
253*e7b1675dSTing-Kang Chang        signature.signature_key_templates.ED25519,
254*e7b1675dSTing-Kang Chang    'RSA_SSA_PKCS1_3072_SHA256_F4':
255*e7b1675dSTing-Kang Chang        signature.signature_key_templates.RSA_SSA_PKCS1_3072_SHA256_F4,
256*e7b1675dSTing-Kang Chang    'RSA_SSA_PKCS1_4096_SHA512_F4':
257*e7b1675dSTing-Kang Chang        signature.signature_key_templates.RSA_SSA_PKCS1_4096_SHA512_F4,
258*e7b1675dSTing-Kang Chang    'RSA_SSA_PSS_3072_SHA256_SHA256_32_F4':
259*e7b1675dSTing-Kang Chang        signature.signature_key_templates.RSA_SSA_PSS_3072_SHA256_SHA256_32_F4,
260*e7b1675dSTing-Kang Chang    'RSA_SSA_PSS_4096_SHA512_SHA512_64_F4':
261*e7b1675dSTing-Kang Chang        signature.signature_key_templates.RSA_SSA_PSS_4096_SHA512_SHA512_64_F4,
262*e7b1675dSTing-Kang Chang    'AES_CMAC_PRF':
263*e7b1675dSTing-Kang Chang        prf.prf_key_templates.AES_CMAC,
264*e7b1675dSTing-Kang Chang    'HMAC_SHA256_PRF':
265*e7b1675dSTing-Kang Chang        prf.prf_key_templates.HMAC_SHA256,
266*e7b1675dSTing-Kang Chang    'HMAC_SHA512_PRF':
267*e7b1675dSTing-Kang Chang        prf.prf_key_templates.HMAC_SHA512,
268*e7b1675dSTing-Kang Chang    'HKDF_SHA256':
269*e7b1675dSTing-Kang Chang        prf.prf_key_templates.HKDF_SHA256,
270*e7b1675dSTing-Kang Chang    'JWT_HS256':
271*e7b1675dSTing-Kang Chang        jwt.jwt_hs256_template(),
272*e7b1675dSTing-Kang Chang    'JWT_HS256_RAW':
273*e7b1675dSTing-Kang Chang        jwt.raw_jwt_hs256_template(),
274*e7b1675dSTing-Kang Chang    'JWT_HS384':
275*e7b1675dSTing-Kang Chang        jwt.jwt_hs384_template(),
276*e7b1675dSTing-Kang Chang    'JWT_HS384_RAW':
277*e7b1675dSTing-Kang Chang        jwt.raw_jwt_hs384_template(),
278*e7b1675dSTing-Kang Chang    'JWT_HS512':
279*e7b1675dSTing-Kang Chang        jwt.jwt_hs512_template(),
280*e7b1675dSTing-Kang Chang    'JWT_HS512_RAW':
281*e7b1675dSTing-Kang Chang        jwt.raw_jwt_hs512_template(),
282*e7b1675dSTing-Kang Chang    'JWT_ES256':
283*e7b1675dSTing-Kang Chang        jwt.jwt_es256_template(),
284*e7b1675dSTing-Kang Chang    'JWT_ES256_RAW':
285*e7b1675dSTing-Kang Chang        jwt.raw_jwt_es256_template(),
286*e7b1675dSTing-Kang Chang    'JWT_ES384':
287*e7b1675dSTing-Kang Chang        jwt.jwt_es384_template(),
288*e7b1675dSTing-Kang Chang    'JWT_ES384_RAW':
289*e7b1675dSTing-Kang Chang        jwt.raw_jwt_es384_template(),
290*e7b1675dSTing-Kang Chang    'JWT_ES512':
291*e7b1675dSTing-Kang Chang        jwt.jwt_es512_template(),
292*e7b1675dSTing-Kang Chang    'JWT_ES512_RAW':
293*e7b1675dSTing-Kang Chang        jwt.raw_jwt_es512_template(),
294*e7b1675dSTing-Kang Chang    'JWT_RS256_2048_F4':
295*e7b1675dSTing-Kang Chang        jwt.jwt_rs256_2048_f4_template(),
296*e7b1675dSTing-Kang Chang    'JWT_RS256_2048_F4_RAW':
297*e7b1675dSTing-Kang Chang        jwt.raw_jwt_rs256_2048_f4_template(),
298*e7b1675dSTing-Kang Chang    'JWT_RS256_3072_F4':
299*e7b1675dSTing-Kang Chang        jwt.jwt_rs256_3072_f4_template(),
300*e7b1675dSTing-Kang Chang    'JWT_RS256_3072_F4_RAW':
301*e7b1675dSTing-Kang Chang        jwt.raw_jwt_rs256_3072_f4_template(),
302*e7b1675dSTing-Kang Chang    'JWT_RS384_3072_F4':
303*e7b1675dSTing-Kang Chang        jwt.jwt_rs384_3072_f4_template(),
304*e7b1675dSTing-Kang Chang    'JWT_RS384_3072_F4_RAW':
305*e7b1675dSTing-Kang Chang        jwt.raw_jwt_rs384_3072_f4_template(),
306*e7b1675dSTing-Kang Chang    'JWT_RS512_4096_F4':
307*e7b1675dSTing-Kang Chang        jwt.jwt_rs512_4096_f4_template(),
308*e7b1675dSTing-Kang Chang    'JWT_RS512_4096_F4_RAW':
309*e7b1675dSTing-Kang Chang        jwt.raw_jwt_rs512_4096_f4_template(),
310*e7b1675dSTing-Kang Chang    'JWT_PS256_2048_F4':
311*e7b1675dSTing-Kang Chang        jwt.jwt_ps256_2048_f4_template(),
312*e7b1675dSTing-Kang Chang    'JWT_PS256_2048_F4_RAW':
313*e7b1675dSTing-Kang Chang        jwt.raw_jwt_ps256_2048_f4_template(),
314*e7b1675dSTing-Kang Chang    'JWT_PS256_3072_F4':
315*e7b1675dSTing-Kang Chang        jwt.jwt_ps256_3072_f4_template(),
316*e7b1675dSTing-Kang Chang    'JWT_PS256_3072_F4_RAW':
317*e7b1675dSTing-Kang Chang        jwt.raw_jwt_ps256_3072_f4_template(),
318*e7b1675dSTing-Kang Chang    'JWT_PS384_3072_F4':
319*e7b1675dSTing-Kang Chang        jwt.jwt_ps384_3072_f4_template(),
320*e7b1675dSTing-Kang Chang    'JWT_PS384_3072_F4_RAW':
321*e7b1675dSTing-Kang Chang        jwt.raw_jwt_ps384_3072_f4_template(),
322*e7b1675dSTing-Kang Chang    'JWT_PS512_4096_F4':
323*e7b1675dSTing-Kang Chang        jwt.jwt_ps512_4096_f4_template(),
324*e7b1675dSTing-Kang Chang    'JWT_PS512_4096_F4_RAW':
325*e7b1675dSTing-Kang Chang        jwt.raw_jwt_ps512_4096_f4_template(),
326*e7b1675dSTing-Kang Chang}
327*e7b1675dSTing-Kang Chang
328*e7b1675dSTing-Kang Chang
329*e7b1675dSTing-Kang Chang# Key template names for which the list of supported languages is different from
330*e7b1675dSTing-Kang Chang# the list of supported languages of the whole key type.
331*e7b1675dSTing-Kang Chang_CUSTOM_SUPPORTED_LANGUAGES_BY_TEMPLATE_NAME = {
332*e7b1675dSTing-Kang Chang    # currently empty.
333*e7b1675dSTing-Kang Chang}
334*e7b1675dSTing-Kang Chang
335*e7b1675dSTing-Kang Chang
336*e7b1675dSTing-Kang Changdef _supported_languages_by_template(
337*e7b1675dSTing-Kang Chang    template_name: str, key_type: str) -> List[str]:
338*e7b1675dSTing-Kang Chang  if template_name in _CUSTOM_SUPPORTED_LANGUAGES_BY_TEMPLATE_NAME:
339*e7b1675dSTing-Kang Chang    return _CUSTOM_SUPPORTED_LANGUAGES_BY_TEMPLATE_NAME[template_name]
340*e7b1675dSTing-Kang Chang  return tink_config.supported_languages_for_key_type(key_type)
341*e7b1675dSTing-Kang Chang
342*e7b1675dSTing-Kang Chang
343*e7b1675dSTing-Kang Changdef _all_key_template_names_with_key_type():
344*e7b1675dSTing-Kang Chang  for key_type, template_names in KEY_TEMPLATE_NAMES.items():
345*e7b1675dSTing-Kang Chang    for template_name in template_names:
346*e7b1675dSTing-Kang Chang      yield (template_name, key_type)
347*e7b1675dSTing-Kang Chang
348*e7b1675dSTing-Kang Chang
349*e7b1675dSTing-Kang Changdef tinkey_template_names_for(primitive_class: Any) -> Iterable[str]:
350*e7b1675dSTing-Kang Chang  """Returns all the key template names for the given primitive type."""
351*e7b1675dSTing-Kang Chang  for key_type in tink_config.key_types_for_primitive(primitive_class):
352*e7b1675dSTing-Kang Chang    for template_name in KEY_TEMPLATE_NAMES[key_type]:
353*e7b1675dSTing-Kang Chang      yield template_name
354*e7b1675dSTing-Kang Chang
355*e7b1675dSTing-Kang Chang
356*e7b1675dSTing-Kang ChangSUPPORTED_LANGUAGES_BY_TEMPLATE_NAME = {
357*e7b1675dSTing-Kang Chang    name: _supported_languages_by_template(name, template)
358*e7b1675dSTing-Kang Chang    for name, template in _all_key_template_names_with_key_type()
359*e7b1675dSTing-Kang Chang}
360*e7b1675dSTing-Kang Chang
361*e7b1675dSTing-Kang Chang
362*e7b1675dSTing-Kang Changdef key_types_in_keyset(keyset: bytes) -> List[str]:
363*e7b1675dSTing-Kang Chang  """Returns a list containing all key types in a keyset, in order."""
364*e7b1675dSTing-Kang Chang  parsed_keyset = tink_pb2.Keyset.FromString(keyset)
365*e7b1675dSTing-Kang Chang  type_urls = [k.key_data.type_url for k in parsed_keyset.key]
366*e7b1675dSTing-Kang Chang  return [tink_config.key_type_from_type_url(t) for t in type_urls]
367