cracknuts 0.0.1.dev2__tar.gz → 0.0.2.dev3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cracknuts-0.0.1.dev2/src/cracknuts.egg-info → cracknuts-0.0.2.dev3}/PKG-INFO +1 -1
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/__init__.py +1 -1
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/cracker/basic_cracker.py +14 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/cracker/cracker.py +35 -3
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/cracker/stateful_cracker.py +6 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3/src/cracknuts.egg-info}/PKG-INFO +1 -1
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/LICENSE +0 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/README.md +0 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/pyproject.toml +0 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/setup.cfg +0 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/__main__.py +0 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/acquisition/__init__.py +0 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/acquisition/acquisition.py +0 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/cracker/__init__.py +0 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/cracker/mock_cracker.py +0 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/cracker/protocol.py +0 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/logger.py +0 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/solver/__init__.py +0 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/solver/trace.py +0 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/utils/__init__.py +0 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/utils/hex_util.py +0 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts.egg-info/SOURCES.txt +0 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts.egg-info/dependency_links.txt +0 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts.egg-info/entry_points.txt +0 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts.egg-info/requires.txt +0 -0
- {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts.egg-info/top_level.txt +0 -0
|
@@ -30,6 +30,20 @@ class CrackerS1(AbsCnpCracker):
|
|
|
30
30
|
_, res = self.send_and_receive(protocol.build_send_message(Commands.GET_VERSION))
|
|
31
31
|
return res.decode("ascii") if res is not None else None
|
|
32
32
|
|
|
33
|
+
def cracker_read_register(self, base_address: int, offset: int) -> tuple[int, bytes]:
|
|
34
|
+
payload = struct.pack(">II", base_address, offset)
|
|
35
|
+
self._logger.debug(f"cracker_read_register payload: {payload.hex()}")
|
|
36
|
+
return self.send_with_command(Commands.CRACKER_READ_REGISTER, payload=payload)
|
|
37
|
+
|
|
38
|
+
def cracker_write_register(self, base_address: int, offset: int, data: int | str) -> tuple[int, bytes]:
|
|
39
|
+
if isinstance(data, str):
|
|
40
|
+
if data.startswith("0x") or data.startswith("0X"):
|
|
41
|
+
data = data[2:]
|
|
42
|
+
data = bytes.fromhex(data)
|
|
43
|
+
payload = struct.pack(">III", base_address, offset, data)
|
|
44
|
+
self._logger.debug(f"cracker_write_register payload: {payload.hex()}")
|
|
45
|
+
return self.send_with_command(Commands.CRACKER_WRITE_REGISTER, payload=payload)
|
|
46
|
+
|
|
33
47
|
def osc_set_analog_channel_enable(self, enable: dict[int, bool]):
|
|
34
48
|
self._channel_enable = enable
|
|
35
49
|
payload = 0
|
|
@@ -44,6 +44,23 @@ class Cracker(typing.Protocol):
|
|
|
44
44
|
|
|
45
45
|
def get_version(self) -> str | None: ...
|
|
46
46
|
|
|
47
|
+
def cracker_read_register(self, base_address: int, offset: int) -> tuple[int, bytes]:
|
|
48
|
+
"""Read register
|
|
49
|
+
:param base_address: the base address of the register
|
|
50
|
+
:param offset: the offset of the register
|
|
51
|
+
:return: the result of reading the register
|
|
52
|
+
"""
|
|
53
|
+
...
|
|
54
|
+
|
|
55
|
+
def cracker_write_register(self, base_address: int, offset: int, data) -> tuple[int, bytes]:
|
|
56
|
+
"""Write register
|
|
57
|
+
:param base_address: the base address of the register
|
|
58
|
+
:param offset: the offset of the register
|
|
59
|
+
:param data: the data to be written
|
|
60
|
+
:return: the result of writing the register
|
|
61
|
+
"""
|
|
62
|
+
...
|
|
63
|
+
|
|
47
64
|
def osc_set_analog_channel_enable(self, enable: dict[int, bool]): ...
|
|
48
65
|
|
|
49
66
|
def osc_set_analog_coupling(self, coupling: dict[int, int]): ...
|
|
@@ -142,6 +159,9 @@ class Commands:
|
|
|
142
159
|
GET_NAME = 0x0002
|
|
143
160
|
GET_VERSION = 0x0003
|
|
144
161
|
|
|
162
|
+
CRACKER_READ_REGISTER = 0x0004
|
|
163
|
+
CRACKER_WRITE_REGISTER = 0x0005
|
|
164
|
+
|
|
145
165
|
OSC_ANALOG_CHANNEL_ENABLE = 0x0100
|
|
146
166
|
OSC_ANALOG_COUPLING = 0x0101
|
|
147
167
|
OSC_ANALOG_VOLTAGE = 0x0102
|
|
@@ -247,13 +267,16 @@ class AbsCnpCracker(ABC, Cracker):
|
|
|
247
267
|
Cracker
|
|
248
268
|
"""
|
|
249
269
|
|
|
250
|
-
def __init__(self,
|
|
270
|
+
def __init__(self, address: tuple | str | None = None):
|
|
251
271
|
"""
|
|
252
|
-
:param
|
|
272
|
+
:param address: Cracker device address (ip, port) or "cnp://xxx:xx"
|
|
253
273
|
"""
|
|
254
274
|
self._command_lock = threading.Lock()
|
|
255
275
|
self._logger = logger.get_logger(self)
|
|
256
|
-
|
|
276
|
+
if isinstance(address, tuple):
|
|
277
|
+
self._server_address = address
|
|
278
|
+
elif isinstance(address, str):
|
|
279
|
+
self.set_uri(address)
|
|
257
280
|
self._socket: socket.socket | None = None
|
|
258
281
|
self._connection_status = False
|
|
259
282
|
self._channel_enable: dict = {
|
|
@@ -294,6 +317,9 @@ class AbsCnpCracker(ABC, Cracker):
|
|
|
294
317
|
if not self._socket:
|
|
295
318
|
self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
296
319
|
self._socket.settimeout(5)
|
|
320
|
+
if self._connection_status:
|
|
321
|
+
self._logger.debug("Already connected, reuse.")
|
|
322
|
+
return
|
|
297
323
|
self._socket.connect(self._server_address)
|
|
298
324
|
self._connection_status = True
|
|
299
325
|
self._logger.info(f"Connected to cracker: {self._server_address}")
|
|
@@ -415,6 +441,12 @@ class AbsCnpCracker(ABC, Cracker):
|
|
|
415
441
|
def get_version(self) -> str | None:
|
|
416
442
|
return super().get_version()
|
|
417
443
|
|
|
444
|
+
@abc.abstractmethod
|
|
445
|
+
def cracker_read_register(self, base_address: int, offset: int) -> tuple[int, bytes]: ...
|
|
446
|
+
|
|
447
|
+
@abc.abstractmethod
|
|
448
|
+
def cracker_write_register(self, base_address: int, offset: int, data) -> tuple[int, bytes]: ...
|
|
449
|
+
|
|
418
450
|
@abc.abstractmethod
|
|
419
451
|
def osc_set_analog_channel_enable(self, enable: dict[int, bool]): ...
|
|
420
452
|
|
|
@@ -73,6 +73,12 @@ class StatefulCracker(Cracker):
|
|
|
73
73
|
def get_version(self) -> str:
|
|
74
74
|
return self._cracker.get_version()
|
|
75
75
|
|
|
76
|
+
def cracker_read_register(self, base_address: int, offset: int) -> tuple[int, bytes]:
|
|
77
|
+
return self._cracker.cracker_read_register(base_address, offset)
|
|
78
|
+
|
|
79
|
+
def cracker_write_register(self, base_address: int, offset: int, data) -> tuple[int, bytes]:
|
|
80
|
+
return self._cracker.cracker_write_register(base_address, offset, data)
|
|
81
|
+
|
|
76
82
|
def osc_set_analog_channel_enable(self, enable: dict[int, bool]):
|
|
77
83
|
self._config.osc_analog_channel_enable = enable
|
|
78
84
|
return self._cracker.osc_set_analog_channel_enable(enable)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|