Skip to content

Commit 9c8dd79

Browse files
committed
encrypting and decrypting without blocking thread
1 parent 374ac88 commit 9c8dd79

1 file changed

Lines changed: 8 additions & 3 deletions

File tree

encryption_jwt/encryptor.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import asyncio
12
import base64
23
import logging
34
import os
@@ -38,16 +39,20 @@ async def encrypt(self, data: bytes) -> tuple[bytes, bytes]:
3839

3940
nonce = os.urandom(12)
4041
encryptor = AESGCM(data_key_plaintext)
41-
return nonce + encryptor.encrypt(nonce, data, None), base64.b64encode(
42-
data_key_encrypted
42+
encrypted = asyncio.get_running_loop().run_in_executor(
43+
None, encryptor.encrypt, nonce, data, None
4344
)
45+
return nonce + await encrypted, base64.b64encode(data_key_encrypted)
4446

4547
async def decrypt(self, data_key_encrypted_base64, data: bytes) -> bytes:
4648
"""Encrypt data using a key from KMS."""
4749
data_key_encrypted = base64.b64decode(data_key_encrypted_base64)
4850
data_key_plaintext = await self.__decrypt_data_key(data_key_encrypted)
4951
encryptor = AESGCM(data_key_plaintext)
50-
return encryptor.decrypt(data[:12], data[12:], None)
52+
decrypted = await asyncio.get_running_loop().run_in_executor(
53+
None, encryptor.decrypt, data[:12], data[12:], None
54+
)
55+
return decrypted
5156

5257
async def __create_data_key(self, namespace: str):
5358
"""Get a set of keys from AWS KMS that can be used to encrypt data."""

0 commit comments

Comments
 (0)