From 28990e66be3ddae534a7cd7155f954d988605d9f Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Sun, 11 Oct 2026 09:53:48 +0800 Subject: [PATCH] test: align API crypto coverage with the AES-GCM protocol --- backend/tests/test_api_crypto.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/backend/tests/test_api_crypto.py b/backend/tests/test_api_crypto.py index 7ad51e22..02e205b0 100644 --- a/backend/tests/test_api_crypto.py +++ b/backend/tests/test_api_crypto.py @@ -33,7 +33,7 @@ class ApiCryptoTests(unittest.TestCase): plain = api_crypto.decrypt_json(cipher, key) self.assertEqual(plain, payload) - def test_encrypt_decrypt_roundtrip_cbc(self): + def test_decrypt_rejects_tampered_gcm_ciphertext(self): key = api_crypto.derive_key( fixed_secret="fixed-secret", user_id="u1", @@ -41,9 +41,13 @@ class ApiCryptoTests(unittest.TestCase): nonce="nonce-2", ) payload = {"list": [1, 2, 3], "ok": True} - cipher = api_crypto.encrypt_json(payload, key, alg="cbc") - plain = api_crypto.decrypt_json(cipher, key, alg="cbc") - self.assertEqual(plain, payload) + cipher = api_crypto.encrypt_json(payload, key) + raw = bytearray(api_crypto._b64url_decode(cipher)) + raw[-1] ^= 1 + tampered = api_crypto._b64url_encode(bytes(raw)) + + with self.assertRaises(api_crypto.ApiCryptoError): + api_crypto.decrypt_json(tampered, key) if __name__ == "__main__":