Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion j1939/Dm14Server.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -306,13 +307,27 @@ 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
"""
return True if self._key_from_seed(seed) == key else False
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 **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=seed, key=key, address=self.bytes_to_int(self.address), sa=self.sa
)
return self._key_from_seed(seed) == key

def reset_query(self) -> None:
"""
Expand Down
7 changes: 7 additions & 0 deletions j1939/memory_access.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 5 additions & 0 deletions test/test_memory_access.py
Original file line number Diff line number Diff line change
Expand Up @@ -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]

Expand Down Expand Up @@ -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
Expand Down