1# Copyright 2022 Google LLC 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14"""Tests for _helpers.""" 15 16from absl.testing import absltest 17from tink import aead 18from tink import hybrid 19from tink import mac 20 21from tink.proto import tink_pb2 22from tink_config import _helpers 23from util import test_keys 24 25 26def setUpModule(): 27 aead.register() 28 mac.register() 29 30 31class HelpersTest(absltest.TestCase): 32 33 def test_get_all_key_types(self): 34 self.assertNotEmpty(_helpers.all_key_types()) 35 36 def test_get_aead_key_types(self): 37 self.assertNotEmpty(_helpers.key_types_for_primitive(aead.Aead)) 38 39 def test_key_type_from_type_url(self): 40 self.assertEqual( 41 _helpers.key_type_from_type_url( 42 'type.googleapis.com/google.crypto.tink.AesGcmKey'), 'AesGcmKey') 43 44 def test_key_type_from_type_url_wrong_prefix_throws(self): 45 with self.assertRaises(ValueError): 46 _helpers.key_type_from_type_url( 47 'type.googleapis.com/google.crypto.tinkAesGcmKey') 48 49 def test_key_type_from_type_url_wrong_key_type_throws(self): 50 with self.assertRaises(ValueError): 51 _helpers.key_type_from_type_url( 52 'type.googleapis.com/google.crypto.tink.InvalidKeyType29981') 53 54 def test_supported_languages_for_key_type(self): 55 self.assertCountEqual( 56 _helpers.supported_languages_for_key_type('AesGcmKey'), 57 ['cc', 'java', 'go', 'python']) 58 59 def test_supported_languages_for_key_type_invalid(self): 60 with self.assertRaises(ValueError): 61 _helpers.supported_languages_for_key_type('InvalidKeyType21b9a1') 62 63 def test_supported_languages_for_primitive(self): 64 self.assertCountEqual( 65 _helpers.supported_languages_for_primitive(aead.Aead), 66 ['cc', 'java', 'go', 'python']) 67 68 def test_supported_languages_for_primitive_invalid(self): 69 with self.assertRaises(KeyError): 70 _helpers.supported_languages_for_primitive('not a primitive, a string') 71 72 def test_all_primitives(self): 73 self.assertContainsSubset( 74 [aead.Aead, hybrid.HybridEncrypt, hybrid.HybridEncrypt], 75 _helpers.all_primitives()) 76 77 def test_primitive_for_keytype(self): 78 self.assertEqual(_helpers.primitive_for_keytype('AesGcmKey'), aead.Aead) 79 80 def test_primitive_for_keytype_throws_invalid(self): 81 with self.assertRaises(ValueError): 82 _helpers.primitive_for_keytype('InvalidKeyType776611') 83 84 def test_is_asymmetric_public_key_primitive(self): 85 self.assertFalse(_helpers.is_asymmetric_public_key_primitive(aead.Aead)) 86 self.assertFalse( 87 _helpers.is_asymmetric_public_key_primitive(hybrid.HybridDecrypt)) 88 self.assertTrue( 89 _helpers.is_asymmetric_public_key_primitive(hybrid.HybridEncrypt)) 90 91 def test_get_private_key_primitive(self): 92 self.assertEqual( 93 _helpers.get_private_key_primitive(hybrid.HybridEncrypt), 94 hybrid.HybridDecrypt) 95 96 def test_keyset_supported_true(self): 97 keyset = test_keys.some_keyset_for_primitive(aead.Aead) 98 self.assertTrue(_helpers.keyset_supported(keyset, aead.Aead, 'python')) 99 100 def test_keyset_supported_keyset_wrong_primitive_false(self): 101 keyset = test_keys.some_keyset_for_primitive(aead.Aead) 102 self.assertFalse(_helpers.keyset_supported(keyset, mac.Mac, 'python')) 103 104 def test_keyset_supported_keyset_wrong_language_false(self): 105 keyset = test_keys.some_keyset_for_primitive(aead.Aead) 106 self.assertFalse( 107 _helpers.keyset_supported(keyset, aead.Aead, 'non-existing-language')) 108 109 def test_keyset_two_keys_supported_true(self): 110 keyset = test_keys.some_keyset_for_primitive(aead.Aead) 111 parsed_keyset = tink_pb2.Keyset.FromString(keyset) 112 key0 = parsed_keyset.key[0] 113 parsed_keyset.key.append(key0) 114 parsed_keyset.key[1].key_id += 1 115 self.assertTrue( 116 _helpers.keyset_supported(parsed_keyset.SerializeToString(), aead.Aead, 117 'python')) 118 119 def test_keyset_two_keys_unsupported_false(self): 120 keyset0 = test_keys.some_keyset_for_primitive(aead.Aead) 121 keyset1 = test_keys.some_keyset_for_primitive(mac.Mac) 122 parsed_keyset0 = tink_pb2.Keyset.FromString(keyset0) 123 parsed_keyset1 = tink_pb2.Keyset.FromString(keyset1) 124 parsed_keyset0.key.append(parsed_keyset1.key[0]) 125 self.assertFalse( 126 _helpers.keyset_supported(parsed_keyset0.SerializeToString(), aead.Aead, 127 'python')) 128 129if __name__ == '__main__': 130 absltest.main() 131