Пример #1
0
    def test_generate_hybrid_encrypt_decrypt(self):
        keyset_servicer = services.KeysetServicer()
        hybrid_servicer = services.HybridServicer()

        tp = hybrid.hybrid_key_templates.ECIES_P256_HKDF_HMAC_SHA256_AES128_GCM
        template = tp.SerializeToString()
        gen_request = testing_api_pb2.KeysetGenerateRequest(template=template)
        gen_response = keyset_servicer.Generate(gen_request, self._ctx)
        self.assertEmpty(gen_response.err)
        private_keyset = gen_response.keyset

        pub_request = testing_api_pb2.KeysetPublicRequest(
            private_keyset=private_keyset)
        pub_response = keyset_servicer.Public(pub_request, self._ctx)
        self.assertEqual(pub_response.WhichOneof('result'), 'public_keyset')
        public_keyset = pub_response.public_keyset

        plaintext = b'The quick brown fox jumps over the lazy dog'
        context_info = b'context_info'
        enc_request = testing_api_pb2.HybridEncryptRequest(
            public_keyset=public_keyset,
            plaintext=plaintext,
            context_info=context_info)
        enc_response = hybrid_servicer.Encrypt(enc_request, self._ctx)
        self.assertEqual(enc_response.WhichOneof('result'), 'ciphertext')
        ciphertext = enc_response.ciphertext

        dec_request = testing_api_pb2.HybridDecryptRequest(
            private_keyset=private_keyset,
            ciphertext=ciphertext,
            context_info=context_info)
        dec_response = hybrid_servicer.Decrypt(dec_request, self._ctx)
        self.assertEqual(dec_response.WhichOneof('result'), 'plaintext')
        self.assertEqual(dec_response.plaintext, plaintext)
Пример #2
0
 def decrypt(self, ciphertext: bytes, context_info: bytes) -> bytes:
     dec_request = testing_api_pb2.HybridDecryptRequest(
         private_keyset=self._private_handle,
         ciphertext=ciphertext,
         context_info=context_info)
     dec_response = self._stub.Decrypt(dec_request)
     if dec_response.err:
         raise tink.TinkError(dec_response.err)
     return dec_response.plaintext
Пример #3
0
 def decrypt(self, ciphertext: bytes, context_info: bytes) -> bytes:
     logging.info('decrypt in lang %s.', self.lang)
     dec_request = testing_api_pb2.HybridDecryptRequest(
         private_keyset=self._private_handle,
         ciphertext=ciphertext,
         context_info=context_info)
     dec_response = self._stub.Decrypt(dec_request)
     if dec_response.err:
         logging.info('error hybriddecrypt in %s: %s', self.lang,
                      dec_response.err)
         raise tink.TinkError(dec_response.err)
     return dec_response.plaintext
Пример #4
0
    def test_generate_hybrid_encrypt_decrypt_fail(self):
        keyset_servicer = services.KeysetServicer()
        hybrid_servicer = services.HybridServicer()

        tp = hybrid.hybrid_key_templates.ECIES_P256_HKDF_HMAC_SHA256_AES128_GCM
        template = tp.SerializeToString()
        gen_request = testing_api_pb2.KeysetGenerateRequest(template=template)
        gen_response = keyset_servicer.Generate(gen_request, self._ctx)
        self.assertEqual(gen_response.WhichOneof('result'), 'keyset')
        private_keyset = gen_response.keyset

        dec_request = testing_api_pb2.HybridDecryptRequest(
            private_keyset=private_keyset,
            ciphertext=b'invalid ciphertext',
            context_info=b'context_info')
        dec_response = hybrid_servicer.Decrypt(dec_request, self._ctx)
        self.assertEqual(dec_response.WhichOneof('result'), 'err')
        self.assertNotEmpty(dec_response.err)