ledgered 0.4.2.dev8__py3-none-any.whl → 0.5.1.dev3__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.
ledgered/__version__.py CHANGED
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.4.2.dev8'
16
- __version_tuple__ = version_tuple = (0, 4, 2, 'dev8')
15
+ __version__ = version = '0.5.1.dev3'
16
+ __version_tuple__ = version_tuple = (0, 5, 1, 'dev3')
ledgered/binary.py ADDED
@@ -0,0 +1,78 @@
1
+ import logging
2
+ from argparse import ArgumentParser
3
+ from dataclasses import asdict, dataclass
4
+ from elftools.elf.elffile import ELFFile
5
+ from pathlib import Path
6
+ from typing import Optional, Union
7
+
8
+ from ledgered.serializers import Jsonable
9
+
10
+ LEDGER_PREFIX = "ledger."
11
+ DEFAULT_GRAPHICS = "bagl"
12
+
13
+
14
+ @dataclass
15
+ class Sections(Jsonable):
16
+ api_level: Optional[str] = None
17
+ app_name: Optional[str] = None
18
+ app_version: Optional[str] = None
19
+ sdk_graphics: str = DEFAULT_GRAPHICS
20
+ sdk_hash: Optional[str] = None
21
+ sdk_name: Optional[str] = None
22
+ sdk_version: Optional[str] = None
23
+ target: Optional[str] = None
24
+ target_id: Optional[str] = None
25
+ target_name: Optional[str] = None
26
+
27
+ def __str__(self) -> str:
28
+ return "\n".join(f"{key} {value}" for key, value in sorted(asdict(self).items()))
29
+
30
+
31
+ class LedgerBinaryApp:
32
+
33
+ def __init__(self, binary_path: Union[str, Path]):
34
+ if isinstance(binary_path, str):
35
+ binary_path = Path(binary_path)
36
+ self._path = binary_path = binary_path.resolve()
37
+ logging.info("Parsing binary '%s'", self._path)
38
+ with self._path.open("rb") as filee:
39
+ sections = {
40
+ s.name.replace(LEDGER_PREFIX, ""): s.data().decode()
41
+ for s in ELFFile(filee).iter_sections() if LEDGER_PREFIX in s.name
42
+ }
43
+ self._sections = Sections(**sections)
44
+
45
+ @property
46
+ def sections(self) -> Sections:
47
+ return self._sections
48
+
49
+
50
+ def set_parser() -> ArgumentParser:
51
+ parser = ArgumentParser(prog="ledger-binary",
52
+ description="Utilitary to parse Ledger embedded application ELF file "
53
+ "and output metadatas")
54
+ parser.add_argument('-v', '--verbose', action='count', default=0)
55
+ parser.add_argument("binary", type=Path, help="The ledger embedded application ELF file")
56
+ parser.add_argument("-j",
57
+ "--json",
58
+ required=False,
59
+ action="store_true",
60
+ help="outputs as JSON rather than text")
61
+ return parser
62
+
63
+
64
+ def main() -> None:
65
+ args = set_parser().parse_args()
66
+ assert args.binary.is_file(), f"'{args.binary.resolve()}' does not appear to be a file."
67
+
68
+ # verbosity
69
+ if args.verbose == 1:
70
+ logging.root.setLevel(logging.INFO)
71
+ elif args.verbose > 1:
72
+ logging.root.setLevel(logging.DEBUG)
73
+
74
+ app = LedgerBinaryApp(args.binary)
75
+ if args.json:
76
+ print(app.sections.json)
77
+ else:
78
+ print(app.sections)
ledgered/manifest/app.py CHANGED
@@ -2,8 +2,8 @@ from dataclasses import dataclass
2
2
  from pathlib import Path
3
3
  from typing import Iterable, Union
4
4
 
5
+ from ledgered.serializers import Jsonable, JsonSet
5
6
  from .constants import EXISTING_DEVICES
6
- from .types import Jsonable, JsonSet
7
7
 
8
8
 
9
9
  @dataclass
@@ -1,3 +1,3 @@
1
- EXISTING_DEVICES = ["nanos", "nanox", "nanos+", "stax", "europa"]
1
+ EXISTING_DEVICES = ["nanos", "nanox", "nanos+", "stax", "flex"]
2
2
  MANIFEST_FILE_NAME = "ledger_app.toml"
3
3
  DEFAULT_USE_CASE = "default"
@@ -4,10 +4,10 @@ from dataclasses import dataclass
4
4
  from pathlib import Path
5
5
  from typing import Dict, IO, Optional, Union
6
6
 
7
+ from ledgered.serializers import Jsonable
7
8
  from .app import AppConfig
8
9
  from .constants import MANIFEST_FILE_NAME
9
10
  from .tests import TestsConfig
10
- from .types import Jsonable
11
11
  from .use_cases import UseCasesConfig
12
12
 
13
13
 
@@ -3,9 +3,9 @@ from pathlib import Path
3
3
  from typing import Dict, List, Optional, Union
4
4
  from urllib.parse import urlparse
5
5
 
6
+ from ledgered.serializers import Jsonable, JsonDict, JsonSet
6
7
  from .constants import DEFAULT_USE_CASE
7
8
  from .errors import MissingField
8
- from .types import Jsonable, JsonDict, JsonSet
9
9
  from .utils import getLogger
10
10
 
11
11
  APPLICATION_DIRECTORY_KEY = "application_directory"
@@ -1,8 +1,8 @@
1
1
  from dataclasses import dataclass
2
2
  from typing import Dict, Optional
3
3
 
4
+ from ledgered.serializers import Jsonable, JsonDict
4
5
  from .constants import DEFAULT_USE_CASE
5
- from .types import Jsonable, JsonDict
6
6
 
7
7
 
8
8
  @dataclass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ledgered
3
- Version: 0.4.2.dev8
3
+ Version: 0.5.1.dev3
4
4
  Summary: Python tools, utils, libraries, to be used with Ledger cryptodevices
5
5
  Author-email: Ledger <hello@ledger.fr>
6
6
  License: MIT License
@@ -38,6 +38,7 @@ Requires-Python: >=3.7
38
38
  Description-Content-Type: text/markdown
39
39
  License-File: LICENSE
40
40
  Requires-Dist: toml
41
+ Requires-Dist: pyelftools
41
42
  Provides-Extra: dev
42
43
  Requires-Dist: pytest ; extra == 'dev'
43
44
  Requires-Dist: pytest-cov ; extra == 'dev'
@@ -0,0 +1,20 @@
1
+ ledgered/__init__.py,sha256=aRY9b0H6CrS8gUFvdWHz-IPvyBm0i8i8paMzmE1BuK4,126
2
+ ledgered/__version__.py,sha256=JoP8xxeWqd1YO3n8zlxMp9AA3Rhpl8FlPYS9mFpCirA,424
3
+ ledgered/binary.py,sha256=0uhnb04lc31IZmwV2N0qY6ns33xdrLABbyqFyrW1Y7U,2532
4
+ ledgered/serializers.py,sha256=DKcz7X3hz3Qoumv9neoqK4xLh13ZBE5rOJv0KdZxZes,1624
5
+ ledgered/manifest/__init__.py,sha256=YbsDtjHJsUO0T37GQKoMSrC44sfcSq0JTSjDN6xrc64,243
6
+ ledgered/manifest/app.py,sha256=xK9vW7nABsuxPNzj1wpeZd5T9y3PVBhwSAw3LlHdtGQ,1084
7
+ ledgered/manifest/cli.py,sha256=WKk_ohJuDKDzUrY-fSoger2LsyygwsrwhbgzqQZbKQI,7890
8
+ ledgered/manifest/constants.py,sha256=GjI7Q0V8EAyQNZcD8T6nQnU5IJbRJfkKbOBXQcA29qo,132
9
+ ledgered/manifest/errors.py,sha256=VxP5p-wyN8Tp-3gg2dSAywbDD8vP7CXh_2E2vlRHMOA,41
10
+ ledgered/manifest/manifest.py,sha256=dSsxOJGimzpptVqNJPdJ6VoM7nSYKRLAxQWnMc4hCjM,1860
11
+ ledgered/manifest/tests.py,sha256=Zh-c_pZ4XzMKU7Pp7P-iltBnfrG8iRjO9drRtyJIUW8,3365
12
+ ledgered/manifest/use_cases.py,sha256=Zu5ufX29iBlFEWYAQhx3YDY_ajd0539F5pW8aULMyEw,898
13
+ ledgered/manifest/utils.py,sha256=HnqQVH6MTNGjs6JAEGVjs6IUcywio6mCNlMrp7xhUu4,509
14
+ ledgered/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ ledgered-0.5.1.dev3.dist-info/LICENSE,sha256=rcYmKw35vfzxANXv5w2DgsSVXV8LXcOnTDo6lslFYp0,1063
16
+ ledgered-0.5.1.dev3.dist-info/METADATA,sha256=Zc--49PVDzjvoZiTWZadWjtjyV1d_htmQuF1GrQe54Q,2932
17
+ ledgered-0.5.1.dev3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
18
+ ledgered-0.5.1.dev3.dist-info/entry_points.txt,sha256=absOELBtJLqnlB9NdfOQCh1RLDPVbCNgnPXX8fSUw_8,100
19
+ ledgered-0.5.1.dev3.dist-info/top_level.txt,sha256=LWTGn6fYa3YI2253y1orMdCyI1DcSMp86wOJ-rj_RQE,9
20
+ ledgered-0.5.1.dev3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.42.0)
2
+ Generator: bdist_wheel (0.43.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,2 +1,3 @@
1
1
  [console_scripts]
2
+ ledger-binary = ledgered.binary:main
2
3
  ledger-manifest = ledgered.manifest.cli:main
@@ -1,19 +0,0 @@
1
- ledgered/__init__.py,sha256=aRY9b0H6CrS8gUFvdWHz-IPvyBm0i8i8paMzmE1BuK4,126
2
- ledgered/__version__.py,sha256=ku16JZdfKXLWpZCmi0-9m86hNgJgEcr0b6gGvGEkoTI,424
3
- ledgered/manifest/__init__.py,sha256=YbsDtjHJsUO0T37GQKoMSrC44sfcSq0JTSjDN6xrc64,243
4
- ledgered/manifest/app.py,sha256=yia6FJNiJjqP9JZL20EP8n2RUBlwcTQ_oklco1bmmi0,1070
5
- ledgered/manifest/cli.py,sha256=WKk_ohJuDKDzUrY-fSoger2LsyygwsrwhbgzqQZbKQI,7890
6
- ledgered/manifest/constants.py,sha256=_MpfWULp8VLU14bPBWxvWc3VwxLVic9cNqxEOMsFHbE,134
7
- ledgered/manifest/errors.py,sha256=VxP5p-wyN8Tp-3gg2dSAywbDD8vP7CXh_2E2vlRHMOA,41
8
- ledgered/manifest/manifest.py,sha256=QL9WENUO_2SpCEjPGwxIXE9GneJYVzGqsbumVL9CrrI,1846
9
- ledgered/manifest/tests.py,sha256=PshutDM0oM2hTZhgkyBNfrVs_ccgNlvIRvZU3o2g_YE,3351
10
- ledgered/manifest/types.py,sha256=DKcz7X3hz3Qoumv9neoqK4xLh13ZBE5rOJv0KdZxZes,1624
11
- ledgered/manifest/use_cases.py,sha256=n3yt_dqka414ZwkQ4OxYPkNHoEBq6zxaBweI7gRgOpg,884
12
- ledgered/manifest/utils.py,sha256=HnqQVH6MTNGjs6JAEGVjs6IUcywio6mCNlMrp7xhUu4,509
13
- ledgered/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- ledgered-0.4.2.dev8.dist-info/LICENSE,sha256=rcYmKw35vfzxANXv5w2DgsSVXV8LXcOnTDo6lslFYp0,1063
15
- ledgered-0.4.2.dev8.dist-info/METADATA,sha256=r6MPdI5X3RcBUe7wylLy9unJPaohBvj6RBSY17TUCHs,2906
16
- ledgered-0.4.2.dev8.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
17
- ledgered-0.4.2.dev8.dist-info/entry_points.txt,sha256=ydCLKUhbrcId--15EDnxOwXfigMRkV7pyGYxqMsR5b0,63
18
- ledgered-0.4.2.dev8.dist-info/top_level.txt,sha256=LWTGn6fYa3YI2253y1orMdCyI1DcSMp86wOJ-rj_RQE,9
19
- ledgered-0.4.2.dev8.dist-info/RECORD,,
File without changes