From f2c93f2a73147d034b2e2bb52028cc95e5334472 Mon Sep 17 00:00:00 2001 From: Koltan Hauersperger Date: Mon, 13 Oct 2025 12:01:30 -0400 Subject: [PATCH 1/5] feat: override verify key --- j1939/Dm14Server.py | 10 ++++++++++ j1939/memory_access.py | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/j1939/Dm14Server.py b/j1939/Dm14Server.py index c039a1b..7963e3b 100644 --- a/j1939/Dm14Server.py +++ b/j1939/Dm14Server.py @@ -29,6 +29,7 @@ def __init__(self, ca: j1939.ControllerApplication) -> None: self._key_from_seed = None self.data_queue = queue.Queue() self._seed_generator = self.generate_seed + self._verify_key = None self.address = None self.length = 8 self.proceed = False @@ -306,12 +307,21 @@ def set_seed_generator(self, algorithm: callable) -> None: """ self._seed_generator = algorithm + def set_verify_key(self, algorithm: callable) -> None: + """ + Set key verification algorithm to be used for key verification + :param callable algorithm: key verification algorithm + """ + self._verify_key = algorithm + def verify_key(self, seed: int, key: int) -> bool: """ Checks to see if key is valid :param int seed: seed :param int key: key """ + if self._verify_key is not None: + return self._verify_key(seed, key) return True if self._key_from_seed(seed) == key else False def reset_query(self) -> None: diff --git a/j1939/memory_access.py b/j1939/memory_access.py index 434f798..2eb3448 100644 --- a/j1939/memory_access.py +++ b/j1939/memory_access.py @@ -236,6 +236,13 @@ def set_seed_key_algorithm(self, algorithm: callable) -> None: self.query.set_seed_key_algorithm(algorithm) self.server.set_seed_key_algorithm(algorithm) + def set_verify_key(self, verify_key: callable) -> None: + """ + set verify key function to be used for verifying the key + :param callable verify_key: verify key function + """ + self.server.set_verify_key(verify_key) + def set_notify(self, notify: callable) -> None: """ set notify function to be used for notifying the user of memory accesses From 9cd4a3ccb07e0fc8f19260c5dac71cfbb784c9fd Mon Sep 17 00:00:00 2001 From: Koltan Hauersperger Date: Mon, 13 Oct 2025 13:48:30 -0400 Subject: [PATCH 2/5] feat: add extra args --- j1939/Dm14Server.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/j1939/Dm14Server.py b/j1939/Dm14Server.py index 7963e3b..8bf8279 100644 --- a/j1939/Dm14Server.py +++ b/j1939/Dm14Server.py @@ -321,7 +321,10 @@ def verify_key(self, seed: int, key: int) -> bool: :param int key: key """ if self._verify_key is not None: - return self._verify_key(seed, key) + # TODO: add ability to dynamically pass arguments to verification function if needed, + # if this is breaking can just add *args to function defintion used to set the verification function + # this will allow for the reception of additional arguments if needed + return self._verify_key(seed, key, self.bytes_to_int(self.address), self.sa) return True if self._key_from_seed(seed) == key else False def reset_query(self) -> None: From 99ba637614b60502c855d5c9233776edc274f932 Mon Sep 17 00:00:00 2001 From: Koltan Hauersperger Date: Mon, 13 Oct 2025 13:51:42 -0400 Subject: [PATCH 3/5] style: use keywords --- j1939/Dm14Server.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/j1939/Dm14Server.py b/j1939/Dm14Server.py index 8bf8279..619a696 100644 --- a/j1939/Dm14Server.py +++ b/j1939/Dm14Server.py @@ -322,9 +322,11 @@ def verify_key(self, seed: int, key: int) -> bool: """ if self._verify_key is not None: # TODO: add ability to dynamically pass arguments to verification function if needed, - # if this is breaking can just add *args to function defintion used to set the verification function + # if this is breaking can just add **kwargs to function defintion used to set the verification function # this will allow for the reception of additional arguments if needed - return self._verify_key(seed, key, self.bytes_to_int(self.address), self.sa) + return self._verify_key( + seed=seed, key=key, address=self.bytes_to_int(self.address), sa=self.sa + ) return True if self._key_from_seed(seed) == key else False def reset_query(self) -> None: From c9010ebbc9046c798265849b2cd79eefdfab96af Mon Sep 17 00:00:00 2001 From: Koltan Hauersperger Date: Mon, 13 Oct 2025 13:54:45 -0400 Subject: [PATCH 4/5] test: utilize new functinality inside test --- test/test_memory_access.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/test_memory_access.py b/test/test_memory_access.py index 31d9c7b..067c11b 100644 --- a/test/test_memory_access.py +++ b/test/test_memory_access.py @@ -163,6 +163,10 @@ def generate_seed(): return 0xA55A +def verify_key(key, seed, **_): + return key == key_from_seed(seed) + + def get_error(): return [(e.value) for e in j1939.J1939Error] @@ -428,6 +432,7 @@ def test_dm14_request_write(feeder, expected_messages): if expected_messages == request_write_with_seed: dm14.set_seed_key_algorithm(key_from_seed) + dm14.set_verify_key(verify_key) values = 0x11223344 while flag is False: pass From 1febe65fbf1e3bc2839138db9d2100a2c4790daf Mon Sep 17 00:00:00 2001 From: Koltan Hauersperger <54869912+khauersp@users.noreply.github.com> Date: Mon, 13 Oct 2025 14:03:17 -0400 Subject: [PATCH 5/5] feat: simplify check Co-authored-by: Drew Rife --- j1939/Dm14Server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/j1939/Dm14Server.py b/j1939/Dm14Server.py index 619a696..34865f4 100644 --- a/j1939/Dm14Server.py +++ b/j1939/Dm14Server.py @@ -327,7 +327,7 @@ def verify_key(self, seed: int, key: int) -> bool: return self._verify_key( seed=seed, key=key, address=self.bytes_to_int(self.address), sa=self.sa ) - return True if self._key_from_seed(seed) == key else False + return self._key_from_seed(seed) == key def reset_query(self) -> None: """