• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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