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.
Files changed (26) hide show
  1. {cracknuts-0.0.1.dev2/src/cracknuts.egg-info → cracknuts-0.0.2.dev3}/PKG-INFO +1 -1
  2. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/__init__.py +1 -1
  3. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/cracker/basic_cracker.py +14 -0
  4. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/cracker/cracker.py +35 -3
  5. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/cracker/stateful_cracker.py +6 -0
  6. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3/src/cracknuts.egg-info}/PKG-INFO +1 -1
  7. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/LICENSE +0 -0
  8. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/README.md +0 -0
  9. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/pyproject.toml +0 -0
  10. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/setup.cfg +0 -0
  11. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/__main__.py +0 -0
  12. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/acquisition/__init__.py +0 -0
  13. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/acquisition/acquisition.py +0 -0
  14. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/cracker/__init__.py +0 -0
  15. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/cracker/mock_cracker.py +0 -0
  16. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/cracker/protocol.py +0 -0
  17. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/logger.py +0 -0
  18. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/solver/__init__.py +0 -0
  19. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/solver/trace.py +0 -0
  20. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/utils/__init__.py +0 -0
  21. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts/utils/hex_util.py +0 -0
  22. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts.egg-info/SOURCES.txt +0 -0
  23. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts.egg-info/dependency_links.txt +0 -0
  24. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts.egg-info/entry_points.txt +0 -0
  25. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts.egg-info/requires.txt +0 -0
  26. {cracknuts-0.0.1.dev2 → cracknuts-0.0.2.dev3}/src/cracknuts.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cracknuts
3
- Version: 0.0.1.dev2
3
+ Version: 0.0.2.dev3
4
4
  Summary: A library for cracknuts device.
5
5
  Author-email: Dingzb <dingzibiao@gmail.com>
6
6
  Maintainer-email: Dingzb <dingzibiao@gmail.com>
@@ -1,4 +1,4 @@
1
- __version__ = "0.0.1.dev2"
1
+ __version__ = "0.0.2.dev3"
2
2
 
3
3
 
4
4
  def version():
@@ -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, server_address=None):
270
+ def __init__(self, address: tuple | str | None = None):
251
271
  """
252
- :param server_address: Cracker device address (ip, port)
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
- self._server_address = server_address
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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cracknuts
3
- Version: 0.0.1.dev2
3
+ Version: 0.0.2.dev3
4
4
  Summary: A library for cracknuts device.
5
5
  Author-email: Dingzb <dingzibiao@gmail.com>
6
6
  Maintainer-email: Dingzb <dingzibiao@gmail.com>
File without changes
File without changes
File without changes