From 2a691e37b7dcc202fbd8e8ed1aaf84cc65023fbe Mon Sep 17 00:00:00 2001 From: Colin Maudry Date: Wed, 24 Jun 2026 17:08:34 +0200 Subject: [PATCH] feat(backup): chiffrement Fernet des sauvegardes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Ajouter encrypt() et decrypt() avec clés Fernet urlsafe-base64 - Tests de roundtrip et échec avec mauvaise clé Fixes #89 --- src/backup/crypto.py | 9 +++++++++ tests/backup/test_crypto.py | 17 +++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 src/backup/crypto.py create mode 100644 tests/backup/test_crypto.py diff --git a/src/backup/crypto.py b/src/backup/crypto.py new file mode 100644 index 0000000..f1afa5e --- /dev/null +++ b/src/backup/crypto.py @@ -0,0 +1,9 @@ +from cryptography.fernet import Fernet + + +def encrypt(data: bytes, key: str) -> bytes: + return Fernet(key.encode()).encrypt(data) + + +def decrypt(token: bytes, key: str) -> bytes: + return Fernet(key.encode()).decrypt(token) diff --git a/tests/backup/test_crypto.py b/tests/backup/test_crypto.py new file mode 100644 index 0000000..35d94b6 --- /dev/null +++ b/tests/backup/test_crypto.py @@ -0,0 +1,17 @@ +import pytest +from cryptography.fernet import Fernet + +from src.backup.crypto import decrypt, encrypt + + +def test_roundtrip(): + key = Fernet.generate_key().decode() + data = b"contenu de la base sqlite" + assert decrypt(encrypt(data, key), key) == data + + +def test_wrong_key_fails(): + data = b"secret" + token = encrypt(data, Fernet.generate_key().decode()) + with pytest.raises(Exception): + decrypt(token, Fernet.generate_key().decode())