oscura 0.3.0__py3-none-any.whl → 0.5.0__py3-none-any.whl
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.
- oscura/__init__.py +1 -7
- oscura/acquisition/__init__.py +147 -0
- oscura/acquisition/file.py +255 -0
- oscura/acquisition/hardware.py +186 -0
- oscura/acquisition/saleae.py +340 -0
- oscura/acquisition/socketcan.py +315 -0
- oscura/acquisition/streaming.py +38 -0
- oscura/acquisition/synthetic.py +229 -0
- oscura/acquisition/visa.py +376 -0
- oscura/analyzers/__init__.py +3 -0
- oscura/analyzers/digital/__init__.py +48 -0
- oscura/analyzers/digital/clock.py +9 -1
- oscura/analyzers/digital/edges.py +1 -1
- oscura/analyzers/digital/extraction.py +195 -0
- oscura/analyzers/digital/ic_database.py +498 -0
- oscura/analyzers/digital/timing.py +41 -11
- oscura/analyzers/digital/timing_paths.py +339 -0
- oscura/analyzers/digital/vintage.py +377 -0
- oscura/analyzers/digital/vintage_result.py +148 -0
- oscura/analyzers/protocols/__init__.py +22 -1
- oscura/analyzers/protocols/parallel_bus.py +449 -0
- oscura/analyzers/side_channel/__init__.py +52 -0
- oscura/analyzers/side_channel/power.py +690 -0
- oscura/analyzers/side_channel/timing.py +369 -0
- oscura/analyzers/signal_integrity/sparams.py +1 -1
- oscura/automotive/__init__.py +4 -2
- oscura/automotive/can/patterns.py +3 -1
- oscura/automotive/can/session.py +277 -78
- oscura/automotive/can/state_machine.py +5 -2
- oscura/builders/__init__.py +9 -11
- oscura/builders/signal_builder.py +99 -191
- oscura/core/exceptions.py +5 -1
- oscura/export/__init__.py +12 -0
- oscura/export/wavedrom.py +430 -0
- oscura/exporters/json_export.py +47 -0
- oscura/exporters/vintage_logic_csv.py +247 -0
- oscura/loaders/__init__.py +1 -0
- oscura/loaders/chipwhisperer.py +393 -0
- oscura/loaders/touchstone.py +1 -1
- oscura/reporting/__init__.py +7 -0
- oscura/reporting/vintage_logic_report.py +523 -0
- oscura/session/session.py +54 -46
- oscura/sessions/__init__.py +70 -0
- oscura/sessions/base.py +323 -0
- oscura/sessions/blackbox.py +640 -0
- oscura/sessions/generic.py +189 -0
- oscura/utils/autodetect.py +5 -1
- oscura/visualization/digital_advanced.py +718 -0
- oscura/visualization/figure_manager.py +156 -0
- {oscura-0.3.0.dist-info → oscura-0.5.0.dist-info}/METADATA +86 -5
- {oscura-0.3.0.dist-info → oscura-0.5.0.dist-info}/RECORD +54 -33
- oscura/automotive/dtc/data.json +0 -2763
- oscura/schemas/bus_configuration.json +0 -322
- oscura/schemas/device_mapping.json +0 -182
- oscura/schemas/packet_format.json +0 -418
- oscura/schemas/protocol_definition.json +0 -363
- {oscura-0.3.0.dist-info → oscura-0.5.0.dist-info}/WHEEL +0 -0
- {oscura-0.3.0.dist-info → oscura-0.5.0.dist-info}/entry_points.txt +0 -0
- {oscura-0.3.0.dist-info → oscura-0.5.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"""Figure management for saving and organizing matplotlib figures.
|
|
2
|
+
|
|
3
|
+
This module provides utilities for saving matplotlib figures in multiple formats
|
|
4
|
+
and managing collections of figures for report generation.
|
|
5
|
+
|
|
6
|
+
Example:
|
|
7
|
+
>>> from oscura.visualization.figure_manager import FigureManager
|
|
8
|
+
>>> manager = FigureManager(output_dir="./plots")
|
|
9
|
+
>>> paths = manager.save_figure(fig, "timing_diagram", formats=["png", "svg"])
|
|
10
|
+
>>> base64_img = manager.embed_as_base64(fig, format="png")
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import base64
|
|
16
|
+
from io import BytesIO
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
from typing import TYPE_CHECKING, Any
|
|
19
|
+
|
|
20
|
+
if TYPE_CHECKING:
|
|
21
|
+
from matplotlib.figure import Figure
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class FigureManager:
|
|
25
|
+
"""Manager for saving and organizing matplotlib figures.
|
|
26
|
+
|
|
27
|
+
Attributes:
|
|
28
|
+
output_dir: Directory for saving figures.
|
|
29
|
+
saved_figures: Dictionary mapping figure names to saved paths.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
def __init__(self, output_dir: str | Path):
|
|
33
|
+
"""Initialize figure manager.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
output_dir: Directory for saving figures.
|
|
37
|
+
"""
|
|
38
|
+
self.output_dir = Path(output_dir)
|
|
39
|
+
self.output_dir.mkdir(parents=True, exist_ok=True)
|
|
40
|
+
self.saved_figures: dict[str, dict[str, Path]] = {}
|
|
41
|
+
|
|
42
|
+
def save_figure(
|
|
43
|
+
self,
|
|
44
|
+
fig: Figure,
|
|
45
|
+
name: str,
|
|
46
|
+
*,
|
|
47
|
+
formats: list[str] | None = None,
|
|
48
|
+
dpi: int = 300,
|
|
49
|
+
**savefig_kwargs: Any,
|
|
50
|
+
) -> dict[str, Path]:
|
|
51
|
+
"""Save figure in multiple formats.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
fig: Matplotlib figure to save.
|
|
55
|
+
name: Base name for the saved files (without extension).
|
|
56
|
+
formats: List of formats to save ("png", "svg", "pdf"). Defaults to ["png"].
|
|
57
|
+
dpi: Resolution for raster formats (default: 300).
|
|
58
|
+
**savefig_kwargs: Additional kwargs passed to fig.savefig().
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
Dictionary mapping format to saved file path.
|
|
62
|
+
|
|
63
|
+
Example:
|
|
64
|
+
>>> paths = manager.save_figure(fig, "timing_diagram", formats=["png", "svg"])
|
|
65
|
+
>>> print(paths["png"]) # PosixPath('./plots/timing_diagram.png')
|
|
66
|
+
"""
|
|
67
|
+
if formats is None:
|
|
68
|
+
formats = ["png"]
|
|
69
|
+
|
|
70
|
+
saved_paths: dict[str, Path] = {}
|
|
71
|
+
|
|
72
|
+
for fmt in formats:
|
|
73
|
+
# Construct file path
|
|
74
|
+
file_path = self.output_dir / f"{name}.{fmt}"
|
|
75
|
+
|
|
76
|
+
# Save figure
|
|
77
|
+
fig.savefig(
|
|
78
|
+
file_path,
|
|
79
|
+
dpi=dpi,
|
|
80
|
+
bbox_inches="tight",
|
|
81
|
+
format=fmt,
|
|
82
|
+
**savefig_kwargs,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
saved_paths[fmt] = file_path
|
|
86
|
+
|
|
87
|
+
# Store in saved_figures registry
|
|
88
|
+
self.saved_figures[name] = saved_paths
|
|
89
|
+
|
|
90
|
+
return saved_paths
|
|
91
|
+
|
|
92
|
+
def embed_as_base64(
|
|
93
|
+
self,
|
|
94
|
+
fig: Figure,
|
|
95
|
+
format: str = "png",
|
|
96
|
+
dpi: int = 150,
|
|
97
|
+
**savefig_kwargs: Any,
|
|
98
|
+
) -> str:
|
|
99
|
+
"""Convert figure to base64-encoded string for HTML embedding.
|
|
100
|
+
|
|
101
|
+
Args:
|
|
102
|
+
fig: Matplotlib figure to convert.
|
|
103
|
+
format: Image format ("png", "jpg", "svg"). Default: "png".
|
|
104
|
+
dpi: Resolution for raster formats (default: 150).
|
|
105
|
+
**savefig_kwargs: Additional kwargs passed to fig.savefig().
|
|
106
|
+
|
|
107
|
+
Returns:
|
|
108
|
+
Base64-encoded image string (without data URI prefix).
|
|
109
|
+
|
|
110
|
+
Example:
|
|
111
|
+
>>> base64_img = manager.embed_as_base64(fig)
|
|
112
|
+
>>> html = f'<img src="data:image/png;base64,{base64_img}" />'
|
|
113
|
+
"""
|
|
114
|
+
# Save figure to bytes buffer
|
|
115
|
+
buf = BytesIO()
|
|
116
|
+
fig.savefig(
|
|
117
|
+
buf,
|
|
118
|
+
format=format,
|
|
119
|
+
dpi=dpi,
|
|
120
|
+
bbox_inches="tight",
|
|
121
|
+
**savefig_kwargs,
|
|
122
|
+
)
|
|
123
|
+
buf.seek(0)
|
|
124
|
+
|
|
125
|
+
# Encode to base64
|
|
126
|
+
img_base64 = base64.b64encode(buf.read()).decode("utf-8")
|
|
127
|
+
buf.close()
|
|
128
|
+
|
|
129
|
+
return img_base64
|
|
130
|
+
|
|
131
|
+
def get_saved_path(self, name: str, format: str) -> Path | None:
|
|
132
|
+
"""Get path to a saved figure.
|
|
133
|
+
|
|
134
|
+
Args:
|
|
135
|
+
name: Figure name.
|
|
136
|
+
format: Image format.
|
|
137
|
+
|
|
138
|
+
Returns:
|
|
139
|
+
Path to saved figure, or None if not found.
|
|
140
|
+
"""
|
|
141
|
+
if name in self.saved_figures:
|
|
142
|
+
return self.saved_figures[name].get(format)
|
|
143
|
+
return None
|
|
144
|
+
|
|
145
|
+
def list_saved_figures(self) -> list[str]:
|
|
146
|
+
"""Get list of all saved figure names.
|
|
147
|
+
|
|
148
|
+
Returns:
|
|
149
|
+
List of figure names.
|
|
150
|
+
"""
|
|
151
|
+
return list(self.saved_figures.keys())
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
__all__ = [
|
|
155
|
+
"FigureManager",
|
|
156
|
+
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: oscura
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: Unified hardware reverse engineering framework. Extract all information from any system through signals and data. Unknown protocol discovery, state machine extraction, CRC recovery, security analysis. 16+ protocols, IEEE-compliant measurements.
|
|
5
5
|
Project-URL: Homepage, https://github.com/oscura-re/oscura
|
|
6
6
|
Project-URL: Documentation, https://github.com/oscura-re/oscura/tree/main/docs
|
|
@@ -57,6 +57,8 @@ Requires-Dist: pytest-timeout<3.0.0,>=2.3.0; extra == 'all'
|
|
|
57
57
|
Requires-Dist: pytest<10.0.0,>=8.0; extra == 'all'
|
|
58
58
|
Requires-Dist: python-can<5.0.0,>=4.4.0; extra == 'all'
|
|
59
59
|
Requires-Dist: python-pptx<1.0.0,>=0.6.21; extra == 'all'
|
|
60
|
+
Requires-Dist: pyvisa-py<1.0.0,>=0.7.0; extra == 'all'
|
|
61
|
+
Requires-Dist: pyvisa<2.0.0,>=1.13.0; extra == 'all'
|
|
60
62
|
Requires-Dist: pywavelets<2.0.0,>=1.0.0; extra == 'all'
|
|
61
63
|
Requires-Dist: reportlab<6.0.0,>=4.4.7; extra == 'all'
|
|
62
64
|
Requires-Dist: rigolwfm<2.0.0,>=1.0.0; extra == 'all'
|
|
@@ -82,6 +84,9 @@ Requires-Dist: pytest-timeout<3.0.0,>=2.3.0; extra == 'dev'
|
|
|
82
84
|
Requires-Dist: pytest<10.0.0,>=8.0; extra == 'dev'
|
|
83
85
|
Requires-Dist: types-pyyaml<7.0.0,>=6.0; extra == 'dev'
|
|
84
86
|
Requires-Dist: yamllint<2.0.0,>=1.35; extra == 'dev'
|
|
87
|
+
Provides-Extra: hardware
|
|
88
|
+
Requires-Dist: pyvisa-py<1.0.0,>=0.7.0; extra == 'hardware'
|
|
89
|
+
Requires-Dist: pyvisa<2.0.0,>=1.13.0; extra == 'hardware'
|
|
85
90
|
Provides-Extra: hdf5
|
|
86
91
|
Requires-Dist: h5py<4.0.0,>=3.0.0; extra == 'hdf5'
|
|
87
92
|
Provides-Extra: jupyter
|
|
@@ -127,11 +132,15 @@ Description-Content-Type: text/markdown
|
|
|
127
132
|
|
|
128
133
|
Oscura is a hardware reverse engineering framework for security researchers, right-to-repair advocates, defense analysts, and commercial intelligence teams. From oscilloscope captures to complete system understanding.
|
|
129
134
|
|
|
130
|
-
**Reverse Engineering**: Unknown protocol discovery • State machine extraction • CRC/checksum recovery • Proprietary device replication • Security vulnerability analysis
|
|
135
|
+
**Reverse Engineering**: Unknown protocol discovery • State machine extraction • CRC/checksum recovery • Proprietary device replication • Security vulnerability analysis • Black-box protocol analysis
|
|
131
136
|
|
|
132
|
-
**Signal Analysis**: IEEE-compliant measurements (181/1241/1459/2414) • Comprehensive protocol decoding (16+ protocols) • Spectral analysis • Timing characterization
|
|
137
|
+
**Signal Analysis**: IEEE-compliant measurements (181/1241/1459/2414) • Comprehensive protocol decoding (16+ protocols) • Spectral analysis • Timing characterization • Side-channel analysis (DPA/CPA/timing attacks)
|
|
133
138
|
|
|
134
|
-
**
|
|
139
|
+
**Unified Acquisition**: File-based • Hardware sources (SocketCAN, Saleae, PyVISA - Phase 2) • Synthetic generation • Polymorphic Source protocol
|
|
140
|
+
|
|
141
|
+
**Interactive Sessions**: Domain-specific analysis sessions • BlackBoxSession for protocol RE • Differential analysis • Field hypothesis generation • Protocol specification export
|
|
142
|
+
|
|
143
|
+
**Built For**: Exploitation • Replication • Defense analysis • Commercial intelligence • Right-to-repair • Cryptographic research
|
|
135
144
|
|
|
136
145
|
---
|
|
137
146
|
|
|
@@ -155,6 +164,8 @@ cd oscura
|
|
|
155
164
|
|
|
156
165
|
## Quick Start
|
|
157
166
|
|
|
167
|
+
### Signal Analysis
|
|
168
|
+
|
|
158
169
|
```python
|
|
159
170
|
import oscura as osc
|
|
160
171
|
|
|
@@ -171,6 +182,57 @@ decoder = UARTDecoder(baud_rate=115200)
|
|
|
171
182
|
messages = decoder.decode(trace)
|
|
172
183
|
```
|
|
173
184
|
|
|
185
|
+
### Black-Box Protocol Reverse Engineering
|
|
186
|
+
|
|
187
|
+
```python
|
|
188
|
+
from oscura.sessions import BlackBoxSession
|
|
189
|
+
from oscura.acquisition import FileSource
|
|
190
|
+
|
|
191
|
+
# Create analysis session
|
|
192
|
+
session = BlackBoxSession(name="IoT Device RE")
|
|
193
|
+
|
|
194
|
+
# Add recordings from different stimuli
|
|
195
|
+
session.add_recording("idle", FileSource("idle.bin"))
|
|
196
|
+
session.add_recording("button_press", FileSource("button.bin"))
|
|
197
|
+
|
|
198
|
+
# Differential analysis
|
|
199
|
+
diff = session.compare("idle", "button_press")
|
|
200
|
+
print(f"Changed bytes: {diff.changed_bytes}")
|
|
201
|
+
|
|
202
|
+
# Generate protocol specification
|
|
203
|
+
spec = session.generate_protocol_spec()
|
|
204
|
+
print(f"Detected {len(spec['fields'])} protocol fields")
|
|
205
|
+
|
|
206
|
+
# Export Wireshark dissector
|
|
207
|
+
session.export_results("dissector", "protocol.lua")
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### CAN Protocol Analysis
|
|
211
|
+
|
|
212
|
+
```python
|
|
213
|
+
from oscura.automotive.can import CANSession
|
|
214
|
+
from oscura.acquisition import FileSource
|
|
215
|
+
|
|
216
|
+
# Create session
|
|
217
|
+
session = CANSession(name="Vehicle Analysis")
|
|
218
|
+
|
|
219
|
+
# Add recordings from CAN bus captures
|
|
220
|
+
session.add_recording("idle", FileSource("idle.blf"))
|
|
221
|
+
session.add_recording("accelerate", FileSource("accelerate.blf"))
|
|
222
|
+
|
|
223
|
+
# Analyze traffic
|
|
224
|
+
analysis = session.analyze()
|
|
225
|
+
print(f"Messages: {analysis['inventory']['total_messages']}")
|
|
226
|
+
print(f"Unique IDs: {len(analysis['inventory']['message_ids'])}")
|
|
227
|
+
|
|
228
|
+
# Compare recordings
|
|
229
|
+
diff = session.compare("idle", "accelerate")
|
|
230
|
+
print(f"Changed IDs: {len(diff.details['changed_ids'])}")
|
|
231
|
+
|
|
232
|
+
# Export DBC file
|
|
233
|
+
session.export_dbc("vehicle.dbc")
|
|
234
|
+
```
|
|
235
|
+
|
|
174
236
|
---
|
|
175
237
|
|
|
176
238
|
## Learn by Example
|
|
@@ -285,9 +347,28 @@ uv sync --all-extras
|
|
|
285
347
|
|
|
286
348
|
## Documentation
|
|
287
349
|
|
|
288
|
-
|
|
350
|
+
### Getting Started
|
|
351
|
+
|
|
352
|
+
- **[Quick Start Guide](docs/guides/quick-start.md)** - Begin here
|
|
353
|
+
- **[Demos](demos/)** - Working examples for every feature
|
|
354
|
+
- **[Migration Guide](docs/migration/v0-to-v1.md)** - Upgrade from older versions
|
|
355
|
+
|
|
356
|
+
### User Guides
|
|
357
|
+
|
|
358
|
+
- **[Black-Box Protocol Analysis](docs/guides/blackbox-analysis.md)** - Unknown protocol reverse engineering
|
|
359
|
+
- **[Hardware Acquisition](docs/guides/hardware-acquisition.md)** - Direct hardware integration (Phase 2)
|
|
360
|
+
- **[Side-Channel Analysis](docs/guides/side-channel-analysis.md)** - Power/timing/EM attacks
|
|
361
|
+
- **[Workflows](docs/guides/workflows.md)** - Complete analysis workflows
|
|
362
|
+
|
|
363
|
+
### API Reference
|
|
364
|
+
|
|
289
365
|
- **[API Reference](docs/api/)** - Complete API documentation
|
|
366
|
+
- **[Session Management](docs/api/session-management.md)** - Interactive analysis sessions
|
|
290
367
|
- **[CLI Reference](docs/cli.md)** - Command line usage
|
|
368
|
+
|
|
369
|
+
### Development
|
|
370
|
+
|
|
371
|
+
- **[Architecture](docs/architecture/)** - Design principles and patterns
|
|
291
372
|
- **[Testing Guide](docs/testing/)** - Test suite architecture
|
|
292
373
|
- **[CHANGELOG](CHANGELOG.md)** - Version history
|
|
293
374
|
|
|
@@ -1,21 +1,33 @@
|
|
|
1
|
-
oscura/__init__.py,sha256=
|
|
1
|
+
oscura/__init__.py,sha256=JQy7jHn9bhuDQajZSL5Eq4H31pUdqNMEakzDrEf1FIQ,18313
|
|
2
2
|
oscura/__main__.py,sha256=l1rnaD-tpI1W3cp1VHGhSdq9NDqw6Gxjf_gnqXf-zzE,11786
|
|
3
3
|
oscura/convenience.py,sha256=o8f1Im8WpakGXRz8D4bV-XSNkzpgnVjsyVxnaxZ-dg4,14612
|
|
4
4
|
oscura/exceptions.py,sha256=Ywyi7IhEG9XmbceCxAcLGKAddAOdP9Ph1ZT2NioMQCU,1606
|
|
5
5
|
oscura/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
-
oscura/
|
|
6
|
+
oscura/acquisition/__init__.py,sha256=JAQt5FXsGiKPkqHuyWJoGVnGf1ElSRXqGxJdjcDLLho,4834
|
|
7
|
+
oscura/acquisition/file.py,sha256=nrOWunIGxUaF-B946ZKwME4f-8jbWhp3z3BadvCuUw0,8426
|
|
8
|
+
oscura/acquisition/hardware.py,sha256=-BrIi0aLoVBTVIh5gdTvYY5OrDPIv06wxrx28GJw7j8,6598
|
|
9
|
+
oscura/acquisition/saleae.py,sha256=D61v7_k-zZzor-jiYHFwjd-u8VFo93spQ3_m7Jhk_Dc,11438
|
|
10
|
+
oscura/acquisition/socketcan.py,sha256=ifs7Chv-pk4LLYTvfe4-9xS2-vbe4efqVd1azIYLexE,10575
|
|
11
|
+
oscura/acquisition/streaming.py,sha256=P57M8S33DGIeoDUSBHm3bzoKfNIDZkYE4dODPNeJy78,1191
|
|
12
|
+
oscura/acquisition/synthetic.py,sha256=VXhz5W0gzwE3_Ezo7hADwfFoTV5pOixpPCVNPMngNAo,7823
|
|
13
|
+
oscura/acquisition/visa.py,sha256=phUwdlbphvNhSCaRgIXuPb8YDP0jR4eqY-OuJXCgRCo,12272
|
|
14
|
+
oscura/analyzers/__init__.py,sha256=LE-KFYoVePYsiPIy2NDNB2OrzbtqYezdCu9xqqPxgrY,985
|
|
7
15
|
oscura/analyzers/measurements.py,sha256=ng5Qt2jyAvfKw3JQbJY_JNUqAOJEZwPo3UWa0xSg5Xk,697
|
|
8
16
|
oscura/analyzers/validation.py,sha256=vHSKmLThwcU0j5Dat9QPbWImw_dqUGaZk_Ul6XbJ958,20376
|
|
9
|
-
oscura/analyzers/digital/__init__.py,sha256=
|
|
17
|
+
oscura/analyzers/digital/__init__.py,sha256=uvsCUtA1V3PIinIf2l2CXPShx4qIYzNtD-oIGfFBU6E,5399
|
|
10
18
|
oscura/analyzers/digital/bus.py,sha256=Wf3QUKNSxzXaWItR1rdf32kELayywrIg0TC-OhKEub0,22717
|
|
11
|
-
oscura/analyzers/digital/clock.py,sha256=
|
|
19
|
+
oscura/analyzers/digital/clock.py,sha256=2WihQyf2fUlKTDAOKrhQSStiuUw711CvR6bMbkiliAc,26088
|
|
12
20
|
oscura/analyzers/digital/correlation.py,sha256=_D-pmymVU1rTemSUfg_MklXCo03VkfAFcxSTLAV6jcY,23689
|
|
13
|
-
oscura/analyzers/digital/edges.py,sha256
|
|
14
|
-
oscura/analyzers/digital/extraction.py,sha256=
|
|
21
|
+
oscura/analyzers/digital/edges.py,sha256=-Mlyh_SFkqs7L2n11bfYlv8bHD-jrfV6UByhXS1DLp0,20018
|
|
22
|
+
oscura/analyzers/digital/extraction.py,sha256=OhePZrtAPHmUKbtEc3_lVXBKak2wT8OQD0ELJI69uIA,17980
|
|
23
|
+
oscura/analyzers/digital/ic_database.py,sha256=UUyeK1ckJXzv3oKhNOMJQcm9kmCx6g6SBA-eVHvvGO4,12393
|
|
15
24
|
oscura/analyzers/digital/quality.py,sha256=bMXpmAhs15tjyiWW0Ao5aZcK_8AvEKyo_E3rtxDrFlo,27413
|
|
16
25
|
oscura/analyzers/digital/signal_quality.py,sha256=Ssb1MkUfqjiENJJFOslkTX8Ef6C65HFCM_Ra20Bvp4k,30130
|
|
17
26
|
oscura/analyzers/digital/thresholds.py,sha256=CrGgO1rtzkUOnYb40UT3_uD_0qVA853lGL2WNL95qv4,22428
|
|
18
|
-
oscura/analyzers/digital/timing.py,sha256=
|
|
27
|
+
oscura/analyzers/digital/timing.py,sha256=eOo1jk-FfUd3tkqDndPTz-JO5tnfW9w4dEI-klgW-QU,34862
|
|
28
|
+
oscura/analyzers/digital/timing_paths.py,sha256=SQY7L7QPEm3IuiZGRULJtRJT1AbSLrc4OtKbahwb4eo,10433
|
|
29
|
+
oscura/analyzers/digital/vintage.py,sha256=3Ayufv-q2B4flhSG2DOrJkrIuiHnHDv5hbUHTR3dQQU,13910
|
|
30
|
+
oscura/analyzers/digital/vintage_result.py,sha256=Rn71FVyptdbP1gF-TvR3VX5ANIW2bi5YpM8huxyLKyU,4575
|
|
19
31
|
oscura/analyzers/eye/__init__.py,sha256=SRW0Ir-1RWLwoaenk6FZhGOIWPkuhevYTPt_-8thPw0,974
|
|
20
32
|
oscura/analyzers/eye/diagram.py,sha256=T3QwuZ3nvlHzSkmjp47ariRlt3FnfsK6yh3WsPszhmI,13307
|
|
21
33
|
oscura/analyzers/eye/metrics.py,sha256=QDwtMxiBPSXbUCyFnTiAgWllbVCrcI4xEo6teZc3Cm8,17210
|
|
@@ -49,7 +61,7 @@ oscura/analyzers/power/ripple.py,sha256=4JZVeZxEivzoThKKTynSTgWEU_453QcoRtASmaYg
|
|
|
49
61
|
oscura/analyzers/power/soa.py,sha256=lz6ExB-j-nCWAFSuPVd-TeSA4KD3QEasvZTzhBCaKnE,11019
|
|
50
62
|
oscura/analyzers/power/switching.py,sha256=6GKfrM0LBfsSFoCCK8kAGQ48tbxnPsUWQ393iypBb0A,15884
|
|
51
63
|
oscura/analyzers/protocol/__init__.py,sha256=DKCoqmpPHgB-Bz65GXArcoqScd714GAbL2eFxcccZEY,3035
|
|
52
|
-
oscura/analyzers/protocols/__init__.py,sha256=
|
|
64
|
+
oscura/analyzers/protocols/__init__.py,sha256=B6ovQ3U_QFXrnaqIiEpywOYOFhYuRgwG9aoVqL1zd4I,3861
|
|
53
65
|
oscura/analyzers/protocols/base.py,sha256=muw9p0LbItduhB2qgt8F0aGodeyVrbM_-6rIIk6ZPfA,13651
|
|
54
66
|
oscura/analyzers/protocols/can.py,sha256=pJGzMrjYJcaPrShdCxw7EMzwUlSNyvhBfuzOUha4JeQ,17810
|
|
55
67
|
oscura/analyzers/protocols/can_fd.py,sha256=MYyB9y6LqUy1zZW0papzajU_RMJFnQeW2_6LTv9qjSM,12992
|
|
@@ -61,14 +73,18 @@ oscura/analyzers/protocols/jtag.py,sha256=CEQWx6g22v2fc14c7d8r2dyeqyfslA9BjKOdl0
|
|
|
61
73
|
oscura/analyzers/protocols/lin.py,sha256=JEzF105t-3NeZGx0o-jrOj8JJ5NbU-ZgIWa9r_tKEOw,13692
|
|
62
74
|
oscura/analyzers/protocols/manchester.py,sha256=C01r2u-DZQ-Zlb9P2wYHa-YpKz48HM7wSQAhSdrXNTI,10279
|
|
63
75
|
oscura/analyzers/protocols/onewire.py,sha256=rZHg1zEuIIeHDqKhGS5LEC8lwiWGtdtW0i3Eo8RblFo,15852
|
|
76
|
+
oscura/analyzers/protocols/parallel_bus.py,sha256=sv0e_GzmcwnP_3nPz10ycWrLbaciuD5QoKVaE7q6vpw,14498
|
|
64
77
|
oscura/analyzers/protocols/spi.py,sha256=gl0LVpZVI22tr7h5D1OAdDtlY_krb7CdNCNP10DirRI,10740
|
|
65
78
|
oscura/analyzers/protocols/swd.py,sha256=NAInX2bZyZFCM03CLjjxraYTV7cCGOzcl_OEXU21qZE,10155
|
|
66
79
|
oscura/analyzers/protocols/uart.py,sha256=6bf9EFHjHjkSeTxBq8b6GRlp1xWlBh65HuUcmWxWAEA,12188
|
|
67
80
|
oscura/analyzers/protocols/usb.py,sha256=jBjmqfqnwys6Zvd7Ku-zZRNlOVZB7xKPmocM2NynGg4,14541
|
|
81
|
+
oscura/analyzers/side_channel/__init__.py,sha256=XGD7uvvL6Mf2FO6VU5fbBTtfARA-WGXa-rvHAbjNBxc,1361
|
|
82
|
+
oscura/analyzers/side_channel/power.py,sha256=036A5ygwGVa5jqOFoOWm1bV-x63FrztyCS8cIEc68wo,17995
|
|
83
|
+
oscura/analyzers/side_channel/timing.py,sha256=loNKa5dgWu9sFTsKCNt087vqYCjBIVVQn3lzQBb3pQc,12128
|
|
68
84
|
oscura/analyzers/signal_integrity/__init__.py,sha256=RXt5K79WFsy3NvJuNjVxWCf0r6Z8kOIBvJSBBw4X2Y8,1410
|
|
69
85
|
oscura/analyzers/signal_integrity/embedding.py,sha256=LV-8TwSfCfFe-TavXXKOw7eIeigxkvKeJktyQiqcZXg,8036
|
|
70
86
|
oscura/analyzers/signal_integrity/equalization.py,sha256=cVomry8n-U5pS8F2LKuEdZBwmi1wfbQo2vyWettn2A0,9906
|
|
71
|
-
oscura/analyzers/signal_integrity/sparams.py,sha256=
|
|
87
|
+
oscura/analyzers/signal_integrity/sparams.py,sha256=TK4o-IOfnVVbfycBgJ0XhTgBYxHcBNdFbmC9TXhfMJs,8303
|
|
72
88
|
oscura/analyzers/spectral/__init__.py,sha256=YeUKiUOtN3LkWjPmjiG55OWMldSaBJ4BE4OSem7sdm0,850
|
|
73
89
|
oscura/analyzers/spectral/chunked.py,sha256=KS1Jtv_o9vripQVH3CeaTBx-Lq4AAU-eOXF9_En3rc4,8551
|
|
74
90
|
oscura/analyzers/spectral/chunked_fft.py,sha256=VKslVgXv7xuSuVVx-Fk2eh255AG6D0D-hQFzAbz1Hk4,18593
|
|
@@ -99,7 +115,7 @@ oscura/api/fluent.py,sha256=Bvo1yVqqn3nmVWaoPv4C-YtYszBhHmdW8m5NdyhWEEo,15373
|
|
|
99
115
|
oscura/api/operators.py,sha256=To4PZUrwInD43T7i2Sy8YD04eLoRsmrD6XYePuExUX8,13853
|
|
100
116
|
oscura/api/optimization.py,sha256=5R6rPByVsyxla6oq4SjxjxEp9Uplog4owzsIuFcVoR0,11875
|
|
101
117
|
oscura/api/profiling.py,sha256=vkYinleXrznWdd0OT5zIJN_PW289GQE_ODmR9DaCcQ0,10567
|
|
102
|
-
oscura/automotive/__init__.py,sha256=
|
|
118
|
+
oscura/automotive/__init__.py,sha256=jq1rxBi385z0rwgZy6sgPGFGRrrzhg5vYi45-pO3VNc,2538
|
|
103
119
|
oscura/automotive/visualization.py,sha256=2ILQjzNwCwj6zZ4MEsBS-QLwYFKMO0_0xDsbv3gEXu0,10692
|
|
104
120
|
oscura/automotive/can/__init__.py,sha256=0WCLgE6juqQF_mTO716tWzfziOcM6cjshdb957G0edw,1283
|
|
105
121
|
oscura/automotive/can/analysis.py,sha256=0z6MycxuJGusqDQhYEpHnGRmDw3OMf5yDbS8zI6GJO0,11251
|
|
@@ -108,15 +124,14 @@ oscura/automotive/can/correlation.py,sha256=B7MXSz_uzce-dSkwON4ssmFzC53hYc6GupZW
|
|
|
108
124
|
oscura/automotive/can/discovery.py,sha256=E4Z-zc8cOP_yUklhVp2tBLOIw2I9KU4mLoSb37VsgTk,11237
|
|
109
125
|
oscura/automotive/can/message_wrapper.py,sha256=xCyHLMvvTiloifWXELoeuN6Qz_vrLL8iPjxZG1FvJYY,12640
|
|
110
126
|
oscura/automotive/can/models.py,sha256=fGnCt8FBKURKAz295s2duUas--w2rVfJpMEZ4O9uPvA,12046
|
|
111
|
-
oscura/automotive/can/patterns.py,sha256=
|
|
112
|
-
oscura/automotive/can/session.py,sha256=
|
|
113
|
-
oscura/automotive/can/state_machine.py,sha256=
|
|
127
|
+
oscura/automotive/can/patterns.py,sha256=XkiBnxaL20Zbpt9aK7dS8BGXQtbNe8PoyTyZNsj-BLY,13960
|
|
128
|
+
oscura/automotive/can/session.py,sha256=bLbDuKw2uuGvIr25E0njYJGWw1urRVhWVMckVUL2EI4,24577
|
|
129
|
+
oscura/automotive/can/state_machine.py,sha256=yeHwydg5RegCPg_zvzS7lLZX-JfBdfMySUcNgMszuIY,10407
|
|
114
130
|
oscura/automotive/can/stimulus_response.py,sha256=y_oN297KypsFewjM6kvjGII0-7Ubpz2RZBPr8pjW-Gc,16543
|
|
115
131
|
oscura/automotive/dbc/__init__.py,sha256=7s36h4LQrJKKkO3ICHeuVCoYVx8jGnHT_wKcJgOsQFQ,380
|
|
116
132
|
oscura/automotive/dbc/generator.py,sha256=EqJKJikAK2Neaff2H9AGb8ZnseE8m4lFAFRMXEIwjsY,5616
|
|
117
133
|
oscura/automotive/dbc/parser.py,sha256=mOUOJEF82cb7pqMvjedowB8AggCnxoR252vpSy5kC2Q,4591
|
|
118
134
|
oscura/automotive/dtc/__init__.py,sha256=09CgvnClJTQIvzgDOQ22CbcjGAg_zOhPlbm1-k-gl30,895
|
|
119
|
-
oscura/automotive/dtc/data.json,sha256=OrymnbjQkVMdJlIeQ6MUDIihkd9Kea-YvAizZwOZWcc,80011
|
|
120
135
|
oscura/automotive/dtc/database.py,sha256=We6Kq_lQNHCy9eGKLg-5ArMZ5KOlWK8599_J-67h3DU,9550
|
|
121
136
|
oscura/automotive/j1939/__init__.py,sha256=aiyfUq3GkJhgpxfkzsX7n_-E7B9Ls0XSnFxRI12GF28,340
|
|
122
137
|
oscura/automotive/j1939/decoder.py,sha256=qSfok5RTuwc4vR5sjnEdTOi06TwaNfIhBtZq6Vpzhik,25115
|
|
@@ -138,8 +153,8 @@ oscura/batch/aggregate.py,sha256=NBc1RmSGbSRUdpuZG_3wy-vSkGlegGRSj_6WqPqhTkM,105
|
|
|
138
153
|
oscura/batch/analyze.py,sha256=RfRJQ9w9rlutDlT9nTdqSCswi9FxAsznYbCN51Cx2-Y,4891
|
|
139
154
|
oscura/batch/logging.py,sha256=ay8BxwBfH75k5qgs68gI1LdAjPJQg31ZtBxwmWs2XIo,15502
|
|
140
155
|
oscura/batch/metrics.py,sha256=KrY9R0fKttVSW7wL3ra3A4XHVfAeUaLeoM0BtU3GEWI,17312
|
|
141
|
-
oscura/builders/__init__.py,sha256=
|
|
142
|
-
oscura/builders/signal_builder.py,sha256=
|
|
156
|
+
oscura/builders/__init__.py,sha256=7ryrfaFlT4zAh5zKr76LLQDionMFsPv57E_1OlxrkE0,1326
|
|
157
|
+
oscura/builders/signal_builder.py,sha256=nH7AK6YJZZ_KoDcqL3zsxCFwgBQNFieP1k_fChnD4EU,33099
|
|
143
158
|
oscura/cli/__init__.py,sha256=OsdCTexpFCKn-o7FPnwTEAZE52E2s-NbXwpADUOfhDM,275
|
|
144
159
|
oscura/cli/batch.py,sha256=6WkdQF5G03cwCGxfErqr-nq2llOXJqLrfk3u2agUlXY,10773
|
|
145
160
|
oscura/cli/characterize.py,sha256=yMAm4Ji_Dq4Hml3PeDftoUFq60z1BpU_6O7HJ9dUDtc,8898
|
|
@@ -185,7 +200,7 @@ oscura/core/correlation.py,sha256=3kG-scCs7Lv3uYJhvGYbnSyCsf9gQOqX9hnRTsZjAII,64
|
|
|
185
200
|
oscura/core/cross_domain.py,sha256=ZGJGieFpLEMTHEeQ8GFZnNZL0WgKLW_fn7joEptovpE,16118
|
|
186
201
|
oscura/core/debug.py,sha256=1fz5Mwx6dcMXwsGNQMhPCVduAf2ZTSGSvvwjpqIS3Cc,8160
|
|
187
202
|
oscura/core/edge_cases.py,sha256=-z95foSBKZb3V2DhGQSw1A2VaVOGRBdhMfxDooWbLhg,16367
|
|
188
|
-
oscura/core/exceptions.py,sha256=
|
|
203
|
+
oscura/core/exceptions.py,sha256=VOvd6iY4SQWz_fPx9EgwdbaIHpqydyFAou8SeZa7w48,17691
|
|
189
204
|
oscura/core/gpu_backend.py,sha256=U7DoPKHltlGNTFk6cOhpuVUC5VuglahbBRu1jZ83nDE,17700
|
|
190
205
|
oscura/core/lazy.py,sha256=XwXPznvfpgfJqRvONO2YcgLE9IxekhHLQboiLm3a2jw,26302
|
|
191
206
|
oscura/core/log_query.py,sha256=qV7NrZH3W6Xq1BEsEIc6Z4ZW8k3vi6U16Br23tSynhk,17051
|
|
@@ -225,7 +240,8 @@ oscura/exploratory/parse.py,sha256=1m3u6MAyGQOjkGESPT84YzyS-quI-73o0-bj041SzAk,1
|
|
|
225
240
|
oscura/exploratory/recovery.py,sha256=7nqk5nU6M0nViCvy3JnhgD64YgPDik1mgIyGGVCOj3g,9638
|
|
226
241
|
oscura/exploratory/sync.py,sha256=6lcLt7GmZoRj9luZkNSjTRIuG7kTnxgONdBp0YSQKns,12610
|
|
227
242
|
oscura/exploratory/unknown.py,sha256=_gByru0b0BvKfZWH0m8DgXNC0dGVW-O_vBo7Jwe6-qE,21614
|
|
228
|
-
oscura/export/__init__.py,sha256=
|
|
243
|
+
oscura/export/__init__.py,sha256=vk-N_lDoQG4DKhijOikusmgpP2B-2dIHupGhCt7k3S4,1014
|
|
244
|
+
oscura/export/wavedrom.py,sha256=jg07h8pZ7sHBh3wfW16xE4dtAbt7CDZpS1xixc20KvE,12388
|
|
229
245
|
oscura/export/wireshark/README.md,sha256=44ji8SuD7o-PCNKCGZ9Y3NIoKKnwUrwx2ZgSSuMI_2E,7395
|
|
230
246
|
oscura/export/wireshark/__init__.py,sha256=Int_19KSBJP8J78LfdibB0S6aDAfbQZJLMap6HZwWSc,1449
|
|
231
247
|
oscura/export/wireshark/generator.py,sha256=kCYtBxSyYdglriV3lcW2yfNBEYkfYV4K6oaegd3ulG0,10561
|
|
@@ -238,11 +254,12 @@ oscura/exporters/csv.py,sha256=4LLnWWnbmhjSMCq4ayBe0EIK53mp2l0OcK_FBUnnv_4,9186
|
|
|
238
254
|
oscura/exporters/exporters.py,sha256=wJAr2R62dWk6YCiJcK3QyUa9fS3Au8UhZb4nsY7CQJI,899
|
|
239
255
|
oscura/exporters/hdf5.py,sha256=6YsXtqlkkjeqlg2wh_QjUf7jQMu0J3eCvVgxjX3lW8Y,5956
|
|
240
256
|
oscura/exporters/html_export.py,sha256=kdlPCOTJzriY88i6ufDe6HMYo3fKDilgQazL3nADFQY,19446
|
|
241
|
-
oscura/exporters/json_export.py,sha256=
|
|
257
|
+
oscura/exporters/json_export.py,sha256=HhtjWrkQL-ziTlFM_AHvzBx37LUmIRz6AChkPfZgtWQ,9897
|
|
242
258
|
oscura/exporters/markdown_export.py,sha256=JdPDm9UmUcT6ikrDZvurdWGy0hXSUbjGjlMyUct8TpM,11957
|
|
243
259
|
oscura/exporters/matlab_export.py,sha256=YKAvPtFWj9-ISpN6cZu1s2wI0wNu_zKIrasZxh5ADnA,11003
|
|
244
260
|
oscura/exporters/npz_export.py,sha256=RMSZQH5M8C-ELoIVkQakcZ-ETQaOnnWJiHGEqcrtYVo,6063
|
|
245
261
|
oscura/exporters/spice_export.py,sha256=E0vkJ0AVxzzAOR4BX9afnGOfbltJQsIEWSumh1EZF9o,6515
|
|
262
|
+
oscura/exporters/vintage_logic_csv.py,sha256=CeiOkIcUe8MzPyIHQyIBrjMEDM0wAVJEBKx-Pbhr9ig,7405
|
|
246
263
|
oscura/extensibility/__init__.py,sha256=B2wrC7j-swzJkNdQwHS0lXr6FVBy3XWrwZ4dvtdt2gs,2955
|
|
247
264
|
oscura/extensibility/docs.py,sha256=BW5c-s-UvYmqkVoe7SidLw3I_FhzMhCeY--rE2pMex8,21738
|
|
248
265
|
oscura/extensibility/extensions.py,sha256=22QwZOS1D8KPKAQPnCIb9jRLwXi8fwCwqwPGcpeLTJI,38888
|
|
@@ -289,8 +306,9 @@ oscura/integrations/llm.py,sha256=sPt58GZYW6G4rkwX4956RP-FsFNDXCffyiPlBuah6Y4,58
|
|
|
289
306
|
oscura/jupyter/__init__.py,sha256=L5un2-sVNGP46rzJ7e3qrJOyXmhj2BkhLc7DGQzSLj0,726
|
|
290
307
|
oscura/jupyter/display.py,sha256=HuLg5NEIKAGEZe_3EmABaRkTzLAfdAm6VTBw9LCl030,8597
|
|
291
308
|
oscura/jupyter/magic.py,sha256=O1m9N6I5nMUKhCnNANiOdr2pouQxI9oRIcLeRNtrdTc,9953
|
|
292
|
-
oscura/loaders/__init__.py,sha256=
|
|
309
|
+
oscura/loaders/__init__.py,sha256=JKlIsEY0vKEtnXAccgQ6SJMkWYRm9ijM13SSPaqQQJg,16870
|
|
293
310
|
oscura/loaders/binary.py,sha256=Y5j0jaDggSmhFRZvGHT2Fph2dvhTWsqoYWwkOHIBug4,1875
|
|
311
|
+
oscura/loaders/chipwhisperer.py,sha256=vUsmt6Pamybivp6cqqxe70QUlNrVPdQDn-OS5wEdqxo,12049
|
|
294
312
|
oscura/loaders/configurable.py,sha256=dJKv3nFSgmWe22ZNB1kTZZyIWgiMhWTf8ZU-SNahefk,41267
|
|
295
313
|
oscura/loaders/csv.py,sha256=hjToCQkXQEMUCOSBTf3a1d4AAsntvxYbW_jiccQ9JaM,918
|
|
296
314
|
oscura/loaders/csv_loader.py,sha256=Y4MOJQ-95tZsi9hDdu9ru1vTJQyGtGxkhV7RUqGBLWg,14252
|
|
@@ -305,7 +323,7 @@ oscura/loaders/rigol.py,sha256=nwf5aNpH0bWerDgneUpLNlDQfouQ9E_PChv6vG8GLTA,9238
|
|
|
305
323
|
oscura/loaders/sigrok.py,sha256=puyj357BPiJpzNB-hcv6ofp6DZFEnOv_usdi-_zs6Co,10250
|
|
306
324
|
oscura/loaders/tdms.py,sha256=QngrFLJTpctfqcCtv2x3PJmNwfIeWgyug97N_xSdaMA,10483
|
|
307
325
|
oscura/loaders/tektronix.py,sha256=rLqTefIwGCCmkpUwflEJMuKSfGG1qX_pAFF7Kk0j6-I,24069
|
|
308
|
-
oscura/loaders/touchstone.py,sha256
|
|
326
|
+
oscura/loaders/touchstone.py,sha256=HdrpVsyHACSMD8DR86iCI5cj9vdXGXbpADNkjaQRUng,6179
|
|
309
327
|
oscura/loaders/validation.py,sha256=JA_vVYQJB4gC9KFKa2lsGV5D-_agmIjP9kE_dXpv4Wk,17835
|
|
310
328
|
oscura/loaders/vcd.py,sha256=YtRqU6AEkZjZhNnyNOfgBsxZ8rueB5pALrYIoiRYHQ8,13662
|
|
311
329
|
oscura/loaders/wav.py,sha256=UYPc1A1ZRuw5zC7XmBdEqjZpsi2QvSW1noNmXZqpy2k,7251
|
|
@@ -339,7 +357,7 @@ oscura/quality/ensemble.py,sha256=okfIQmsypHqQTmBfd_uRXLKshs7E1DbU-jFGSBMQTCc,28
|
|
|
339
357
|
oscura/quality/explainer.py,sha256=2WIaetGgS1ivwJaJbanOMWWwNTqQhrrn2zemxCCwZII,10729
|
|
340
358
|
oscura/quality/scoring.py,sha256=gsIl-2164vGS1LcSP7x29D2hfKLPxee3mmuaFPwQ9Ko,19020
|
|
341
359
|
oscura/quality/warnings.py,sha256=qdnoe9qh0WJnupqgJzgkEzAZMOgDckGJXC9fKF36Rs8,13469
|
|
342
|
-
oscura/reporting/__init__.py,sha256=
|
|
360
|
+
oscura/reporting/__init__.py,sha256=l6X2PxnE_ZwTMNHZWAtOFSmaUkxZmcWCBTxbF7586bo,6274
|
|
343
361
|
oscura/reporting/advanced.py,sha256=dcu2fjCA_a4R7lGhdUQbcAb7ioTg7lkUwDiQK4uopjM,36413
|
|
344
362
|
oscura/reporting/analyze.py,sha256=7tjXGsi3nWyX9I4Tw9nSX6BHD5E7Mu3tpuZAQi2S2hQ,14612
|
|
345
363
|
oscura/reporting/argument_preparer.py,sha256=L0FB0EGmUyP-GjTgEncvkpVbWMrbncoHTiBIOR5avUo,24095
|
|
@@ -364,6 +382,7 @@ oscura/reporting/standards.py,sha256=nC3wOZThj6IMCRpdE9HL8mwcvArRwzhkX92yHox2-qo
|
|
|
364
382
|
oscura/reporting/summary_generator.py,sha256=GOPVUCNNZPFn8aVM9YCqFG-wkCTFhRZt--kIyRkOzX4,10622
|
|
365
383
|
oscura/reporting/tables.py,sha256=VlUAwqv9sPGyj-1A93nCpP-JhYs5TunaJX2oNzHgVcw,11622
|
|
366
384
|
oscura/reporting/template_system.py,sha256=jPF5jkkjl8el8V6IGJGNZmPlNRFZd0_DBbcokOUMiTU,21135
|
|
385
|
+
oscura/reporting/vintage_logic_report.py,sha256=-RyYYEKhP1f6yyhJ41fCkaZHw-nUcSd_CWd-jFgXxDw,15111
|
|
367
386
|
oscura/reporting/content/__init__.py,sha256=MIU1IrYdFy7L7d6CY8RxkzL1_wL1qLYUfzUsKaASgJ4,874
|
|
368
387
|
oscura/reporting/content/executive.py,sha256=AQlQMPRLy2rPwPs6Y7somVeg8USIhlPGouYZlMq5rOA,4255
|
|
369
388
|
oscura/reporting/content/filtering.py,sha256=JrSPJPyGw_jsZUWlAi-ELt8b2ybh1Ui_wXWULv0R-ng,5184
|
|
@@ -382,10 +401,6 @@ oscura/reporting/templates/definition.py,sha256=KC--ESq6Ja9OA_hC3uVP3--Y_rhUEIUn
|
|
|
382
401
|
oscura/reporting/templates/index.html,sha256=V74N-0erqnu8tevVFjPT-zMXi5M-7RSvTfujW9pwQPQ,16007
|
|
383
402
|
oscura/reporting/templates/index.md,sha256=3PrVNVnI6kAdiG5l2JROH9AwarGYTG0GmAdVQKGyYPY,3533
|
|
384
403
|
oscura/schemas/__init__.py,sha256=0zVM3hatGgl3onywiWNia8ov0TJ-tFqXz_cBzuZW7nU,4317
|
|
385
|
-
oscura/schemas/bus_configuration.json,sha256=gpcDsg04760KCaLeIDuWvP6RzRUcPZuQplJbe7xpc8E,9562
|
|
386
|
-
oscura/schemas/device_mapping.json,sha256=sYOcc2zSe0rmMQN_vtg3Y5XeeDMktAO1ar8vAWl-E1M,5499
|
|
387
|
-
oscura/schemas/packet_format.json,sha256=y2KavMGeOUlmjDq7AW_85bfTk3nHlGPuistpuVDdlAk,12893
|
|
388
|
-
oscura/schemas/protocol_definition.json,sha256=VPHkgY4fAI-hUiRBtiqZvDNUGjp6_7O4xdi1z36IhCI,11256
|
|
389
404
|
oscura/search/__init__.py,sha256=eoX7yKNILdlmlFCpt-QHVuT2dUGw6m2GMYrQv5w-mhc,413
|
|
390
405
|
oscura/search/anomaly.py,sha256=JHcnB9Ba6Hk93vpYedj2Olv6_L_3xnOg8mn6UEyoE6A,9805
|
|
391
406
|
oscura/search/context.py,sha256=vJ4lWXcC3R7N0vTyTorsZa3KkFLHkd6vQpmhmMeSEIQ,4857
|
|
@@ -393,7 +408,11 @@ oscura/search/pattern.py,sha256=pqCtlFDKZwms1LrX64Halt25EQAI1VKr3X_6W4XQ_xI,5735
|
|
|
393
408
|
oscura/session/__init__.py,sha256=LAeHbROHU-OBSep1NWffhhcOxVuK30hoKnYgzBsnmn4,926
|
|
394
409
|
oscura/session/annotations.py,sha256=btHVzA6CedrqVI-c_uFVi_lo7-NByxBLTDHoXWYtY08,8713
|
|
395
410
|
oscura/session/history.py,sha256=3YAMhON7wlzNdR03HpGSYWJEuxBsrYeYq19YALc8k8M,9578
|
|
396
|
-
oscura/session/session.py,sha256=
|
|
411
|
+
oscura/session/session.py,sha256=MWx2cE_ZtyWwl5v8QR_X2MGEBn-TAaFftwKNyZktwIU,16321
|
|
412
|
+
oscura/sessions/__init__.py,sha256=BCmLuo95CfyutHrjEFdWSKRDzKKpDGVMcFi3989HiFA,2371
|
|
413
|
+
oscura/sessions/base.py,sha256=S2ka5o01w1YVBHH59EV64tmW9fXErfNuG2zu9g13-t8,10820
|
|
414
|
+
oscura/sessions/blackbox.py,sha256=CyYA6o7d9pMSR6rsbUOQYq6lBSfUUq-ivtr1QKUppdU,22176
|
|
415
|
+
oscura/sessions/generic.py,sha256=hqwhGO_DT3rS0EOKhLtcebJPu81PPLfHSLH1qVmAWj0,6642
|
|
397
416
|
oscura/streaming/__init__.py,sha256=uJKpXU6-uBW1lWqh8_8WNzUKSLhMYzxrJstsNMDLVcM,959
|
|
398
417
|
oscura/streaming/chunked.py,sha256=tWK7m_fHJVJKGq2y6I3RRfioUER2ObMUDPvJ78K73d0,19487
|
|
399
418
|
oscura/streaming/progressive.py,sha256=YRdAd4P9Zvckerm2kG5bFWZtcuUB1FlRklpS1078s9c,13089
|
|
@@ -410,7 +429,7 @@ oscura/ui/__init__.py,sha256=BT4w05Hd7Tg2dM_00cs3G4RJQnj0a56o9uf-41FV7cs,919
|
|
|
410
429
|
oscura/ui/formatters.py,sha256=34Wjz1r4FsaGrzdcjltOAyDIvWAjji1wTJaSYn1QYBo,13650
|
|
411
430
|
oscura/ui/progressive_display.py,sha256=LKGRJrSAscdoUKrBhKZzpYJlnNBX-kOTUGmJCsufFSI,10314
|
|
412
431
|
oscura/utils/__init__.py,sha256=GaasTJFnZBru-vBPiZQaoGZq65x5ys9trDaIQWuclWc,2270
|
|
413
|
-
oscura/utils/autodetect.py,sha256=
|
|
432
|
+
oscura/utils/autodetect.py,sha256=wJI2qAs-Efz2eRmy61meSJHW9SyGZFZSUe0dYWBez_8,9473
|
|
414
433
|
oscura/utils/buffer.py,sha256=H-lKT0MBe0fqMoX5UCYftFUaadhSF_Ydwrf7VL8KBy8,10327
|
|
415
434
|
oscura/utils/lazy.py,sha256=tUy9oZGGjulS4raEbuKvUcdnToCO1y3hKxisCxY1Xm0,11825
|
|
416
435
|
oscura/utils/lazy_imports.py,sha256=GA1yAu3CowOGmsTmNnh42d2afP6DtG6o-6u2iJe85G8,3990
|
|
@@ -425,7 +444,9 @@ oscura/visualization/annotations.py,sha256=01ieilFN6CmmzrMzyWF_G9IR5I7W6XKW-5hTT
|
|
|
425
444
|
oscura/visualization/axis_scaling.py,sha256=19TSQgF5s0I2GSFdLNazwjtMdACBB7fDJwUyDtFCSuc,9300
|
|
426
445
|
oscura/visualization/colors.py,sha256=nw8h4u8lSN8Oq9sqJuKOmrlC8tOcnuvF8xYtP2LvZso,12046
|
|
427
446
|
oscura/visualization/digital.py,sha256=ChKrsQu6z9ZVoMmTdxWhkNu6B7od0SEtZ1fVq_y9ts0,10096
|
|
447
|
+
oscura/visualization/digital_advanced.py,sha256=9wMpDNtpDqHy2uZaP32NM7MMQfly5v4nqK5oHXQJ33U,22836
|
|
428
448
|
oscura/visualization/eye.py,sha256=rqv34ZtVE58bZUlUrO__5Cgps-PT-HeGbjPI6CrbEcg,12848
|
|
449
|
+
oscura/visualization/figure_manager.py,sha256=dG0xsvGVBBomaZPprogGHR2TG3DdK75u72agn8gwu_Q,4495
|
|
429
450
|
oscura/visualization/histogram.py,sha256=8MYLV9i3XufDChvo27BuruTRR2pOIUN592fqNsjC9jM,7068
|
|
430
451
|
oscura/visualization/interactive.py,sha256=KRSsBngArbs5LNZgzVQlMSLJPLvmG5u-ScSj43wvKRQ,25462
|
|
431
452
|
oscura/visualization/jitter.py,sha256=Zib_cShNShvH9qZT8crZHTsMk5hmGc2a7qgO2vvwEco,20526
|
|
@@ -458,8 +479,8 @@ oscura/workflows/power.py,sha256=fpTzoIfuZi69ldtu2KAHW-Qu6jzA5jBa_9LVy6xqpTI,608
|
|
|
458
479
|
oscura/workflows/protocol.py,sha256=x3T-M81vFVrW3mouaYA8WjxyLLzZyLATVJbiqcMAVFQ,15275
|
|
459
480
|
oscura/workflows/reverse_engineering.py,sha256=K_yrqrQqQNcCoB0jRAG92e2zy8er3oiKJWSF6lU4nGk,19929
|
|
460
481
|
oscura/workflows/signal_integrity.py,sha256=p-DOC-AhzQOkG_jyyBK3EUaIBAGZhAhdmo-Ub_ifC3U,8391
|
|
461
|
-
oscura-0.
|
|
462
|
-
oscura-0.
|
|
463
|
-
oscura-0.
|
|
464
|
-
oscura-0.
|
|
465
|
-
oscura-0.
|
|
482
|
+
oscura-0.5.0.dist-info/METADATA,sha256=W_eBFGCar4hKFM9LNN_hFgSh8iN092gAbE2QmilSIgw,16212
|
|
483
|
+
oscura-0.5.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
484
|
+
oscura-0.5.0.dist-info/entry_points.txt,sha256=QLBxd-iTjBQ5HidaVSkLBwvUsqxSG1ZTJ6i-0juu960,48
|
|
485
|
+
oscura-0.5.0.dist-info/licenses/LICENSE,sha256=p1_oEK-oqWDXMFSv5mKbyYkgW-CPbCnFUvdICu490aY,1077
|
|
486
|
+
oscura-0.5.0.dist-info/RECORD,,
|