Ejemplo n.º 1
0
 def test_compute_verify_mac(self, key_template_name, key_template):
     key_type = supported_key_types.KEY_TYPE_FROM_URL[key_template.type_url]
     supported_langs = supported_key_types.SUPPORTED_LANGUAGES[key_type]
     self.assertNotEmpty(supported_langs)
     # Take the first supported language to generate the keyset.
     keyset = testing_servers.new_keyset(supported_langs[0], key_template)
     supported_macs = [
         testing_servers.mac(lang, keyset) for lang in supported_langs
     ]
     unsupported_macs = [
         testing_servers.mac(lang, keyset) for lang in SUPPORTED_LANGUAGES
         if lang not in supported_langs
     ]
     for p in supported_macs:
         data = (
             b'This is some data to be authenticated using key_template '
             b'%s in %s.' %
             (key_template_name.encode('utf8'), p.lang.encode('utf8')))
         mac_value = p.compute_mac(data)
         for p2 in supported_macs:
             self.assertIsNone(p2.verify_mac(mac_value, data))
         for p2 in unsupported_macs:
             with self.assertRaises(
                     tink.TinkError,
                     msg=
                     'Language %s supports verify_mac with %s unexpectedly'
                     % (p2.lang, key_template_name)):
                 p2.verify_mac(mac_value, data)
     for p in unsupported_macs:
         with self.assertRaises(
                 tink.TinkError,
                 msg='Language %s supports compute_mac with %s unexpectedly'
                 % (p.lang, key_template_name)):
             p.compute_mac(data)
Ejemplo n.º 2
0
 def test_compute_verify_mac(self, key_template_name):
     supported_langs = supported_key_types.SUPPORTED_LANGUAGES_BY_TEMPLATE_NAME[
         key_template_name]
     self.assertNotEmpty(supported_langs)
     key_template = supported_key_types.KEY_TEMPLATE[key_template_name]
     # Take the first supported language to generate the keyset.
     keyset = testing_servers.new_keyset(supported_langs[0], key_template)
     supported_macs = [
         testing_servers.mac(lang, keyset) for lang in supported_langs
     ]
     unsupported_macs = [
         testing_servers.mac(lang, keyset) for lang in SUPPORTED_LANGUAGES
         if lang not in supported_langs
     ]
     for p in supported_macs:
         data = (
             b'This is some data to be authenticated using key_template '
             b'%s in %s.' %
             (key_template_name.encode('utf8'), p.lang.encode('utf8')))
         mac_value = p.compute_mac(data)
         for p2 in supported_macs:
             self.assertIsNone(p2.verify_mac(mac_value, data))
         for p2 in unsupported_macs:
             with self.assertRaises(tink.TinkError):
                 p2.verify_mac(mac_value, data)
     for p in unsupported_macs:
         with self.assertRaises(tink.TinkError):
             p.compute_mac(data)
Ejemplo n.º 3
0
 def test_encrypt_decrypt(self, key_template_name, supported_langs):
     key_template = supported_key_types.KEY_TEMPLATE[key_template_name]
     keyset_handle = testing_servers.new_keyset_handle('java', key_template)
     supported_macs = [
         testing_servers.mac(lang, keyset_handle)
         for lang in supported_langs
     ]
     unsupported_macs = [
         testing_servers.mac(lang, keyset_handle)
         for lang in testing_servers.LANGUAGES
         if lang not in supported_langs
     ]
     for p in supported_macs:
         data = (
             b'This is some data to be authenticated using key_template '
             b'%s in %s.' %
             (key_template_name.encode('utf8'), p.lang.encode('utf8')))
         mac_value = p.compute_mac(data)
         for p2 in supported_macs:
             self.assertIsNone(p2.verify_mac(mac_value, data))
         for p2 in unsupported_macs:
             with self.assertRaises(tink.TinkError):
                 p2.verify_mac(mac_value, data)
     for p in unsupported_macs:
         with self.assertRaises(tink.TinkError):
             p.compute_mac(data)
Ejemplo n.º 4
0
 def test_inc_version_mac(self, key_template_name, lang):
     """Increments the key version by one and checks they can't be used."""
     template = supported_key_types.KEY_TEMPLATE[key_template_name]
     keyset = testing_servers.new_keyset(lang, template)
     _ = testing_servers.mac(lang, keyset).compute_mac(b'foo')
     for keyset1 in gen_inc_versions(keyset):
         mac_primitive1 = testing_servers.mac(lang, keyset1)
         with self.assertRaises(tink.TinkError):
             _ = mac_primitive1.compute_mac(b'foo')
Ejemplo n.º 5
0
 def test_mac_without_primary(self, key_template_name, lang):
     """Unsets the primary key and tries to use a MAC primitive."""
     template = supported_key_types.KEY_TEMPLATE[key_template_name]
     keyset = testing_servers.new_keyset(lang, template)
     mac_value = testing_servers.mac(lang, keyset).compute_mac(b'foo')
     mac_without_primary = testing_servers.mac(lang, unset_primary(keyset))
     with self.assertRaises(tink.TinkError):
         _ = mac_without_primary.compute_mac(b'foo')
     with self.assertRaises(tink.TinkError):
         mac_without_primary.verify_mac(mac_value, b'foo')
Ejemplo n.º 6
0
    def test_key_rotation(self, compute_lang, verify_lang, old_key_tmpl,
                          new_key_tmpl):
        # Do a key rotation from an old key generated from old_key_tmpl to a new
        # key generated from new_key_tmpl. MAC computation and verification are done
        # in languages compute_lang and verify_lang.
        builder = keyset_builder.new_keyset_builder()
        older_key_id = builder.add_new_key(old_key_tmpl)
        builder.set_primary_key(older_key_id)
        compute_mac1 = testing_servers.mac(compute_lang, builder.keyset())
        verify_mac1 = testing_servers.mac(verify_lang, builder.keyset())
        newer_key_id = builder.add_new_key(new_key_tmpl)
        compute_mac2 = testing_servers.mac(compute_lang, builder.keyset())
        verify_mac2 = testing_servers.mac(verify_lang, builder.keyset())

        builder.set_primary_key(newer_key_id)
        compute_mac3 = testing_servers.mac(compute_lang, builder.keyset())
        verify_mac3 = testing_servers.mac(verify_lang, builder.keyset())

        builder.disable_key(older_key_id)
        compute_mac4 = testing_servers.mac(compute_lang, builder.keyset())
        verify_mac4 = testing_servers.mac(verify_lang, builder.keyset())

        self.assertNotEqual(older_key_id, newer_key_id)
        # 1 uses the older key. So 1, 2 and 3 can verify the mac, but not 4.
        mac_value1 = compute_mac1.compute_mac(b'plaintext')
        verify_mac1.verify_mac(mac_value1, b'plaintext')
        verify_mac2.verify_mac(mac_value1, b'plaintext')
        verify_mac3.verify_mac(mac_value1, b'plaintext')
        with self.assertRaises(tink.TinkError):
            verify_mac4.verify_mac(mac_value1, b'plaintext')

        # 2 uses the older key. So 1, 2 and 3 can verify the mac, but not 4.
        mac_value2 = compute_mac2.compute_mac(b'plaintext')
        verify_mac1.verify_mac(mac_value2, b'plaintext')
        verify_mac2.verify_mac(mac_value2, b'plaintext')
        verify_mac3.verify_mac(mac_value2, b'plaintext')
        with self.assertRaises(tink.TinkError):
            verify_mac4.verify_mac(mac_value2, b'plaintext')

        # 3 uses the newer key. So 2, 3 and 4 can verify the mac, but not 1.
        mac_value3 = compute_mac3.compute_mac(b'plaintext')
        with self.assertRaises(tink.TinkError):
            verify_mac1.verify_mac(mac_value3, b'plaintext')
        verify_mac2.verify_mac(mac_value3, b'plaintext')
        verify_mac3.verify_mac(mac_value3, b'plaintext')
        verify_mac4.verify_mac(mac_value3, b'plaintext')

        # 4 uses the newer key. So 2, 3 and 4 can verify the mac, but not 1.
        mac_value4 = compute_mac4.compute_mac(b'plaintext')
        with self.assertRaises(tink.TinkError):
            verify_mac1.verify_mac(mac_value4, b'plaintext')
        verify_mac2.verify_mac(mac_value4, b'plaintext')
        verify_mac3.verify_mac(mac_value4, b'plaintext')
        verify_mac4.verify_mac(mac_value4, b'plaintext')
Ejemplo n.º 7
0
    def test_mac(self, lang):
        keyset = testing_servers.new_keyset(
            lang, mac.mac_key_templates.HMAC_SHA256_128BITTAG)
        data = b'The quick brown fox jumps over the lazy dog'
        mac_primitive = testing_servers.mac(lang, keyset)
        mac_value = mac_primitive.compute_mac(data)
        mac_primitive.verify_mac(mac_value, data)

        with self.assertRaises(tink.TinkError):
            mac_primitive.verify_mac(b'foo', data)