From 7b82367fe0508850a173a31ef41a1da1cac08061 Mon Sep 17 00:00:00 2001 From: Koen Vervloesem Date: Wed, 26 Jul 2023 16:05:18 +0200 Subject: [PATCH] Add support for decrypting ShellyBLU Door/Window advertisements (#153) --- TheengsGateway/decryption.py | 9 +++++---- pyproject.toml | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/TheengsGateway/decryption.py b/TheengsGateway/decryption.py index 505a3b34..0fc3309e 100644 --- a/TheengsGateway/decryption.py +++ b/TheengsGateway/decryption.py @@ -73,8 +73,8 @@ def replace_encrypted_data( data_json["servicedata"] = decrypted_data.hex() -class ShellyBLUButton1Decryptor(AdvertisementDecryptor): - """Class for decryption of ShellyBLU Button1 encrypted advertisements.""" +class BTHomeV2Decryptor(AdvertisementDecryptor): + """Class for decryption of BTHome v2 encrypted advertisements.""" def compute_nonce(self, address: str, decoded_json: Dict) -> bytes: """Compute the nonce for a specific address and JSON input.""" @@ -122,7 +122,8 @@ def replace_encrypted_data( _DECRYPTOR_MODELS = { "LYWSD03MMC/MJWSD05MMC_PVVX_ENCR": LYWSD03MMC_PVVXDecryptor, - "SBBT_002C_ENCR": ShellyBLUButton1Decryptor, + "SBBT_002C_ENCR": BTHomeV2Decryptor, + "SBDW_002C_ENCR": BTHomeV2Decryptor, } @@ -134,7 +135,7 @@ def create_decryptor(model_id: str) -> AdvertisementDecryptor: """Return the decryptor class for the given model ID.""" if model_id not in _DECRYPTOR_MODELS: raise UnsupportedEncryptionError() - return _DECRYPTOR_MODELS[model_id]() + return _DECRYPTOR_MODELS[model_id]() # type: ignore[abstract] def reverse_address(address: str) -> str: diff --git a/pyproject.toml b/pyproject.toml index 5dda7621..3be13a26 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,6 +4,7 @@ include = 'TheengsGateway\/.*\.pyi?$' [[tool.mypy.overrides]] module = [ "Cryptodome.Cipher", + "Cryptodome.Cipher.AES", "paho.mqtt", "setuptools", "TheengsDecoder",