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