speculos 0.7.2.dev2__tar.gz → 0.7.2.dev18__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.
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/.github/workflows/continuous-integration-workflow.yml +1 -1
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/CHANGELOG.md +9 -1
- {speculos-0.7.2.dev2/speculos.egg-info → speculos-0.7.2.dev18}/PKG-INFO +6 -5
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/Pipfile +1 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/Pipfile.lock +40 -7
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/README.md +3 -3
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/user/usage.md +3 -2
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/pyproject.toml +2 -1
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/__version__.py +2 -2
- speculos-0.7.2.dev18/speculos/cxlib/flex-api-level-cx-18.elf +0 -0
- speculos-0.7.2.dev18/speculos/cxlib/nanosp-api-level-cx-18.elf +0 -0
- speculos-0.7.2.dev18/speculos/cxlib/nanox-api-level-cx-18.elf +0 -0
- speculos-0.7.2.dev18/speculos/fonts/flex-fonts-18.bin +0 -0
- speculos-0.7.2.dev18/speculos/fonts/nanosp-fonts-18.bin +0 -0
- speculos-0.7.2.dev18/speculos/fonts/nanox-fonts-18.bin +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/main.py +30 -40
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/display.py +11 -6
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/headless.py +1 -1
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/nbgl.py +1 -1
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/ocr.py +6 -2
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/rle_custom.py +2 -3
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/screen.py +1 -1
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/screen_text.py +1 -1
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/seproxyhal.py +7 -4
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/struct.py +2 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/resources/launcher +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18/speculos.egg-info}/PKG-INFO +6 -5
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos.egg-info/SOURCES.txt +6 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos.egg-info/requires.txt +1 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/bagl.c +1 -1
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/fonts_info.c +37 -22
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/nbgl.c +36 -3
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/os.c +2 -1
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/emulate_unified_sdk.c +3 -3
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/fonts.h +7 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/launcher.c +31 -5
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/sdk.h +4 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/.clang-format +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/.codespell-ignore +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/.dockerignore +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/.github/workflows/fast-checks.yml +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/.github/workflows/force-rebase.yml +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/.github/workflows/reusable_ragger_tests_latest_speculos.yml +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/.github/workflows/speculos-builder.yml +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/.gitignore +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/CMakeLists.txt +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/COPYING +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/COPYING.LESSER +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/Dockerfile +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/MANIFEST.in +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/README.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/blue#btc#1.5#00000000.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/blue#ram-page#blue-2.2.5#00000000.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/btc-test.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/btc.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/nanos#btc#1.5#00000000.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/nanos#btc#1.6#29717f9c.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/nanos#btc#1.6#6bd0a5f8.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/nanos#btc#2.0#ce796c1b.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/nanos#btc#2.1#1c8db8da.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/nanos#btc-test#1.5#00000000.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/nanos#btc-test#1.6#29717f9c.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/nanos#btc-test#1.6#6bd0a5f8.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/nanos#btc-test#2.0#ce796c1b.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/nanos#btc-test#2.1#1c8db8da.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/nanosp#btc#1.0#a86c791b.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/nanosp#btc#1.0.3#17bf7619.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/nanosp#btc-test#1.0#a86c791b.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/nanosp#btc-test#1.0.3#17bf7619.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/nanox#btc#1.2#57272a0f.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/nanox#btc#2.0.2#1c8db8da.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/apps/nanox#btc-test#2.0.2#1c8db8da.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/build.Dockerfile +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/clang-armv7m.cmake +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docker-compose.yml +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/CNAME +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/_config.yml +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/dev/ci.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/dev/getting_started.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/dev/index.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/dev/internals.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/dev/tests.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/index.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/installation/build.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/installation/index.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/installation/wsl.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/screenshot-api-nanos-btc.png +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/screenshot-btc-nanos.png +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/user/api.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/user/automation.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/user/clients.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/user/debug.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/user/docker.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/user/index.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/user/macm1.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/docs/user/semihosting.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/gcc-arm.cmake +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/lgtm.yml +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/sdk/bolos_syscalls_1.2.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/sdk/bolos_syscalls_1.5.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/sdk/bolos_syscalls_1.6.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/sdk/bolos_syscalls_2.0.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/sdk/bolos_syscalls_blue_2.2.5.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/sdk/bolos_syscalls_lnsp.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/sdk/bolos_syscalls_unified_sdk.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/setup.cfg +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/setup.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/__init__.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/__main__.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/README.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/__init__.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/apdu.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/api.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/automation.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/button.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/events.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/finger.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/helpers.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/resources/apdu.schema +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/resources/button.schema +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/resources/finger.schema +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/resources/ticker.schema +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/restful.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/screenshot.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/static/index.html +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/static/swagger/README.md +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/static/swagger/favicon-16x16.png +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/static/swagger/favicon-32x32.png +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/static/swagger/index.html +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/static/swagger/swagger-ui-bundle.js +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/static/swagger/swagger-ui-standalone-preset.js +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/static/swagger/swagger-ui.css +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/static/swagger/swagger.json +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/swagger.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/swagger.yaml +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/ticker.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/api/web_interface.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/client.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/nanos-cx-2.0.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/nanos-cx-2.1.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/nanosp-api-level-cx-1.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/nanosp-api-level-cx-12.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/nanosp-api-level-cx-5.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/nanosp-cx-1.0.3.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/nanosp-cx-1.0.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/nanox-api-level-cx-1.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/nanox-api-level-cx-12.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/nanox-api-level-cx-5.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/nanox-cx-2.0.2.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/nanox-cx-2.0.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/stax-api-level-cx-1.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/stax-api-level-cx-10.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/stax-api-level-cx-11.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/stax-api-level-cx-12.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/stax-api-level-cx-13.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/stax-api-level-cx-14.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/stax-api-level-cx-15.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/stax-api-level-cx-3.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/stax-api-level-cx-5.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/stax-api-level-cx-7.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/stax-api-level-cx-8.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/cxlib/stax-api-level-cx-9.elf +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/fonts/stax-fonts-1.bin +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/fonts/stax-fonts-10.bin +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/fonts/stax-fonts-11.bin +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/fonts/stax-fonts-12.bin +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/fonts/stax-fonts-13.bin +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/fonts/stax-fonts-14.bin +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/fonts/stax-fonts-15.bin +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/fonts/stax-fonts-3.bin +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/fonts/stax-fonts-5.bin +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/fonts/stax-fonts-7.bin +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/fonts/stax-fonts-8.bin +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/fonts/stax-fonts-9.bin +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/__init__.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/apdu.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/automation.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/automation_server.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/bagl.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/bagl_font.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/bagl_glyph.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/button_tcp.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/finger_tcp.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/icon.png +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/readerror.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/resources/automation.schema +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/usb.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/mcu/vnc.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/observer.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos/resources/vnc_server +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos.egg-info/dependency_links.txt +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos.egg-info/entry_points.txt +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/speculos.egg-info/top_level.txt +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/CMakeLists.txt +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/bagl.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_aes.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_aes.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_aes_sdk2.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_blake2.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_blake2b.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_bls.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_bls.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_bls_fp2.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_bls_g2.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_bn.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_common.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_crc.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_crc.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_curve25519.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_curve25519.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_ec.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_ec.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_ec_domain.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_ecpoint.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_ed25519.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_ed25519.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_hash.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_hash.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_hkdf.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_hkdf.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_hmac.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_hmac.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_math.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_math.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_montgomery.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_mpi.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_ripemd160.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_rng_rfc6979.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_rng_rfc6979.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_scc.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_sha256.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_sha3.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_sha512.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_twisted_edwards.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_utils.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_utils.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cx_weierstrass.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cxlib.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/cxlib.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/default.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/endorsement.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/endorsement.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/exception.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/nbgl.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/nbgl_rle.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/nbgl_rle.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/os_1.2.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/os_1.5.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/os_1.6.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/os_2.0.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/os_bip32.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/os_bip32.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/os_eip2333.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/seproxyhal.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/touch.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/bolos/touch.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/emulate.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/emulate.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/emulate_1.2.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/emulate_1.5.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/emulate_1.6.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/emulate_2.0.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/emulate_blue_2.2.5.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/emulate_lnsp_1.0.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/environment.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/environment.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/svc.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/svc.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/CMakeLists.txt +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursor.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursor.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/approved.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/bitcoin.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/blue.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/fabrice.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_00.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_01.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_02.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_03.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_04.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_05.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_06.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_07.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_08.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_09.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_10.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_11.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_12.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_13.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_14.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_15.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_16.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_17.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_18.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_19.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_20.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/frame_21.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/pizza.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/star.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/sword.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/cursors/verynice.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/seccomp-bpf.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/src/vnc/vnc_server.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/CMakeLists.txt +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/CMakeLists.txt +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/blake2b_kat.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/groestl_224_long_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/groestl_224_short_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/groestl_256_long_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/groestl_256_short_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/groestl_384_long_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/groestl_384_short_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/groestl_512_long_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/groestl_512_short_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/hmac.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/keccak_224_long_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/keccak_224_short_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/keccak_256_long_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/keccak_256_short_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/keccak_384_long_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/keccak_384_short_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/keccak_512_long_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/keccak_512_short_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/sha224_long_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/sha224_short_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/sha256_long_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/sha256_short_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/sha384_long_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/sha384_short_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/sha3_224_long_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/sha3_224_short_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/sha3_256_long_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/sha3_256_short_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/sha3_384_long_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/sha3_384_short_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/sha3_512_long_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/sha3_512_short_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/sha512_long_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/sha512_short_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/shake128_long_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/shake128_short_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/shake128_variable_output.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/shake256_long_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/shake256_short_msg.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/cavp/shake256_variable_output.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/hello.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/nist_cavp.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/nist_cavp.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_aes.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_bip32.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_blake2.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_bls.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_bn.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_crc16.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_ec.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_ecdh.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_ecdsa.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_ecpoint.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_eddsa.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_eip2333.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_endorsement.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_hmac.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_math.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_mpi_rng.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_os_global_pin_is_validated.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_rfc6979.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_ripemd.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_sha2.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_sha3.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/test_slip21.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/wycheproof/X25519.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/wycheproof/X448.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/wycheproof/ecdh_secp256k1.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/syscalls/wycheproof/eddsa.data +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/test_environment.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/utils.c +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/c/utils.h +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/__init__.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/api/resources/automation.json +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/api/test_api.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/apps/__init__.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/apps/resources/__init__.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/apps/resources/btc_getpubkey_blue.json +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/apps/resources/btc_getpubkey_blue.png +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/apps/resources/btc_getpubkey_nanos.json +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/apps/resources/btc_getpubkey_nanos.png +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/apps/resources/btc_getpubkey_nanosp.json +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/apps/resources/btc_getpubkey_nanosp.png +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/apps/resources/btc_getpubkey_nanox.json +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/apps/resources/btc_getpubkey_nanox.png +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/apps/test_btc.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/apps/test_btc_testnet.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/apps/test_ram_page.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/apps/test_vnc.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/conftest.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/mcu/resources/automation_invalid_action_args.json +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/mcu/resources/automation_invalid_action_name.json +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/mcu/resources/automation_invalid_rule_key.json +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/mcu/resources/automation_valid.json +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/mcu/test_automation.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/pytest.ini +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/unit/__init__.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/unit/test_client_Api.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tests/python/unit/test_client_SpeculosClient.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tools/clang-format.sh +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tools/cursor.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tools/debug.sh +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tools/gdbinit +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tools/gif-recorder.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tools/ledger-live-http-proxy.py +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tools/skins/handholding.png +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tools/skins/nano-blue.png +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tools/skins/unicorn.png +0 -0
- {speculos-0.7.2.dev2 → speculos-0.7.2.dev18}/tools/winamp.py +0 -0
|
@@ -5,7 +5,15 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
-
## [0.
|
|
8
|
+
## [0.8.0] - 2024-04-03
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- NBGL support for non-Stax devices
|
|
13
|
+
- Add Flex support
|
|
14
|
+
- Add support of API_LEVEL_18 for NanoX, NanoS+ and Flex
|
|
15
|
+
|
|
16
|
+
## [0.7.1] - 2024-02-26
|
|
9
17
|
|
|
10
18
|
### Fixed
|
|
11
19
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: speculos
|
|
3
|
-
Version: 0.7.2.
|
|
4
|
-
Summary: Ledger Blue, Stax and Nano S/S+/X application emulator
|
|
3
|
+
Version: 0.7.2.dev18
|
|
4
|
+
Summary: Ledger Blue, Stax, Flex and Nano S/S+/X application emulator
|
|
5
5
|
Author-email: Ledger <hello@ledger.fr>
|
|
6
6
|
Project-URL: Homepage, https://github.com/LedgerHQ/speculos
|
|
7
7
|
Project-URL: Bug Tracker, https://github.com/LedgerHQ/speculos/issues
|
|
@@ -26,6 +26,7 @@ Requires-Dist: pillow<11.0.0,>=8.0.0
|
|
|
26
26
|
Requires-Dist: pyelftools<1.0,>=0.27
|
|
27
27
|
Requires-Dist: pyqt5<6.0.0,>=5.15.2
|
|
28
28
|
Requires-Dist: requests<3.0.0,>=2.25.1
|
|
29
|
+
Requires-Dist: ledgered>=0.6.2
|
|
29
30
|
Provides-Extra: dev
|
|
30
31
|
Requires-Dist: pytest; extra == "dev"
|
|
31
32
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
@@ -37,7 +38,7 @@ Requires-Dist: pytest-cov; extra == "dev"
|
|
|
37
38
|
|
|
38
39
|

|
|
39
40
|
|
|
40
|
-
The goal of this project is to emulate Ledger Nano S/S+, Nano X, Blue and Stax apps on
|
|
41
|
+
The goal of this project is to emulate Ledger Nano S/S+, Nano X, Blue, Flex and Stax apps on
|
|
41
42
|
standard desktop computers, without any hardware device. More information can
|
|
42
43
|
be found here in the
|
|
43
44
|
[documentation website](https://ledgerhq.github.io/speculos) (or in the
|
|
@@ -99,7 +100,7 @@ PRINTF("display_value: %d\n", display_value);
|
|
|
99
100
|
|
|
100
101
|
### Watchdog
|
|
101
102
|
|
|
102
|
-
NanoX and Stax devices use an internal watchdog enforcing usage of regular
|
|
103
|
+
NanoX, Flex and Stax devices use an internal watchdog enforcing usage of regular
|
|
103
104
|
calls to `io_seproxyhal_io_heartbeat();`. This watchdog is not emulated on
|
|
104
105
|
Speculos.
|
|
105
106
|
|
|
@@ -121,5 +122,5 @@ Speculos is not part of Ledger bug bounty program.
|
|
|
121
122
|
## Are you developing a Nano App as an external developer?
|
|
122
123
|
|
|
123
124
|
For a smooth and quick integration:
|
|
124
|
-
- Follow the developers documentation on the [Developer Portal](https://developers.ledger.com/docs/nano-app/introduction/) and
|
|
125
|
+
- Follow the developers documentation on the [Developer Portal](https://developers.ledger.com/docs/nano-app/introduction/) and
|
|
125
126
|
- [Go on Discord](https://developers.ledger.com/discord-pro/) to chat with developer support and the developer community.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_meta": {
|
|
3
3
|
"hash": {
|
|
4
|
-
"sha256": "
|
|
4
|
+
"sha256": "e18891c836ceeb31bd4015caa411c87e9802c861ea17f110c1737a566a67eb91"
|
|
5
5
|
},
|
|
6
6
|
"pipfile-spec": 6,
|
|
7
7
|
"requires": {
|
|
@@ -185,6 +185,14 @@
|
|
|
185
185
|
"markers": "python_version >= '3.5'",
|
|
186
186
|
"version": "==3.6"
|
|
187
187
|
},
|
|
188
|
+
"importlib-metadata": {
|
|
189
|
+
"hashes": [
|
|
190
|
+
"sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570",
|
|
191
|
+
"sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"
|
|
192
|
+
],
|
|
193
|
+
"markers": "python_version < '3.10'",
|
|
194
|
+
"version": "==7.1.0"
|
|
195
|
+
},
|
|
188
196
|
"itsdangerous": {
|
|
189
197
|
"hashes": [
|
|
190
198
|
"sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44",
|
|
@@ -210,6 +218,15 @@
|
|
|
210
218
|
"markers": "python_version >= '3.7'",
|
|
211
219
|
"version": "==4.17.3"
|
|
212
220
|
},
|
|
221
|
+
"ledgered": {
|
|
222
|
+
"hashes": [
|
|
223
|
+
"sha256:0c83cd3f844b9a322a3fbb656a04e706b61d37e65e0986387435a4a66b5765bd",
|
|
224
|
+
"sha256:f57d75bdc964a2fd53ce808ea4cd8192efc9d7712b5f5f4321bde18f3d46b111"
|
|
225
|
+
],
|
|
226
|
+
"index": "pypi",
|
|
227
|
+
"markers": "python_version >= '3.7'",
|
|
228
|
+
"version": "==0.6.3"
|
|
229
|
+
},
|
|
213
230
|
"markupsafe": {
|
|
214
231
|
"hashes": [
|
|
215
232
|
"sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf",
|
|
@@ -362,11 +379,11 @@
|
|
|
362
379
|
},
|
|
363
380
|
"pyelftools": {
|
|
364
381
|
"hashes": [
|
|
365
|
-
"sha256:
|
|
366
|
-
"sha256:
|
|
382
|
+
"sha256:c774416b10310156879443b81187d182d8d9ee499660380e645918b50bc88f99",
|
|
383
|
+
"sha256:f52de7b3c7e8c64c8abc04a79a1cf37ac5fb0b8a49809827130b858944840607"
|
|
367
384
|
],
|
|
368
385
|
"index": "pypi",
|
|
369
|
-
"version": "==0.
|
|
386
|
+
"version": "==0.31"
|
|
370
387
|
},
|
|
371
388
|
"pyqt5": {
|
|
372
389
|
"hashes": [
|
|
@@ -479,13 +496,21 @@
|
|
|
479
496
|
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
|
480
497
|
"version": "==1.16.0"
|
|
481
498
|
},
|
|
499
|
+
"toml": {
|
|
500
|
+
"hashes": [
|
|
501
|
+
"sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b",
|
|
502
|
+
"sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"
|
|
503
|
+
],
|
|
504
|
+
"markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
|
505
|
+
"version": "==0.10.2"
|
|
506
|
+
},
|
|
482
507
|
"urllib3": {
|
|
483
508
|
"hashes": [
|
|
484
|
-
"sha256:
|
|
485
|
-
"sha256:
|
|
509
|
+
"sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d",
|
|
510
|
+
"sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"
|
|
486
511
|
],
|
|
487
512
|
"markers": "python_version >= '3.8'",
|
|
488
|
-
"version": "==2.2.
|
|
513
|
+
"version": "==2.2.1"
|
|
489
514
|
},
|
|
490
515
|
"werkzeug": {
|
|
491
516
|
"hashes": [
|
|
@@ -494,6 +519,14 @@
|
|
|
494
519
|
],
|
|
495
520
|
"markers": "python_version >= '3.8'",
|
|
496
521
|
"version": "==3.0.1"
|
|
522
|
+
},
|
|
523
|
+
"zipp": {
|
|
524
|
+
"hashes": [
|
|
525
|
+
"sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b",
|
|
526
|
+
"sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"
|
|
527
|
+
],
|
|
528
|
+
"markers": "python_version >= '3.8'",
|
|
529
|
+
"version": "==3.18.1"
|
|
497
530
|
}
|
|
498
531
|
},
|
|
499
532
|
"develop": {}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|

|
|
7
7
|
|
|
8
|
-
The goal of this project is to emulate Ledger Nano S/S+, Nano X, Blue and Stax apps on
|
|
8
|
+
The goal of this project is to emulate Ledger Nano S/S+, Nano X, Blue, Flex and Stax apps on
|
|
9
9
|
standard desktop computers, without any hardware device. More information can
|
|
10
10
|
be found here in the
|
|
11
11
|
[documentation website](https://ledgerhq.github.io/speculos) (or in the
|
|
@@ -67,7 +67,7 @@ PRINTF("display_value: %d\n", display_value);
|
|
|
67
67
|
|
|
68
68
|
### Watchdog
|
|
69
69
|
|
|
70
|
-
NanoX and Stax devices use an internal watchdog enforcing usage of regular
|
|
70
|
+
NanoX, Flex and Stax devices use an internal watchdog enforcing usage of regular
|
|
71
71
|
calls to `io_seproxyhal_io_heartbeat();`. This watchdog is not emulated on
|
|
72
72
|
Speculos.
|
|
73
73
|
|
|
@@ -89,5 +89,5 @@ Speculos is not part of Ledger bug bounty program.
|
|
|
89
89
|
## Are you developing a Nano App as an external developer?
|
|
90
90
|
|
|
91
91
|
For a smooth and quick integration:
|
|
92
|
-
- Follow the developers documentation on the [Developer Portal](https://developers.ledger.com/docs/nano-app/introduction/) and
|
|
92
|
+
- Follow the developers documentation on the [Developer Portal](https://developers.ledger.com/docs/nano-app/introduction/) and
|
|
93
93
|
- [Go on Discord](https://developers.ledger.com/discord-pro/) to chat with developer support and the developer community.
|
|
@@ -12,13 +12,14 @@ After having [installed the requirements and built](../installation/build.md) sp
|
|
|
12
12
|
|
|
13
13
|
The docker image can also be used directly, as detailed in the specific [docker documentation page](docker.md).
|
|
14
14
|
|
|
15
|
-
With applications built by recent SDKs, Speculos can automatically detect the targeted device. Otherwise, the Nano S is the default; the Nano X, Nano S+, Stax and Blue can be specified on the command line:
|
|
15
|
+
With applications built by recent SDKs, Speculos can automatically detect the targeted device. Otherwise, the Nano S is the default; the Nano X, Nano S+, Flex, Stax and Blue can be specified on the command line:
|
|
16
16
|
|
|
17
17
|
```shell
|
|
18
18
|
./speculos.py --model nanox apps/nanox#btc#2.0.2#1c8db8da.elf
|
|
19
19
|
./speculos.py --model nanosp apps/nanosp#btc#1.0.3#17bf7619.elf
|
|
20
20
|
./speculos.py --model blue --sdk 1.5 apps/blue#btc#1.5#00000000.elf
|
|
21
21
|
./speculos.py --model stax apps/btc.elf.elf
|
|
22
|
+
./speculos.py --model flex apps/btc.elf.elf
|
|
22
23
|
```
|
|
23
24
|
|
|
24
25
|
The last SDK version is automatically selected. However, a specific version
|
|
@@ -93,4 +94,4 @@ Launch the Bitcoin Testnet app, which requires the Bitcoin app:
|
|
|
93
94
|
|
|
94
95
|
## OCR
|
|
95
96
|
|
|
96
|
-
OCR is available for NanoX, Nanos S
|
|
97
|
+
OCR is available for NanoX, Nanos S+, Flex and Stax with built in character recognition.
|
|
@@ -10,7 +10,7 @@ build-backend = "setuptools.build_meta"
|
|
|
10
10
|
[project]
|
|
11
11
|
name = "speculos"
|
|
12
12
|
authors = [{name = "Ledger", email = "hello@ledger.fr"}]
|
|
13
|
-
description = "Ledger Blue, Stax and Nano S/S+/X application emulator"
|
|
13
|
+
description = "Ledger Blue, Stax, Flex and Nano S/S+/X application emulator"
|
|
14
14
|
classifiers = [
|
|
15
15
|
"Programming Language :: Python :: 3",
|
|
16
16
|
"Programming Language :: Python :: 3.8",
|
|
@@ -32,6 +32,7 @@ dependencies = [
|
|
|
32
32
|
"pyelftools>=0.27,<1.0",
|
|
33
33
|
"pyqt5>=5.15.2,<6.0.0",
|
|
34
34
|
"requests>=2.25.1,<3.0.0",
|
|
35
|
+
"ledgered>=0.6.2",
|
|
35
36
|
]
|
|
36
37
|
dynamic = ["version"]
|
|
37
38
|
|
|
@@ -12,5 +12,5 @@ __version__: str
|
|
|
12
12
|
__version_tuple__: VERSION_TUPLE
|
|
13
13
|
version_tuple: VERSION_TUPLE
|
|
14
14
|
|
|
15
|
-
__version__ = version = '0.7.2.
|
|
16
|
-
__version_tuple__ = version_tuple = (0, 7, 2, '
|
|
15
|
+
__version__ = version = '0.7.2.dev18'
|
|
16
|
+
__version_tuple__ = version_tuple = (0, 7, 2, 'dev18')
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -16,6 +16,7 @@ import sys
|
|
|
16
16
|
import threading
|
|
17
17
|
import pkg_resources
|
|
18
18
|
from elftools.elf.elffile import ELFFile
|
|
19
|
+
from ledgered.binary import LedgerBinaryApp
|
|
19
20
|
from mnemonic import mnemonic
|
|
20
21
|
from typing import Optional, Type
|
|
21
22
|
|
|
@@ -48,28 +49,6 @@ def set_pdeath(sig):
|
|
|
48
49
|
libc.prctl(PR_SET_PDEATHSIG, sig)
|
|
49
50
|
|
|
50
51
|
|
|
51
|
-
ELF_METADATA_SECTIONS = [
|
|
52
|
-
"target",
|
|
53
|
-
"app_name",
|
|
54
|
-
"app_version",
|
|
55
|
-
"api_level"
|
|
56
|
-
]
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
def get_elf_ledger_metadata(app_path):
|
|
60
|
-
with open(app_path, 'rb') as fp:
|
|
61
|
-
elf = ELFFile(fp)
|
|
62
|
-
metadata = {}
|
|
63
|
-
for section_name in ELF_METADATA_SECTIONS:
|
|
64
|
-
section = elf.get_section_by_name(f"ledger.{section_name}")
|
|
65
|
-
if section:
|
|
66
|
-
metadata[section_name] = section.data().decode("utf-8").strip()
|
|
67
|
-
if section_name == "target":
|
|
68
|
-
if metadata[section_name] == "nanos2":
|
|
69
|
-
metadata[section_name] = "nanosp"
|
|
70
|
-
return metadata
|
|
71
|
-
|
|
72
|
-
|
|
73
52
|
def get_elf_infos(app_path):
|
|
74
53
|
with open(app_path, 'rb') as fp:
|
|
75
54
|
elf = ELFFile(fp)
|
|
@@ -106,8 +85,9 @@ def get_elf_infos(app_path):
|
|
|
106
85
|
svc_cx_call_symbol = symtab.get_symbol_by_name("SVC_cx_call")
|
|
107
86
|
if svc_cx_call_symbol is not None:
|
|
108
87
|
svc_cx_call_addr = svc_cx_call_symbol[0]['st_value'] & (~1)
|
|
109
|
-
# Check where are located fonts in .elf file (LNX/LNS+ only)
|
|
110
|
-
# (
|
|
88
|
+
# Check where are located fonts in .elf file (LNX/LNS+ with BAGL only)
|
|
89
|
+
# (on apps using NBGL, fonts are loaded from a known location: STAX_FONTS_ARRAY_ADDR,
|
|
90
|
+
# FLEX_FONTS_ARRAY_ADDR, NANOX_FONTS_ARRAY_ADDR or NANOSP_FONTS_ARRAY_ADDR)
|
|
111
91
|
fonts_addr = 0
|
|
112
92
|
fonts_size = 0
|
|
113
93
|
bagl_fonts_symbol = symtab.get_symbol_by_name('C_bagl_fonts')
|
|
@@ -139,7 +119,7 @@ def get_cx_infos(app_path):
|
|
|
139
119
|
return sh_offset, sh_size, sh_load, cx_ram_size, cx_ram_load
|
|
140
120
|
|
|
141
121
|
|
|
142
|
-
def run_qemu(s1: socket.socket, s2: socket.socket, args: argparse.Namespace) -> int:
|
|
122
|
+
def run_qemu(s1: socket.socket, s2: socket.socket, args: argparse.Namespace, use_bagl: bool) -> int:
|
|
143
123
|
argv = ['qemu-arm-static']
|
|
144
124
|
|
|
145
125
|
if args.debug:
|
|
@@ -170,7 +150,8 @@ def run_qemu(s1: socket.socket, s2: socket.socket, args: argparse.Namespace) ->
|
|
|
170
150
|
else:
|
|
171
151
|
logger.warn(f"Cx lib {cxlib_filepath} not found")
|
|
172
152
|
|
|
173
|
-
|
|
153
|
+
# for NBGL apps, fonts binary file is mandatory
|
|
154
|
+
if not use_bagl:
|
|
174
155
|
fonts_filepath = f"/fonts/{args.model}-fonts-{args.apiLevel}.bin"
|
|
175
156
|
fonts = pkg_resources.resource_filename(__name__, fonts_filepath)
|
|
176
157
|
if os.path.exists(fonts):
|
|
@@ -185,6 +166,7 @@ def run_qemu(s1: socket.socket, s2: socket.socket, args: argparse.Namespace) ->
|
|
|
185
166
|
load_offset, load_size, stack, stack_size, ram_addr, ram_size, \
|
|
186
167
|
text_load_addr, svc_call_address, svc_cx_call_address, \
|
|
187
168
|
fonts_addr, fonts_size = get_elf_infos(lib_path)
|
|
169
|
+
|
|
188
170
|
# Since binaries loaded as libs could also declare extra RAM page(s), collect them all
|
|
189
171
|
if (ram_addr, ram_size) != (0, 0):
|
|
190
172
|
arg = f'{ram_addr:#x}:{ram_size:#x}'
|
|
@@ -317,18 +299,25 @@ def main(prog=None) -> int:
|
|
|
317
299
|
|
|
318
300
|
# Init model and api_level if not specified from app elf metadata
|
|
319
301
|
app_path = getattr(args, 'app.elf')
|
|
320
|
-
|
|
302
|
+
binary = LedgerBinaryApp(app_path)
|
|
321
303
|
if not args.model:
|
|
322
|
-
if
|
|
304
|
+
if binary.sections.target is None:
|
|
323
305
|
logger.error("Device model not detected from elf. Then it must be specified")
|
|
324
306
|
sys.exit(1)
|
|
325
307
|
else:
|
|
326
|
-
args.model =
|
|
308
|
+
args.model = "nanosp" if binary.sections.target == "nanos2" else binary.sections.target
|
|
327
309
|
logger.warn(f"Device model detected from metadata: {args.model}")
|
|
328
310
|
|
|
311
|
+
# 'bagl' is the default value of the binary.sections.sdk_graphics. We need to
|
|
312
|
+
# manage the cases where it is NOT 'bagl' but the section does not exists yet
|
|
313
|
+
if args.model in ["stax", "flex"]:
|
|
314
|
+
use_bagl = False
|
|
315
|
+
else:
|
|
316
|
+
use_bagl = binary.sections.sdk_graphics == "bagl"
|
|
317
|
+
|
|
329
318
|
if not args.apiLevel:
|
|
330
|
-
if
|
|
331
|
-
args.apiLevel =
|
|
319
|
+
if binary.sections.api_level is not None:
|
|
320
|
+
args.apiLevel = binary.sections.api_level
|
|
332
321
|
logger.warn(f"Api level detected from metadata: {args.apiLevel}")
|
|
333
322
|
|
|
334
323
|
# Check args.apiLevel, 0 is an invalid value
|
|
@@ -338,8 +327,8 @@ def main(prog=None) -> int:
|
|
|
338
327
|
|
|
339
328
|
# Set SPECULOS_DETECTED_APPNAME env variable for proper emulation.
|
|
340
329
|
# See sys_os_registry_get_current_app_tag() for corresponding usage.
|
|
341
|
-
app_name =
|
|
342
|
-
app_version =
|
|
330
|
+
app_name = binary.sections.app_name
|
|
331
|
+
app_version = binary.sections.app_version
|
|
343
332
|
if app_name and app_version:
|
|
344
333
|
os.environ["SPECULOS_DETECTED_APPNAME"] = f"{app_name}:{app_version}"
|
|
345
334
|
|
|
@@ -352,8 +341,7 @@ def main(prog=None) -> int:
|
|
|
352
341
|
lib_name = None
|
|
353
342
|
lib_path = lib_arg
|
|
354
343
|
|
|
355
|
-
|
|
356
|
-
elf_lib_name = metadata.get("app_name", None)
|
|
344
|
+
elf_lib_name = LedgerBinaryApp(lib_path).sections.app_name
|
|
357
345
|
|
|
358
346
|
if lib_name is None:
|
|
359
347
|
if elf_lib_name is None:
|
|
@@ -372,14 +360,14 @@ def main(prog=None) -> int:
|
|
|
372
360
|
|
|
373
361
|
# Check model and api_level against all lib elf metadata
|
|
374
362
|
for path in [app_path] + [x.split(":")[1] for x in args.library]:
|
|
375
|
-
|
|
363
|
+
binary = LedgerBinaryApp(path)
|
|
376
364
|
|
|
377
|
-
elf_model =
|
|
365
|
+
elf_model = ("nanosp" if binary.sections.target == "nanos2" else binary.sections.target) or args.model
|
|
378
366
|
if args.model != elf_model:
|
|
379
367
|
logger.error(f"Invalid model in {path} ({elf_model} vs {args.model})")
|
|
380
368
|
sys.exit(1)
|
|
381
369
|
|
|
382
|
-
elf_api_level =
|
|
370
|
+
elf_api_level = binary.sections.api_level or "0"
|
|
383
371
|
# Check args.apiLevel against elf api level. If elf api level == 0 (SDK master
|
|
384
372
|
# reserved value) ignore it.
|
|
385
373
|
if elf_api_level != "0" and args.apiLevel != elf_api_level:
|
|
@@ -473,13 +461,14 @@ def main(prog=None) -> int:
|
|
|
473
461
|
|
|
474
462
|
s1, s2 = socket.socketpair()
|
|
475
463
|
|
|
476
|
-
qemu_pid = run_qemu(s1, s2, args)
|
|
464
|
+
qemu_pid = run_qemu(s1, s2, args, use_bagl)
|
|
477
465
|
s1.close()
|
|
478
466
|
|
|
479
467
|
apdu = apdu_server.ApduServer(host="0.0.0.0", port=args.apdu_port)
|
|
480
468
|
seph = seproxyhal.SeProxyHal(
|
|
481
469
|
s2,
|
|
482
470
|
model=args.model,
|
|
471
|
+
use_bagl=use_bagl,
|
|
483
472
|
automation=automation_path,
|
|
484
473
|
automation_server=automation_server,
|
|
485
474
|
transport=args.usb)
|
|
@@ -507,6 +496,7 @@ def main(prog=None) -> int:
|
|
|
507
496
|
"nanosp": 2,
|
|
508
497
|
"blue": 1,
|
|
509
498
|
"stax": 1,
|
|
499
|
+
"flex": 1
|
|
510
500
|
}
|
|
511
501
|
zoom = default_zoom.get(args.model)
|
|
512
502
|
|
|
@@ -519,7 +509,7 @@ def main(prog=None) -> int:
|
|
|
519
509
|
apirun = ApiRunner(args.api_port)
|
|
520
510
|
|
|
521
511
|
display_args = DisplayArgs(args.color, args.model, args.ontop, rendering,
|
|
522
|
-
args.keymap, zoom, x, y)
|
|
512
|
+
args.keymap, zoom, x, y, use_bagl)
|
|
523
513
|
server_args = ServerArgs(apdu, apirun, button, finger, seph, vnc)
|
|
524
514
|
screen_notifier = ScreenNotifier(display_args, server_args)
|
|
525
515
|
|
|
@@ -74,6 +74,7 @@ class FrameBuffer:
|
|
|
74
74
|
"nanox": 0xdddddd,
|
|
75
75
|
"nanosp": 0xdddddd,
|
|
76
76
|
"stax": 0xdddddd,
|
|
77
|
+
"flex": 0xdddddd,
|
|
77
78
|
}
|
|
78
79
|
|
|
79
80
|
def __init__(self, model: str):
|
|
@@ -92,7 +93,7 @@ class FrameBuffer:
|
|
|
92
93
|
def check_color(self, color: int) -> int:
|
|
93
94
|
# There are only 2 colors on the Nano S and the Nano X but the one
|
|
94
95
|
# passed in argument isn't always valid. Fix it here.
|
|
95
|
-
if self.model != 'stax':
|
|
96
|
+
if self.model != 'stax' and self.model != 'flex':
|
|
96
97
|
if color != 0x000000:
|
|
97
98
|
color = FrameBuffer.COLORS.get(self.model, color)
|
|
98
99
|
return color
|
|
@@ -141,13 +142,13 @@ class FrameBuffer:
|
|
|
141
142
|
self.screenshot_pixels.update(self.pixels)
|
|
142
143
|
|
|
143
144
|
def update_public_screenshot(self) -> None:
|
|
144
|
-
# Stax only
|
|
145
|
+
# Stax/Flex only
|
|
145
146
|
# As we lazyly evaluate the published screenshot, we only flag the evaluation update as necessary
|
|
146
147
|
self.recreate_public_screenshot = True
|
|
147
148
|
|
|
148
149
|
@property
|
|
149
150
|
def public_screenshot_value(self) -> bytes:
|
|
150
|
-
# Stax only
|
|
151
|
+
# Stax/Flex only
|
|
151
152
|
# Lazy calculation of the published screenshot, as it is a costly operation
|
|
152
153
|
# and not necessary if no one tries to read the value
|
|
153
154
|
if self.recreate_public_screenshot:
|
|
@@ -157,9 +158,9 @@ class FrameBuffer:
|
|
|
157
158
|
return self._public_screenshot_value
|
|
158
159
|
|
|
159
160
|
def get_public_screenshot(self) -> bytes:
|
|
160
|
-
if self.model == "stax":
|
|
161
|
-
# On Stax, we only make the screenshot public on the RESTFUL api when it is consistent with events
|
|
162
|
-
# On top of this, take_screenshot is time consuming on stax, so we'll do as few as possible
|
|
161
|
+
if self.model == "stax" or self.model == "flex":
|
|
162
|
+
# On Stax/Flex, we only make the screenshot public on the RESTFUL api when it is consistent with events
|
|
163
|
+
# On top of this, take_screenshot is time consuming on stax/flex, so we'll do as few as possible
|
|
163
164
|
# We return the value calculated last time update_public_screenshot was called
|
|
164
165
|
return self.public_screenshot_value
|
|
165
166
|
# On nano we have no knowledge of screen refreshes so we can't be scarce on publishes
|
|
@@ -243,6 +244,10 @@ class Display(ABC):
|
|
|
243
244
|
def rendering(self):
|
|
244
245
|
return self._display_args.rendering
|
|
245
246
|
|
|
247
|
+
@property
|
|
248
|
+
def use_bagl(self) -> bool:
|
|
249
|
+
return self._display_args.use_bagl
|
|
250
|
+
|
|
246
251
|
@property
|
|
247
252
|
@abstractmethod
|
|
248
253
|
def gl(self) -> GraphicLibrary:
|
|
@@ -16,7 +16,7 @@ class Headless(Display):
|
|
|
16
16
|
|
|
17
17
|
self.m = HeadlessPaintWidget(self.model, server.vnc)
|
|
18
18
|
self._gl: GraphicLibrary
|
|
19
|
-
if display.
|
|
19
|
+
if display.use_bagl:
|
|
20
20
|
self._gl = bagl.Bagl(self.m, MODELS[self.model].screen_size, self.model)
|
|
21
21
|
else:
|
|
22
22
|
self._gl = nbgl.NBGL(self.m, MODELS[self.model].screen_size, self.model)
|
|
@@ -54,7 +54,7 @@ class NBGL(GraphicLibrary):
|
|
|
54
54
|
self.logger = logging.getLogger("NBGL")
|
|
55
55
|
|
|
56
56
|
def __assert_area(self, area) -> None:
|
|
57
|
-
if area.y0 % 4 or area.height % 4:
|
|
57
|
+
if self.model == "stax" and (area.y0 % 4 or area.height % 4):
|
|
58
58
|
raise AssertionError("X(%d) or height(%d) not 4 aligned " % (area.y0, area.height))
|
|
59
59
|
if area.x0 > self.SCREEN_WIDTH or (area.x0+area.width) > self.SCREEN_WIDTH:
|
|
60
60
|
raise AssertionError("left edge (%d) or right edge (%d) out of screen" % (area.x0, (area.x0 + area.width)))
|
|
@@ -120,14 +120,18 @@ class OCR:
|
|
|
120
120
|
# Maximum space for a letter to be considered part of the same word
|
|
121
121
|
MAX_BLANK_SPACE_NANO = 12
|
|
122
122
|
MAX_BLANK_SPACE_STAX = 24
|
|
123
|
+
MAX_BLANK_SPACE_FLEX = 26
|
|
123
124
|
|
|
124
|
-
def __init__(self, model: str):
|
|
125
|
+
def __init__(self, model: str, use_bagl: bool):
|
|
125
126
|
self.events: List[TextEvent] = []
|
|
126
127
|
# Store the model of the device
|
|
127
128
|
self.model = model
|
|
129
|
+
self.use_bagl = use_bagl
|
|
128
130
|
# Maximum space for a letter to be considered part of the same word
|
|
129
131
|
if model == "stax":
|
|
130
132
|
self.max_blank_space = OCR.MAX_BLANK_SPACE_STAX
|
|
133
|
+
elif model == "flex":
|
|
134
|
+
self.max_blank_space = OCR.MAX_BLANK_SPACE_FLEX
|
|
131
135
|
else:
|
|
132
136
|
self.max_blank_space = OCR.MAX_BLANK_SPACE_NANO
|
|
133
137
|
|
|
@@ -215,7 +219,7 @@ class OCR:
|
|
|
215
219
|
For older SKD versions, legacy behaviour is used: parsing internal
|
|
216
220
|
fonts to find a matching bitmap.
|
|
217
221
|
"""
|
|
218
|
-
if self.
|
|
222
|
+
if not self.use_bagl:
|
|
219
223
|
# Can be called via SephTag.NBGL_DRAW_IMAGE or SephTag.NBGL_DRAW_IMAGE_RLE
|
|
220
224
|
# In both cases, data contains:
|
|
221
225
|
# - area (sizeof(nbgl_area_t))
|
|
@@ -205,7 +205,7 @@ class Screen(Display):
|
|
|
205
205
|
self.app = app
|
|
206
206
|
self.app.set_screen(self)
|
|
207
207
|
model = self._display_args.model
|
|
208
|
-
if
|
|
208
|
+
if self.use_bagl:
|
|
209
209
|
self._gl = bagl.Bagl(app.widget, MODELS[model].screen_size, model)
|
|
210
210
|
else:
|
|
211
211
|
self._gl = nbgl.NBGL(app.widget, MODELS[model].screen_size, model)
|
|
@@ -105,7 +105,7 @@ class TextScreen(Display):
|
|
|
105
105
|
|
|
106
106
|
self.width, self.height = MODELS[display_args.model].screen_size
|
|
107
107
|
self.m = TextWidget(self, display_args.model)
|
|
108
|
-
if
|
|
108
|
+
if self.use_bagl:
|
|
109
109
|
self._gl = bagl.Bagl(self.m, MODELS[display_args.model].screen_size, display_args.model)
|
|
110
110
|
else:
|
|
111
111
|
raise NotImplementedError("This display can not emulate NBGL OS yet")
|
|
@@ -245,6 +245,7 @@ class SeProxyHal(IODevice):
|
|
|
245
245
|
def __init__(self,
|
|
246
246
|
sock: socket,
|
|
247
247
|
model: str,
|
|
248
|
+
use_bagl: bool,
|
|
248
249
|
automation: Optional[Automation] = None,
|
|
249
250
|
automation_server: Optional[BroadcastInterface] = None,
|
|
250
251
|
transport: str = 'hid'):
|
|
@@ -265,7 +266,9 @@ class SeProxyHal(IODevice):
|
|
|
265
266
|
|
|
266
267
|
self.usb = usb.USB(self.socket_helper.queue_packet, transport=transport)
|
|
267
268
|
|
|
268
|
-
self.ocr = OCR(model)
|
|
269
|
+
self.ocr = OCR(model, use_bagl)
|
|
270
|
+
|
|
271
|
+
self.use_bagl = use_bagl
|
|
269
272
|
|
|
270
273
|
# A list of callback methods when an APDU response is received
|
|
271
274
|
self.apdu_callbacks: List[Callable[[bytes], None]] = []
|
|
@@ -326,10 +329,10 @@ class SeProxyHal(IODevice):
|
|
|
326
329
|
screen.display.gl.update_screenshot()
|
|
327
330
|
screen.display.gl.update_public_screenshot()
|
|
328
331
|
|
|
329
|
-
if
|
|
332
|
+
if self.use_bagl and screen.display.screen_update():
|
|
330
333
|
if screen.display.model in ["nanox", "nanosp"]:
|
|
331
334
|
self.events += self.ocr.get_events()
|
|
332
|
-
elif
|
|
335
|
+
elif not self.use_bagl:
|
|
333
336
|
self.events += self.ocr.get_events()
|
|
334
337
|
|
|
335
338
|
# Apply automation rules after having received a GENERAL_STATUS_LAST_COMMAND tag. It allows the
|
|
@@ -418,7 +421,7 @@ class SeProxyHal(IODevice):
|
|
|
418
421
|
elif tag == SephTag.NBGL_REFRESH:
|
|
419
422
|
assert isinstance(screen.display.gl, NBGL)
|
|
420
423
|
screen.display.gl.refresh(data)
|
|
421
|
-
# Stax only
|
|
424
|
+
# Stax/Flex only
|
|
422
425
|
# We have refreshed the screen, remember it for the next time we have SephTag.GENERAL_STATUS
|
|
423
426
|
# then we'll perform a screen update and make public the resulting screenshot
|
|
424
427
|
self.refreshed = True
|
|
@@ -18,6 +18,7 @@ MODELS: Dict[str, Model] = {
|
|
|
18
18
|
'nanosp': Model('Nano SP', (128, 64), (5, 5), (10, 10)),
|
|
19
19
|
'blue': Model('Blue', (320, 480), (13, 13), (26, 26)),
|
|
20
20
|
'stax': Model('Stax', (400, 672), (13, 13), (26, 26)),
|
|
21
|
+
'flex': Model('Flex', (480, 600), (13, 13), (26, 26)),
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
|
|
@@ -31,6 +32,7 @@ class DisplayArgs:
|
|
|
31
32
|
pixel_size: int
|
|
32
33
|
x: Optional[int]
|
|
33
34
|
y: Optional[int]
|
|
35
|
+
use_bagl: bool
|
|
34
36
|
|
|
35
37
|
|
|
36
38
|
class ServerArgs(NamedTuple):
|
|
Binary file
|