mirror of
https://github.com/python-kasa/python-kasa.git
synced 2025-08-09 20:24:02 +00:00
Add benchmarks for speedups (#473)
* Add benchmarks for speedups * Update README.md * Update README.md Co-authored-by: Teemu R. <tpr@iki.fi> * relo * Update README.md * document benchmark * Update README.md --------- Co-authored-by: Teemu R. <tpr@iki.fi>
This commit is contained in:
47
devtools/bench/utils/original.py
Normal file
47
devtools/bench/utils/original.py
Normal file
@@ -0,0 +1,47 @@
|
||||
"""Original implementation of the TP-Link Smart Home protocol."""
|
||||
import struct
|
||||
from typing import Generator
|
||||
|
||||
|
||||
class OriginalTPLinkSmartHomeProtocol:
|
||||
"""Original implementation of the TP-Link Smart Home protocol."""
|
||||
|
||||
INITIALIZATION_VECTOR = 171
|
||||
|
||||
@staticmethod
|
||||
def _xor_payload(unencrypted: bytes) -> Generator[int, None, None]:
|
||||
key = OriginalTPLinkSmartHomeProtocol.INITIALIZATION_VECTOR
|
||||
for unencryptedbyte in unencrypted:
|
||||
key = key ^ unencryptedbyte
|
||||
yield key
|
||||
|
||||
@staticmethod
|
||||
def encrypt(request: str) -> bytes:
|
||||
"""Encrypt a request for a TP-Link Smart Home Device.
|
||||
|
||||
:param request: plaintext request data
|
||||
:return: ciphertext to be send over wire, in bytes
|
||||
"""
|
||||
plainbytes = request.encode()
|
||||
return struct.pack(">I", len(plainbytes)) + bytes(
|
||||
OriginalTPLinkSmartHomeProtocol._xor_payload(plainbytes)
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def _xor_encrypted_payload(ciphertext: bytes) -> Generator[int, None, None]:
|
||||
key = OriginalTPLinkSmartHomeProtocol.INITIALIZATION_VECTOR
|
||||
for cipherbyte in ciphertext:
|
||||
plainbyte = key ^ cipherbyte
|
||||
key = cipherbyte
|
||||
yield plainbyte
|
||||
|
||||
@staticmethod
|
||||
def decrypt(ciphertext: bytes) -> str:
|
||||
"""Decrypt a response of a TP-Link Smart Home Device.
|
||||
|
||||
:param ciphertext: encrypted response data
|
||||
:return: plaintext response
|
||||
"""
|
||||
return bytes(
|
||||
OriginalTPLinkSmartHomeProtocol._xor_encrypted_payload(ciphertext)
|
||||
).decode()
|
Reference in New Issue
Block a user