about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDaniel Høyer Iversen <mail@dahoiv.net>2019-10-02T06·25+0300
committerGitHub <noreply@github.com>2019-10-02T06·25+0300
commit2e5361bd8ee470b35884538914a2e3bc579ec1c5 (patch)
treeb5c4e48b082741c47aa98fda0c7e008d84a9fcc4
parent11c5981793f4a9b23ebceaf0ac2efdd74187c192 (diff)
Remove support for pyaes (#281)
* remove support for pyaes

* remove support for pyaes

* remove support for pyaes
-rw-r--r--broadlink/__init__.py38
-rwxr-xr-xcli/broadlink_cli22
-rwxr-xr-xcli/broadlink_discovery10
-rw-r--r--setup.py13
4 files changed, 25 insertions, 58 deletions
diff --git a/broadlink/__init__.py b/broadlink/__init__.py
index 8b08ffc5fee2..558305374a13 100644
--- a/broadlink/__init__.py
+++ b/broadlink/__init__.py
@@ -7,11 +7,8 @@ import threading
 import time
 from datetime import datetime
 
-try:
-    from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
-    from cryptography.hazmat.backends import default_backend
-except ImportError:
-    import pyaes
+from cryptography.hazmat.backends import default_backend
+from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
 
 
 def gendevice(devtype, host, mac):
@@ -65,9 +62,9 @@ def discover(timeout=None, local_ip_address=None):
     if local_ip_address is None:
         local_ip_address = socket.gethostbyname(socket.gethostname())
     if local_ip_address.startswith('127.'):
-         s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-         s.connect(('8.8.8.8', 53))  # connecting to a UDP address doesn't send packets
-         local_ip_address = s.getsockname()[0]
+        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+        s.connect(('8.8.8.8', 53))  # connecting to a UDP address doesn't send packets
+        local_ip_address = s.getsockname()[0]
     address = local_ip_address.split('.')
     cs = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     cs.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
@@ -159,39 +156,20 @@ class device:
         self.type = "Unknown"
         self.lock = threading.Lock()
 
-        if 'pyaes' in globals():
-            self.encrypt = self.encrypt_pyaes
-            self.decrypt = self.decrypt_pyaes
-            self.update_aes = self.update_aes_pyaes
-
-        else:
-            self.encrypt = self.encrypt_crypto
-            self.decrypt = self.decrypt_crypto
-            self.update_aes = self.update_aes_crypto
-
         self.aes = None
         key = bytearray(
             [0x09, 0x76, 0x28, 0x34, 0x3f, 0xe9, 0x9e, 0x23, 0x76, 0x5c, 0x15, 0x13, 0xac, 0xcf, 0x8b, 0x02])
         self.update_aes(key)
 
-    def update_aes_pyaes(self, key):
-        self.aes = pyaes.AESModeOfOperationCBC(key, iv=bytes(self.iv))
-
-    def encrypt_pyaes(self, payload):
-        return b"".join([self.aes.encrypt(bytes(payload[i:i + 16])) for i in range(0, len(payload), 16)])
-
-    def decrypt_pyaes(self, payload):
-        return b"".join([self.aes.decrypt(bytes(payload[i:i + 16])) for i in range(0, len(payload), 16)])
-
-    def update_aes_crypto(self, key):
+    def update_aes(self, key):
         self.aes = Cipher(algorithms.AES(key), modes.CBC(self.iv),
                           backend=default_backend())
 
-    def encrypt_crypto(self, payload):
+    def encrypt(self, payload):
         encryptor = self.aes.encryptor()
         return encryptor.update(payload) + encryptor.finalize()
 
-    def decrypt_crypto(self, payload):
+    def decrypt(self, payload):
         decryptor = self.aes.decryptor()
         return decryptor.update(payload) + decryptor.finalize()
 
diff --git a/cli/broadlink_cli b/cli/broadlink_cli
index 1a8fe5703468..976b5373aa18 100755
--- a/cli/broadlink_cli
+++ b/cli/broadlink_cli
@@ -1,11 +1,11 @@
 #!/usr/bin/env python3
 
-import broadlink
-import sys
 import argparse
-import time
 import base64
 import codecs
+import time
+
+import broadlink
 
 TICK = 32.84
 IR_TOKEN = 0x26
@@ -18,7 +18,6 @@ def auto_int(x):
 def to_microseconds(bytes):
     result = []
     #  print bytes[0] # 0x26 = 38for IR
-    length = bytes[2] + 256 * bytes[3]  # presently ignored
     index = 4
     while index < len(bytes):
         chunk = bytes[index]
@@ -27,7 +26,7 @@ def to_microseconds(bytes):
             chunk = bytes[index]
             chunk = 256 * chunk + bytes[index + 1]
             index += 2
-        result.append(int(round(chunk*TICK)))
+        result.append(int(round(chunk * TICK)))
         if chunk == 0x0d05:
             break
     return result
@@ -40,7 +39,7 @@ def durations_to_broadlink(durations):
     result.append(len(durations) % 256)
     result.append(len(durations) / 256)
     for dur in durations:
-        num = int(round(dur/TICK))
+        num = int(round(dur / TICK))
         if num > 255:
             result.append(0)
             result.append(num / 256)
@@ -69,8 +68,8 @@ parser.add_argument("--device", help="device definition as 'type host mac'")
 parser.add_argument("--type", type=auto_int, default=0x2712, help="type of device")
 parser.add_argument("--host", help="host address")
 parser.add_argument("--mac", help="mac address (hex reverse), as used by python-broadlink library")
-parser.add_argument("--temperature",action="store_true", help="request temperature from device")
-parser.add_argument("--energy",action="store_true", help="request energy consumption from device")
+parser.add_argument("--temperature", action="store_true", help="request temperature from device")
+parser.add_argument("--energy", action="store_true", help="request energy consumption from device")
 parser.add_argument("--check", action="store_true", help="check current power state")
 parser.add_argument("--checknl", action="store_true", help="check current nightlight state")
 parser.add_argument("--turnon", action="store_true", help="turn on device")
@@ -83,14 +82,15 @@ parser.add_argument("--sensors", action="store_true", help="check all sensors")
 parser.add_argument("--learn", action="store_true", help="learn command")
 parser.add_argument("--rfscanlearn", action="store_true", help="rf scan learning")
 parser.add_argument("--learnfile", help="save learned command to a specified file")
-parser.add_argument("--durations", action="store_true", help="use durations in micro seconds instead of the Broadlink format")
+parser.add_argument("--durations", action="store_true",
+                    help="use durations in micro seconds instead of the Broadlink format")
 parser.add_argument("--convert", action="store_true", help="convert input data to durations")
 parser.add_argument("data", nargs='*', help="Data to send or convert")
 args = parser.parse_args()
 
 if args.device:
     values = args.device.split()
-    type = int(values[0],0)
+    type = int(values[0], 0)
     host = values[1]
     mac = bytearray.fromhex(values[2])
 elif args.mac:
@@ -115,7 +115,7 @@ if args.sensors:
         data = dev.check_sensors()
     except:
         data = {}
-        data['temperature'] =  dev.check_temperature()
+        data['temperature'] = dev.check_temperature()
     for key in data:
         print("{} {}".format(key, data[key]))
 if args.send:
diff --git a/cli/broadlink_discovery b/cli/broadlink_discovery
index 74f36ed51fa5..1edbafcbecc6 100755
--- a/cli/broadlink_discovery
+++ b/cli/broadlink_discovery
@@ -1,10 +1,10 @@
 #!/usr/bin/env python
 
-import broadlink
-import time
 import argparse
 
-parser = argparse.ArgumentParser(fromfile_prefix_chars='@');
+import broadlink
+
+parser = argparse.ArgumentParser(fromfile_prefix_chars='@')
 parser.add_argument("--timeout", type=int, default=5, help="timeout to wait for receiving discovery responses")
 parser.add_argument("--ip", default=None, help="ip address to use in the discovery")
 args = parser.parse_args()
@@ -15,7 +15,8 @@ for device in devices:
     if device.auth():
         print("###########################################")
         print(device.type)
-        print("# broadlink_cli --type {} --host {} --mac {}".format(hex(device.devtype), device.host[0], ''.join(format(x, '02x') for x in device.mac)))
+        print("# broadlink_cli --type {} --host {} --mac {}".format(hex(device.devtype), device.host[0],
+                                                                    ''.join(format(x, '02x') for x in device.mac)))
         print("Device file data (to be used with --device @filename in broadlink_cli) : ")
         print("{} {} {}".format(hex(device.devtype), device.host[0], ''.join(format(x, '02x') for x in device.mac)))
         if hasattr(device, 'check_temperature'):
@@ -23,4 +24,3 @@ for device in devices:
         print("")
     else:
         print("Error authenticating with device : {}".format(device.host))
-
diff --git a/setup.py b/setup.py
index bc6495797bdf..ca48ea29b33c 100644
--- a/setup.py
+++ b/setup.py
@@ -1,20 +1,9 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
-import re
-import sys
-import warnings
 
 from setuptools import setup, find_packages
 
-try:
-    import cryptography
-    dynamic_requires = ['cryptography>=2.1.1']
-except ImportError:
-    dynamic_requires = ["pyaes==1.6.0"]
-
-# For Hysen thermostatic heating controller
-dynamic_requires.append('PyCRC')
 
 version = '0.11.1'
 
@@ -26,7 +15,7 @@ setup(
     url='http://github.com/mjg59/python-broadlink',
     packages=find_packages(),
     scripts=[],
-    install_requires=dynamic_requires,
+    install_requires=['cryptography>=2.1.1', 'PyCRC'],
     description='Python API for controlling Broadlink IR controllers',
     classifiers=[
         'Development Status :: 4 - Beta',