speculos 0.16.1.dev2__tar.gz → 0.16.1.dev6__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.16.1.dev2 → speculos-0.16.1.dev6}/CHANGELOG.md +8 -0
- {speculos-0.16.1.dev2/speculos.egg-info → speculos-0.16.1.dev6}/PKG-INFO +1 -1
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/__version__.py +2 -2
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/main.py +100 -65
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/display.py +4 -3
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/headless.py +13 -13
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/ocr.py +3 -4
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/screen.py +13 -12
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/screen_text.py +1 -4
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/seproxyhal.py +28 -28
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/struct.py +0 -1
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/resources/launcher +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6/speculos.egg-info}/PKG-INFO +1 -1
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos.egg-info/SOURCES.txt +1 -0
- speculos-0.16.1.dev6/src/bolos/default.c +84 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/os.c +1 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/emulate.h +0 -9
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/launcher.c +137 -15
- speculos-0.16.1.dev6/src/launcher.h +20 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_os_global_pin_is_validated.c +30 -0
- speculos-0.16.1.dev2/src/bolos/default.c +0 -56
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/.clang-format +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/.codespell-ignore +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/.dockerignore +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/.github/workflows/continuous-integration-workflow.yml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/.github/workflows/documentation.yml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/.github/workflows/fast-checks.yml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/.github/workflows/force-rebase.yml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/.github/workflows/reusable_ragger_tests_latest_speculos.yml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/.github/workflows/speculos-builder.yml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/.gitignore +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/CMakeLists.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/COPYING +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/COPYING.LESSER +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/Dockerfile +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/MANIFEST.in +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/Pipfile +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/Pipfile.lock +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/README.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/README.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/blue#btc#1.5#00000000.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/blue#ram-page#blue-2.2.5#00000000.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/btc-test.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/btc.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/nanos#btc#1.5#00000000.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/nanos#btc#1.6#29717f9c.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/nanos#btc#1.6#6bd0a5f8.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/nanos#btc#2.0#ce796c1b.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/nanos#btc#2.1#1c8db8da.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/nanos#btc-test#1.5#00000000.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/nanos#btc-test#1.6#29717f9c.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/nanos#btc-test#1.6#6bd0a5f8.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/nanos#btc-test#2.0#ce796c1b.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/nanos#btc-test#2.1#1c8db8da.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/nanosp#btc#1.0#a86c791b.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/nanosp#btc#1.0.3#17bf7619.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/nanosp#btc-test#1.0#a86c791b.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/nanosp#btc-test#1.0.3#17bf7619.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/nanox#btc#1.2#57272a0f.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/nanox#btc#2.0.2#1c8db8da.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/apps/nanox#btc-test#2.0.2#1c8db8da.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/build.Dockerfile +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/clang-armv7m.cmake +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docker-compose.yml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/CNAME +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/Makefile +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/_static/screenshot-api-nanos-btc.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/_static/screenshot-btc-nanos.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/conf.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/dev/ci.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/dev/getting_started.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/dev/index.rst +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/dev/internals.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/dev/tests.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/index.rst +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/installation/build.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/installation/index.rst +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/installation/wsl.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/requirements.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/user/api.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/user/automation.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/user/clients.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/user/debug.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/user/docker.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/user/index.rst +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/user/macm1.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/user/semihosting.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/docs/user/usage.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/gcc-arm.cmake +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/lgtm.yml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/pyproject.toml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/sdk/bolos_syscalls_1.2.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/sdk/bolos_syscalls_1.5.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/sdk/bolos_syscalls_1.6.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/sdk/bolos_syscalls_2.0.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/sdk/bolos_syscalls_blue_2.2.5.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/sdk/bolos_syscalls_lnsp.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/sdk/bolos_syscalls_unified_sdk.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/setup.cfg +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/setup.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/__main__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/README.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/apdu.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/api.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/automation.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/button.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/events.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/finger.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/resources/apdu.schema +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/resources/button.schema +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/resources/finger.schema +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/resources/ticker.schema +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/restful.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/screenshot.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/static/index.html +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/static/swagger/README.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/static/swagger/favicon-16x16.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/static/swagger/favicon-32x32.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/static/swagger/index.html +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/static/swagger/swagger-ui-bundle.js +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/static/swagger/swagger-ui-standalone-preset.js +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/static/swagger/swagger-ui.css +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/static/swagger/swagger.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/swagger.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/swagger.yaml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/ticker.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/api/web_interface.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/client.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/flex-api-level-cx-18.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/flex-api-level-cx-19.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/flex-api-level-cx-20.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/flex-api-level-cx-21.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/flex-api-level-cx-22.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/nanos-cx-2.0.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/nanos-cx-2.1.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/nanosp-api-level-cx-1.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/nanosp-api-level-cx-12.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/nanosp-api-level-cx-18.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/nanosp-api-level-cx-22.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/nanosp-api-level-cx-5.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/nanosp-cx-1.0.3.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/nanosp-cx-1.0.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/nanox-api-level-cx-1.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/nanox-api-level-cx-12.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/nanox-api-level-cx-18.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/nanox-api-level-cx-22.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/nanox-api-level-cx-5.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/nanox-cx-2.0.2.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/nanox-cx-2.0.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/stax-api-level-cx-1.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/stax-api-level-cx-10.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/stax-api-level-cx-11.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/stax-api-level-cx-12.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/stax-api-level-cx-13.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/stax-api-level-cx-14.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/stax-api-level-cx-15.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/stax-api-level-cx-20.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/stax-api-level-cx-21.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/stax-api-level-cx-22.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/stax-api-level-cx-3.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/stax-api-level-cx-5.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/stax-api-level-cx-7.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/stax-api-level-cx-8.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/cxlib/stax-api-level-cx-9.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/flex-fonts-18.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/flex-fonts-19.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/flex-fonts-20.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/flex-fonts-21.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/flex-fonts-22.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/nanosp-fonts-18.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/nanosp-fonts-22.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/nanox-fonts-18.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/nanox-fonts-22.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/stax-fonts-1.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/stax-fonts-10.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/stax-fonts-11.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/stax-fonts-12.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/stax-fonts-13.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/stax-fonts-14.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/stax-fonts-15.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/stax-fonts-20.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/stax-fonts-21.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/stax-fonts-22.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/stax-fonts-3.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/stax-fonts-5.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/stax-fonts-7.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/stax-fonts-8.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/fonts/stax-fonts-9.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/apdu.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/automation.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/automation_server.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/bagl.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/bagl_font.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/bagl_glyph.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/button_tcp.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/finger_tcp.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/icon.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/nbgl.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/readerror.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/resources/automation.schema +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/rle_custom.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/transport/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/transport/interface.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/transport/nfc.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/transport/usb.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/mcu/vnc.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/observer.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/resources/vnc_server +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos/resources_importer.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos.egg-info/dependency_links.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos.egg-info/entry_points.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos.egg-info/requires.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/speculos.egg-info/top_level.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/CMakeLists.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/bagl.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/bagl.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_aes.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_aes.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_aes_sdk2.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_blake2.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_blake2b.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_bls.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_bls.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_bls_fp2.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_bls_g2.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_bn.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_common.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_crc.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_crc.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_curve25519.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_curve25519.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_ec.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_ec.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_ec_domain.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_ecpoint.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_ed25519.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_ed25519.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_hash.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_hash.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_hkdf.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_hkdf.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_hmac.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_hmac.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_math.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_math.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_montgomery.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_mpi.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_ripemd160.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_rng_rfc6979.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_rng_rfc6979.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_scc.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_sha256.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_sha3.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_sha512.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_twisted_edwards.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_utils.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_utils.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cx_weierstrass.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cxlib.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/cxlib.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/endorsement.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/endorsement.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/exception.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/fonts_info.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/nbgl.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/nbgl.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/nbgl_rle.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/nbgl_rle.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/os_1.2.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/os_1.5.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/os_1.6.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/os_2.0.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/os_bip32.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/os_bip32.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/os_eip2333.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/os_pki.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/os_pki.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/os_signature.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/os_signature.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/seproxyhal.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/touch.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/bolos/touch.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/emulate.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/emulate_1.2.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/emulate_1.5.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/emulate_1.6.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/emulate_2.0.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/emulate_blue_2.2.5.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/emulate_lnsp_1.0.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/emulate_unified_sdk.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/environment.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/environment.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/fonts.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/sdk.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/svc.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/svc.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/CMakeLists.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursor.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursor.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/approved.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/bitcoin.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/blue.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/fabrice.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_00.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_01.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_02.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_03.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_04.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_05.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_06.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_07.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_08.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_09.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_10.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_11.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_12.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_13.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_14.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_15.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_16.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_17.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_18.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_19.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_20.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/frame_21.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/pizza.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/star.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/sword.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/cursors/verynice.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/seccomp-bpf.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/src/vnc/vnc_server.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/CMakeLists.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/CMakeLists.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/blake2b_kat.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/groestl_224_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/groestl_224_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/groestl_256_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/groestl_256_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/groestl_384_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/groestl_384_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/groestl_512_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/groestl_512_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/hmac.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/keccak_224_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/keccak_224_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/keccak_256_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/keccak_256_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/keccak_384_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/keccak_384_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/keccak_512_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/keccak_512_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/sha224_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/sha224_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/sha256_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/sha256_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/sha384_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/sha384_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/sha3_224_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/sha3_224_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/sha3_256_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/sha3_256_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/sha3_384_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/sha3_384_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/sha3_512_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/sha3_512_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/sha512_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/sha512_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/shake128_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/shake128_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/shake128_variable_output.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/shake256_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/shake256_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/cavp/shake256_variable_output.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/hello.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/nist_cavp.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/nist_cavp.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_aes.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_bip32.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_blake2.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_bls.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_bn.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_crc16.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_ec.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_ecdh.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_ecdsa.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_ecpoint.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_eddsa.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_eip2333.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_endorsement.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_hmac.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_math.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_mpi_rng.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_rfc6979.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_ripemd.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_sha2.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_sha3.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/test_slip21.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/wycheproof/X25519.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/wycheproof/X448.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/wycheproof/ecdh_secp256k1.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/syscalls/wycheproof/eddsa.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/test_environment.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/utils.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/c/utils.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/api/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/api/resources/automation.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/api/test_api.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/apps/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/apps/resources/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/apps/resources/btc_getpubkey_blue.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/apps/resources/btc_getpubkey_blue.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/apps/resources/btc_getpubkey_nanos.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/apps/resources/btc_getpubkey_nanos.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/apps/resources/btc_getpubkey_nanosp.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/apps/resources/btc_getpubkey_nanosp.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/apps/resources/btc_getpubkey_nanox.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/apps/resources/btc_getpubkey_nanox.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/apps/test_btc.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/apps/test_btc_testnet.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/apps/test_ram_page.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/apps/test_vnc.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/conftest.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/mcu/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/mcu/resources/automation_invalid_action_args.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/mcu/resources/automation_invalid_action_name.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/mcu/resources/automation_invalid_rule_key.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/mcu/resources/automation_valid.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/mcu/test_automation.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/pytest.ini +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/test_resources_importer.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/unit/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/unit/test_client_Api.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tests/python/unit/test_client_SpeculosClient.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tools/clang-format.sh +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tools/cursor.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tools/debug.sh +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tools/gdbinit +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tools/gif-recorder.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tools/ledger-live-http-proxy.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tools/skins/handholding.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tools/skins/nano-blue.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tools/skins/unicorn.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev6}/tools/winamp.py +0 -0
|
@@ -5,6 +5,14 @@ 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.17.0] 2025-03-14
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- `--save-nvram` and `--load-nvram` parameters that allow NVRAM testing
|
|
13
|
+
- destination boundaries verification for `nvm_write()`
|
|
14
|
+
- Make BAGL-based applications able to call NBGL-based libraries, or NBGL-based applications able to call BAGL-based libraries
|
|
15
|
+
|
|
8
16
|
## [0.16.0] 2025-03-05
|
|
9
17
|
|
|
10
18
|
### Changed
|
|
@@ -17,5 +17,5 @@ __version__: str
|
|
|
17
17
|
__version_tuple__: VERSION_TUPLE
|
|
18
18
|
version_tuple: VERSION_TUPLE
|
|
19
19
|
|
|
20
|
-
__version__ = version = '0.16.1.
|
|
21
|
-
__version_tuple__ = version_tuple = (0, 16, 1, '
|
|
20
|
+
__version__ = version = '0.16.1.dev6'
|
|
21
|
+
__version_tuple__ = version_tuple = (0, 16, 1, 'dev6')
|
|
@@ -14,6 +14,7 @@ import signal
|
|
|
14
14
|
import socket
|
|
15
15
|
import sys
|
|
16
16
|
import threading
|
|
17
|
+
from dataclasses import dataclass
|
|
17
18
|
from elftools.elf.elffile import ELFFile
|
|
18
19
|
from ledgered.binary import LedgerBinaryApp
|
|
19
20
|
from mnemonic import mnemonic
|
|
@@ -34,6 +35,25 @@ from .observer import BroadcastInterface
|
|
|
34
35
|
from .resources_importer import resources
|
|
35
36
|
|
|
36
37
|
|
|
38
|
+
@dataclass
|
|
39
|
+
class ElfInfo:
|
|
40
|
+
text_offset: int = 0
|
|
41
|
+
text_size: int = 0
|
|
42
|
+
stack_addr: int = 0
|
|
43
|
+
stack_size: int = 0
|
|
44
|
+
ram_addr: int = 0
|
|
45
|
+
ram_size: int = 0
|
|
46
|
+
text_addr: int = 0
|
|
47
|
+
svc_call_addr: int = 0
|
|
48
|
+
svc_cx_call_addr: int = 0
|
|
49
|
+
fonts_addr: int = 0
|
|
50
|
+
fonts_size: int = 0
|
|
51
|
+
app_nvram_addr: int = 0
|
|
52
|
+
app_nvram_size: int = 0
|
|
53
|
+
cx_ram_addr: int = 0
|
|
54
|
+
cx_ram_size: int = 0
|
|
55
|
+
|
|
56
|
+
|
|
37
57
|
DEFAULT_SEED = ('glory promote mansion idle axis finger extra february uncover one trip resource lawn turtle enact '
|
|
38
58
|
'monster seven myth punch hobby comfort wild raise skin')
|
|
39
59
|
|
|
@@ -51,26 +71,27 @@ def set_pdeath(sig):
|
|
|
51
71
|
|
|
52
72
|
|
|
53
73
|
def get_elf_infos(app_path, use_bagl):
|
|
74
|
+
ei = ElfInfo()
|
|
54
75
|
with open(app_path, 'rb') as fp:
|
|
55
76
|
elf = ELFFile(fp)
|
|
56
|
-
|
|
77
|
+
text_section = elf.get_section_by_name('.text')
|
|
57
78
|
for seg in elf.iter_segments():
|
|
58
79
|
if seg['p_type'] != 'PT_LOAD':
|
|
59
80
|
continue
|
|
60
|
-
if seg.section_in_segment(
|
|
81
|
+
if seg.section_in_segment(text_section):
|
|
61
82
|
text_seg = seg
|
|
62
83
|
break
|
|
63
84
|
else:
|
|
64
85
|
raise RuntimeError("No program header with text section!")
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
sym_estack =
|
|
86
|
+
symtab_section = elf.get_section_by_name('.symtab')
|
|
87
|
+
bss_section = elf.get_section_by_name('.bss')
|
|
88
|
+
ei.text_offset = text_seg['p_offset']
|
|
89
|
+
ei.text_size = text_seg['p_filesz']
|
|
90
|
+
ei.text_addr = text_section['sh_addr']
|
|
91
|
+
ei.stack_addr = bss_section['sh_addr']
|
|
92
|
+
sym_estack = symtab_section.get_symbol_by_name('_estack')
|
|
72
93
|
if sym_estack is None:
|
|
73
|
-
sym_estack =
|
|
94
|
+
sym_estack = symtab_section.get_symbol_by_name('END_STACK')
|
|
74
95
|
if sym_estack is None:
|
|
75
96
|
logger.error('failed to find _estack/END_STACK symbol')
|
|
76
97
|
sys.exit(1)
|
|
@@ -78,48 +99,56 @@ def get_elf_infos(app_path, use_bagl):
|
|
|
78
99
|
|
|
79
100
|
# Look for the symbols SVC_Call and SVC_cx_call
|
|
80
101
|
# if they are found, save their addresses to patch them to replace the SYSCALL later
|
|
81
|
-
|
|
82
|
-
svc_cx_call_addr = 0
|
|
83
|
-
svc_call_symbol = symtab.get_symbol_by_name("SVC_Call")
|
|
102
|
+
svc_call_symbol = symtab_section.get_symbol_by_name("SVC_Call")
|
|
84
103
|
if svc_call_symbol is not None:
|
|
85
|
-
svc_call_addr = svc_call_symbol[0]['st_value'] & (~1)
|
|
86
|
-
svc_cx_call_symbol =
|
|
104
|
+
ei.svc_call_addr = svc_call_symbol[0]['st_value'] & (~1)
|
|
105
|
+
svc_cx_call_symbol = symtab_section.get_symbol_by_name("SVC_cx_call")
|
|
87
106
|
if svc_cx_call_symbol is not None:
|
|
88
|
-
svc_cx_call_addr = svc_cx_call_symbol[0]['st_value'] & (~1)
|
|
107
|
+
ei.svc_cx_call_addr = svc_cx_call_symbol[0]['st_value'] & (~1)
|
|
89
108
|
# Check where are located fonts in .elf file (LNX/LNS+ with BAGL only)
|
|
90
109
|
# (on apps using NBGL, fonts are loaded from a known location: STAX_FONTS_ARRAY_ADDR,
|
|
91
110
|
# FLEX_FONTS_ARRAY_ADDR, NANOX_FONTS_ARRAY_ADDR or NANOSP_FONTS_ARRAY_ADDR)
|
|
92
|
-
|
|
93
|
-
fonts_size = 0
|
|
94
|
-
bagl_fonts_symbol = symtab.get_symbol_by_name('C_bagl_fonts')
|
|
111
|
+
bagl_fonts_symbol = symtab_section.get_symbol_by_name('C_bagl_fonts')
|
|
95
112
|
if bagl_fonts_symbol is not None:
|
|
96
|
-
fonts_addr = bagl_fonts_symbol[0]['st_value']
|
|
97
|
-
fonts_size = bagl_fonts_symbol[0]['st_size']
|
|
113
|
+
ei.fonts_addr = bagl_fonts_symbol[0]['st_value']
|
|
114
|
+
ei.fonts_size = bagl_fonts_symbol[0]['st_size']
|
|
98
115
|
elif use_bagl:
|
|
99
116
|
logger.info("Disabling OCR.")
|
|
100
117
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
118
|
+
# App NVRAM handling
|
|
119
|
+
nvram_data_symbol = symtab_section.get_symbol_by_name('_nvram_data')
|
|
120
|
+
# _envram for applications built with old SDK version
|
|
121
|
+
envram_data_symbol = symtab_section.get_symbol_by_name('_envram_data') \
|
|
122
|
+
or symtab_section.get_symbol_by_name('_envram')
|
|
123
|
+
if nvram_data_symbol is not None and envram_data_symbol is not None:
|
|
124
|
+
ei.app_nvram_addr = nvram_data_symbol[0]['st_value']
|
|
125
|
+
ei.app_nvram_size = envram_data_symbol[0]['st_value'] - nvram_data_symbol[0]['st_value']
|
|
126
|
+
else:
|
|
127
|
+
logger.info("The application does not use NVRAM.")
|
|
128
|
+
|
|
129
|
+
supp_ram_section = elf.get_section_by_name('.rfbss')
|
|
130
|
+
ei.ram_addr, ei.ram_size = \
|
|
131
|
+
(supp_ram_section['sh_addr'], supp_ram_section['sh_size']) if supp_ram_section is not None else (0, 0)
|
|
132
|
+
ei.stack_size = estack - ei.stack_addr
|
|
133
|
+
return ei
|
|
106
134
|
|
|
107
135
|
|
|
108
136
|
def get_cx_infos(app_path):
|
|
137
|
+
ei = ElfInfo()
|
|
109
138
|
with open(app_path, 'rb') as fp:
|
|
110
139
|
elf = ELFFile(fp)
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
cx_ram_size =
|
|
140
|
+
text_section = elf.get_section_by_name('.text')
|
|
141
|
+
cxram_section = elf.get_section_by_name('.cxram')
|
|
142
|
+
ei.text_offset = text_section['sh_offset']
|
|
143
|
+
ei.text_size = text_section['sh_size']
|
|
144
|
+
ei.text_addr = text_section['sh_addr']
|
|
145
|
+
ei.cx_ram_addr = cxram_section["sh_addr"]
|
|
146
|
+
ei.cx_ram_size = cxram_section["sh_size"]
|
|
118
147
|
|
|
119
|
-
return
|
|
148
|
+
return ei
|
|
120
149
|
|
|
121
150
|
|
|
122
|
-
def run_qemu(s1: socket.socket, s2: socket.socket, args: argparse.Namespace
|
|
151
|
+
def run_qemu(s1: socket.socket, s2: socket.socket, args: argparse.Namespace) -> int:
|
|
123
152
|
argv = ['qemu-arm-static']
|
|
124
153
|
|
|
125
154
|
if args.debug:
|
|
@@ -147,43 +176,55 @@ def run_qemu(s1: socket.socket, s2: socket.socket, args: argparse.Namespace, use
|
|
|
147
176
|
cxlib_filepath = f"cxlib/{args.model}-cx-{args.sdk}.elf"
|
|
148
177
|
cxlib = str(resources.files(__package__) / cxlib_filepath)
|
|
149
178
|
if os.path.exists(cxlib):
|
|
150
|
-
|
|
151
|
-
cxlib_args = f'{cxlib}:{
|
|
179
|
+
ei = get_cx_infos(cxlib)
|
|
180
|
+
cxlib_args = f'{cxlib}:{ei.text_offset:#x}:{ei.text_size:#x}:{ei.text_addr:#x}'
|
|
181
|
+
cxlib_args += f':{ei.cx_ram_size:#x}:{ei.cx_ram_addr:#x}'
|
|
152
182
|
argv += ['-c', cxlib_args]
|
|
153
183
|
else:
|
|
154
184
|
logger.warning(f"Cx lib {cxlib_filepath} not found")
|
|
155
185
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
argv += ['-f', fonts]
|
|
162
|
-
else:
|
|
163
|
-
logger.error(f"Fonts {fonts_filepath} not found")
|
|
164
|
-
sys.exit(1)
|
|
186
|
+
only_bagl = True
|
|
187
|
+
# 'bagl' is the default value of the binary.sections.sdk_graphics. We need to
|
|
188
|
+
# manage the cases where it is NOT 'bagl' but the section does not exists yet
|
|
189
|
+
if args.model in ["stax", "flex"]:
|
|
190
|
+
only_bagl = False
|
|
165
191
|
|
|
166
192
|
extra_ram = ''
|
|
167
193
|
app_path = getattr(args, 'app.elf')
|
|
168
194
|
for lib in [f'main:{app_path}'] + args.library:
|
|
169
195
|
name, lib_path = lib.split(':')
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
196
|
+
binary = LedgerBinaryApp(lib_path)
|
|
197
|
+
use_bagl = binary.sections.sdk_graphics == "bagl"
|
|
198
|
+
if not use_bagl:
|
|
199
|
+
only_bagl = False
|
|
200
|
+
ei = get_elf_infos(lib_path, use_bagl)
|
|
173
201
|
|
|
174
202
|
# Since binaries loaded as libs could also declare extra RAM page(s), collect them all
|
|
175
|
-
if (ram_addr, ram_size) != (0, 0):
|
|
176
|
-
arg = f'{ram_addr:#x}:{ram_size:#x}'
|
|
203
|
+
if (ei.ram_addr, ei.ram_size) != (0, 0):
|
|
204
|
+
arg = f'{ei.ram_addr:#x}:{ei.ram_size:#x}'
|
|
177
205
|
if extra_ram and arg != extra_ram:
|
|
178
206
|
logger.error("different extra RAM pages for main app and/or libraries!")
|
|
179
207
|
sys.exit(1)
|
|
180
208
|
extra_ram = arg
|
|
181
|
-
lib_arg = f'{name}:{lib_path}:{
|
|
182
|
-
lib_arg += f':{
|
|
183
|
-
lib_arg += f':{
|
|
184
|
-
lib_arg += f':{fonts_addr:#x}:{fonts_size:#x}'
|
|
209
|
+
lib_arg = f'{name}:{lib_path}:{ei.text_offset:#x}:{ei.text_size:#x}'
|
|
210
|
+
lib_arg += f':{ei.stack_addr:#x}:{ei.stack_size:#x}:{ei.svc_call_addr:#x}'
|
|
211
|
+
lib_arg += f':{ei.svc_cx_call_addr:#x}:{ei.text_addr:#x}'
|
|
212
|
+
lib_arg += f':{ei.fonts_addr:#x}:{ei.fonts_size:#x}'
|
|
213
|
+
lib_arg += f':{ei.app_nvram_addr:#x}:{ei.app_nvram_size:#x}'
|
|
214
|
+
lib_arg += f':{1 if args.load_nvram else 0}'
|
|
215
|
+
lib_arg += f':{1 if args.save_nvram else 0}'
|
|
185
216
|
argv.append(lib_arg)
|
|
186
217
|
|
|
218
|
+
# for NBGL apps, fonts binary file is mandatory
|
|
219
|
+
if not only_bagl:
|
|
220
|
+
fonts_filepath = f"fonts/{args.model}-fonts-{args.apiLevel}.bin"
|
|
221
|
+
fonts = str(resources.files(__package__) / fonts_filepath)
|
|
222
|
+
if os.path.exists(fonts):
|
|
223
|
+
argv += ['-f', fonts]
|
|
224
|
+
else:
|
|
225
|
+
logger.error(f"Fonts {fonts_filepath} not found")
|
|
226
|
+
sys.exit(1)
|
|
227
|
+
|
|
187
228
|
if args.model == 'blue':
|
|
188
229
|
if args.rampage:
|
|
189
230
|
extra_ram = args.rampage
|
|
@@ -303,6 +344,8 @@ def main(prog=None) -> int:
|
|
|
303
344
|
"left button, 'a' right, 's' both). Default: arrow keys")
|
|
304
345
|
group.add_argument('--progressive', action='store_true', help='Enable step-by-step rendering of graphical elements')
|
|
305
346
|
group.add_argument('--zoom', help='Display pixel size.', type=int, choices=range(1, 11))
|
|
347
|
+
group.add_argument('--load-nvram', action='store_true', help='Preload app NVRAM data from file beforehand')
|
|
348
|
+
group.add_argument('--save-nvram', action='store_true', help='Save app NVRAM data to file')
|
|
306
349
|
|
|
307
350
|
if prog:
|
|
308
351
|
parser.prog = prog
|
|
@@ -324,13 +367,6 @@ def main(prog=None) -> int:
|
|
|
324
367
|
args.model = "nanosp" if binary.sections.target == "nanos2" else binary.sections.target
|
|
325
368
|
logger.warning(f"Device model detected from metadata: {args.model}")
|
|
326
369
|
|
|
327
|
-
# 'bagl' is the default value of the binary.sections.sdk_graphics. We need to
|
|
328
|
-
# manage the cases where it is NOT 'bagl' but the section does not exists yet
|
|
329
|
-
if args.model in ["stax", "flex"]:
|
|
330
|
-
use_bagl = False
|
|
331
|
-
else:
|
|
332
|
-
use_bagl = binary.sections.sdk_graphics == "bagl"
|
|
333
|
-
|
|
334
370
|
if not args.apiLevel:
|
|
335
371
|
if binary.sections.api_level is not None:
|
|
336
372
|
args.apiLevel = binary.sections.api_level
|
|
@@ -475,7 +511,7 @@ def main(prog=None) -> int:
|
|
|
475
511
|
|
|
476
512
|
s1, s2 = socket.socketpair()
|
|
477
513
|
|
|
478
|
-
qemu_pid = run_qemu(s1, s2, args
|
|
514
|
+
qemu_pid = run_qemu(s1, s2, args)
|
|
479
515
|
s1.close()
|
|
480
516
|
|
|
481
517
|
# The `--transport` argument takes precedence over `--usb`
|
|
@@ -488,7 +524,6 @@ def main(prog=None) -> int:
|
|
|
488
524
|
seph = seproxyhal.SeProxyHal(
|
|
489
525
|
s2,
|
|
490
526
|
args.model,
|
|
491
|
-
use_bagl,
|
|
492
527
|
automation_path,
|
|
493
528
|
automation_server,
|
|
494
529
|
transport_type,
|
|
@@ -530,7 +565,7 @@ def main(prog=None) -> int:
|
|
|
530
565
|
apirun = ApiRunner(args.api_port)
|
|
531
566
|
|
|
532
567
|
display_args = DisplayArgs(args.color, args.model, args.ontop, rendering,
|
|
533
|
-
args.keymap, zoom, x, y
|
|
568
|
+
args.keymap, zoom, x, y)
|
|
534
569
|
server_args = ServerArgs(apdu, apirun, button, finger, seph, vnc)
|
|
535
570
|
screen_notifier = ScreenNotifier(display_args, server_args)
|
|
536
571
|
|
|
@@ -259,12 +259,13 @@ class Display(ABC):
|
|
|
259
259
|
return self._display_args.rendering
|
|
260
260
|
|
|
261
261
|
@property
|
|
262
|
-
|
|
263
|
-
|
|
262
|
+
@abstractmethod
|
|
263
|
+
def nbgl_gl(self) -> GraphicLibrary:
|
|
264
|
+
pass
|
|
264
265
|
|
|
265
266
|
@property
|
|
266
267
|
@abstractmethod
|
|
267
|
-
def
|
|
268
|
+
def bagl_gl(self) -> GraphicLibrary:
|
|
268
269
|
pass
|
|
269
270
|
|
|
270
271
|
@abstractmethod
|
|
@@ -15,32 +15,32 @@ class Headless(Display):
|
|
|
15
15
|
super().__init__(display, server)
|
|
16
16
|
|
|
17
17
|
self.m = HeadlessPaintWidget(self.model, server.vnc)
|
|
18
|
-
self.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
self._gl = nbgl.NBGL(self.m, MODELS[self.model].screen_size, self.model)
|
|
18
|
+
self._bagl_gl: GraphicLibrary
|
|
19
|
+
self._nbgl_gl: GraphicLibrary
|
|
20
|
+
self._bagl_gl = bagl.Bagl(self.m, MODELS[self.model].screen_size, self.model)
|
|
21
|
+
self._nbgl_gl = nbgl.NBGL(self.m, MODELS[self.model].screen_size, self.model)
|
|
23
22
|
|
|
24
23
|
@property
|
|
25
|
-
def
|
|
26
|
-
return self.
|
|
24
|
+
def bagl_gl(self):
|
|
25
|
+
return self._bagl_gl
|
|
26
|
+
|
|
27
|
+
@property
|
|
28
|
+
def nbgl_gl(self):
|
|
29
|
+
return self._nbgl_gl
|
|
27
30
|
|
|
28
31
|
def display_status(self, data: bytes) -> List[TextEvent]:
|
|
29
|
-
|
|
30
|
-
ret = self.gl.display_status(data)
|
|
32
|
+
ret = self.bagl_gl.display_status(data)
|
|
31
33
|
if MODELS[self.model].name == 'blue':
|
|
32
34
|
self.screen_update() # Actually, this method doesn't work
|
|
33
35
|
return ret
|
|
34
36
|
|
|
35
37
|
def display_raw_status(self, data: bytes) -> None:
|
|
36
|
-
|
|
37
|
-
self.gl.display_raw_status(data)
|
|
38
|
+
self.bagl_gl.display_raw_status(data)
|
|
38
39
|
if MODELS[self.model].name == 'blue':
|
|
39
40
|
self.screen_update() # Actually, this method doesn't work
|
|
40
41
|
|
|
41
42
|
def screen_update(self) -> bool:
|
|
42
|
-
|
|
43
|
-
return self.gl.refresh()
|
|
43
|
+
return self.bagl_gl.refresh()
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
class HeadlessPaintWidget(FrameBuffer):
|
|
@@ -122,11 +122,10 @@ class OCR:
|
|
|
122
122
|
MAX_BLANK_SPACE_STAX = 24
|
|
123
123
|
MAX_BLANK_SPACE_FLEX = 26
|
|
124
124
|
|
|
125
|
-
def __init__(self, model: str
|
|
125
|
+
def __init__(self, model: str):
|
|
126
126
|
self.events: List[TextEvent] = []
|
|
127
127
|
# Store the model of the device
|
|
128
128
|
self.model = model
|
|
129
|
-
self.use_bagl = use_bagl
|
|
130
129
|
# Maximum space for a letter to be considered part of the same word
|
|
131
130
|
if model == "stax":
|
|
132
131
|
self.max_blank_space = OCR.MAX_BLANK_SPACE_STAX
|
|
@@ -212,14 +211,14 @@ class OCR:
|
|
|
212
211
|
# create a new TextEvent if there are no events yet or if there is a new line
|
|
213
212
|
self.events.append(TextEvent(char, x, y, w, h, False))
|
|
214
213
|
|
|
215
|
-
def analyze_bitmap(self, data: bytes) -> None:
|
|
214
|
+
def analyze_bitmap(self, data: bytes, use_bagl: bool) -> None:
|
|
216
215
|
"""
|
|
217
216
|
data contain information about the latest displayed bitmap.
|
|
218
217
|
Since unified SDK, speculos added the displayed character to data.
|
|
219
218
|
For older SKD versions, legacy behaviour is used: parsing internal
|
|
220
219
|
fonts to find a matching bitmap.
|
|
221
220
|
"""
|
|
222
|
-
if not
|
|
221
|
+
if not use_bagl:
|
|
223
222
|
# Can be called via SephTag.NBGL_DRAW_IMAGE or SephTag.NBGL_DRAW_IMAGE_RLE
|
|
224
223
|
# In both cases, data contains:
|
|
225
224
|
# - area (sizeof(nbgl_area_t))
|
|
@@ -191,24 +191,27 @@ class Screen(Display):
|
|
|
191
191
|
def __init__(self, display: DisplayArgs, server: ServerArgs) -> None:
|
|
192
192
|
super().__init__(display, server)
|
|
193
193
|
self.app: App
|
|
194
|
-
self.
|
|
194
|
+
self._bagl_gl: GraphicLibrary
|
|
195
|
+
self._nbgl_gl: GraphicLibrary
|
|
195
196
|
|
|
196
197
|
def set_app(self, app: App) -> None:
|
|
197
198
|
self.app = app
|
|
198
199
|
self.app.set_screen(self)
|
|
199
200
|
model = self._display_args.model
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
else:
|
|
203
|
-
self._gl = nbgl.NBGL(app.widget, MODELS[model].screen_size, model)
|
|
201
|
+
self._bagl_gl = bagl.Bagl(app.widget, MODELS[model].screen_size, model)
|
|
202
|
+
self._nbgl_gl = nbgl.NBGL(app.widget, MODELS[model].screen_size, model)
|
|
204
203
|
|
|
205
204
|
@property
|
|
206
205
|
def m(self) -> QWidget:
|
|
207
206
|
return self.app.widget
|
|
208
207
|
|
|
209
208
|
@property
|
|
210
|
-
def
|
|
211
|
-
return self.
|
|
209
|
+
def bagl_gl(self):
|
|
210
|
+
return self._bagl_gl
|
|
211
|
+
|
|
212
|
+
@property
|
|
213
|
+
def nbgl_gl(self):
|
|
214
|
+
return self._nbgl_gl
|
|
212
215
|
|
|
213
216
|
def _key_event(self, event: QKeyEvent, pressed) -> None:
|
|
214
217
|
key = Qt.Key(event.key())
|
|
@@ -223,20 +226,18 @@ class Screen(Display):
|
|
|
223
226
|
self.app.close()
|
|
224
227
|
|
|
225
228
|
def display_status(self, data: bytes) -> List[TextEvent]:
|
|
226
|
-
|
|
227
|
-
ret = self.gl.display_status(data)
|
|
229
|
+
ret = self.bagl_gl.display_status(data)
|
|
228
230
|
if MODELS[self.model].name == 'blue':
|
|
229
231
|
self.screen_update() # Actually, this method doesn't work
|
|
230
232
|
return ret
|
|
231
233
|
|
|
232
234
|
def display_raw_status(self, data: bytes) -> None:
|
|
233
|
-
|
|
234
|
-
self.gl.display_raw_status(data)
|
|
235
|
+
self.bagl_gl.display_raw_status(data)
|
|
235
236
|
if MODELS[self.model].name == 'blue':
|
|
236
237
|
self.screen_update() # Actually, this method doesn't work
|
|
237
238
|
|
|
238
239
|
def screen_update(self) -> bool:
|
|
239
|
-
return self.
|
|
240
|
+
return self.bagl_gl.refresh()
|
|
240
241
|
|
|
241
242
|
|
|
242
243
|
class QtScreenNotifier(DisplayNotifier):
|
|
@@ -105,10 +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
|
-
|
|
109
|
-
self._gl = bagl.Bagl(self.m, MODELS[display_args.model].screen_size, display_args.model)
|
|
110
|
-
else:
|
|
111
|
-
raise NotImplementedError("This display can not emulate NBGL OS yet")
|
|
108
|
+
self._gl = bagl.Bagl(self.m, MODELS[display_args.model].screen_size, display_args.model)
|
|
112
109
|
|
|
113
110
|
if display_args.keymap is not None:
|
|
114
111
|
self.ARROW_KEYS = list(map(ord, display_args.keymap))
|
|
@@ -253,7 +253,6 @@ class SeProxyHal(IODevice):
|
|
|
253
253
|
def __init__(self,
|
|
254
254
|
sock: socket,
|
|
255
255
|
model: str,
|
|
256
|
-
use_bagl: bool,
|
|
257
256
|
automation: Optional[Automation] = None,
|
|
258
257
|
automation_server: Optional[BroadcastInterface] = None,
|
|
259
258
|
transport: TransportType = TransportType.HID,
|
|
@@ -264,7 +263,8 @@ class SeProxyHal(IODevice):
|
|
|
264
263
|
self.automation = automation
|
|
265
264
|
self.automation_server = automation_server
|
|
266
265
|
self.events: List[TextEvent] = []
|
|
267
|
-
self.
|
|
266
|
+
self.need_nbgl_refresh = False
|
|
267
|
+
self.is_last_draw_nbgl = False
|
|
268
268
|
self.verbose = verbose
|
|
269
269
|
|
|
270
270
|
self.status_event = threading.Event()
|
|
@@ -277,9 +277,7 @@ class SeProxyHal(IODevice):
|
|
|
277
277
|
|
|
278
278
|
self.transport = build_transport(self.socket_helper.queue_packet, transport)
|
|
279
279
|
|
|
280
|
-
self.ocr = OCR(model
|
|
281
|
-
|
|
282
|
-
self.use_bagl = use_bagl
|
|
280
|
+
self.ocr = OCR(model)
|
|
283
281
|
|
|
284
282
|
# A list of callback methods when an APDU response is received
|
|
285
283
|
self.apdu_callbacks: List[Callable[[bytes], None]] = []
|
|
@@ -333,17 +331,17 @@ class SeProxyHal(IODevice):
|
|
|
333
331
|
|
|
334
332
|
if tag == SephTag.GENERAL_STATUS:
|
|
335
333
|
if int.from_bytes(data[:2], 'big') == SephTag.GENERAL_STATUS_LAST_COMMAND:
|
|
336
|
-
if self.
|
|
337
|
-
self.
|
|
334
|
+
if self.need_nbgl_refresh:
|
|
335
|
+
self.need_nbgl_refresh = False
|
|
338
336
|
|
|
339
337
|
# Update the screenshot, we'll upload its associated events shortly
|
|
340
|
-
screen.display.
|
|
341
|
-
screen.display.
|
|
338
|
+
screen.display.nbgl_gl.update_screenshot()
|
|
339
|
+
screen.display.nbgl_gl.update_public_screenshot()
|
|
342
340
|
|
|
343
|
-
if self.
|
|
341
|
+
if self.is_last_draw_nbgl is False and screen.display.screen_update():
|
|
344
342
|
if screen.display.model in ["nanox", "nanosp"]:
|
|
345
343
|
self.events += self.ocr.get_events()
|
|
346
|
-
elif
|
|
344
|
+
elif self.is_last_draw_nbgl:
|
|
347
345
|
self.events += self.ocr.get_events()
|
|
348
346
|
|
|
349
347
|
# Apply automation rules after having received a GENERAL_STATUS_LAST_COMMAND tag. It allows the
|
|
@@ -362,6 +360,7 @@ class SeProxyHal(IODevice):
|
|
|
362
360
|
SephTag.DBG_SCREEN_DISPLAY_STATUS,
|
|
363
361
|
SephTag.BAGL_DRAW_RECT]:
|
|
364
362
|
self.logger.debug(f"DISPLAY_STATUS {data!r}")
|
|
363
|
+
self.is_last_draw_nbgl = False
|
|
365
364
|
if screen.display.model not in ["nanox", "nanosp"] or tag == SephTag.BAGL_DRAW_RECT:
|
|
366
365
|
events = screen.display.display_status(data)
|
|
367
366
|
self.events += events
|
|
@@ -371,8 +370,9 @@ class SeProxyHal(IODevice):
|
|
|
371
370
|
elif tag in [SephTag.SCREEN_DISPLAY_RAW_STATUS, SephTag.BAGL_DRAW_BITMAP]:
|
|
372
371
|
self.logger.debug("SephTag.SCREEN_DISPLAY_RAW_STATUS")
|
|
373
372
|
screen.display.display_raw_status(data)
|
|
373
|
+
self.is_last_draw_nbgl = False
|
|
374
374
|
if screen.display.model in ["nanox", "nanosp"]:
|
|
375
|
-
self.ocr.analyze_bitmap(data)
|
|
375
|
+
self.ocr.analyze_bitmap(data, True)
|
|
376
376
|
if tag != SephTag.BAGL_DRAW_BITMAP:
|
|
377
377
|
self.socket_helper.send_packet(SephTag.DISPLAY_PROCESSED_EVENT)
|
|
378
378
|
if screen.display.rendering == RENDER_METHOD.PROGRESSIVE:
|
|
@@ -425,34 +425,34 @@ class SeProxyHal(IODevice):
|
|
|
425
425
|
pass
|
|
426
426
|
|
|
427
427
|
elif tag == SephTag.NBGL_DRAW_RECT:
|
|
428
|
-
assert isinstance(screen.display.
|
|
429
|
-
self.events += screen.display.
|
|
428
|
+
assert isinstance(screen.display.nbgl_gl, NBGL)
|
|
429
|
+
self.events += screen.display.nbgl_gl.hal_draw_rect(data)
|
|
430
430
|
|
|
431
431
|
elif tag == SephTag.NBGL_REFRESH:
|
|
432
|
-
|
|
433
|
-
screen.display.gl.refresh(data)
|
|
432
|
+
screen.display.nbgl_gl.refresh(data)
|
|
434
433
|
# Stax/Flex only
|
|
435
|
-
# We have
|
|
434
|
+
# We have need_nbgl_refresh the screen, remember it for the next time we have SephTag.GENERAL_STATUS
|
|
436
435
|
# then we'll perform a screen update and make public the resulting screenshot
|
|
437
|
-
self.
|
|
436
|
+
self.need_nbgl_refresh = True
|
|
437
|
+
self.is_last_draw_nbgl = True
|
|
438
438
|
|
|
439
439
|
elif tag == SephTag.NBGL_DRAW_LINE:
|
|
440
|
-
assert isinstance(screen.display.
|
|
441
|
-
screen.display.
|
|
440
|
+
assert isinstance(screen.display.nbgl_gl, NBGL)
|
|
441
|
+
screen.display.nbgl_gl.hal_draw_line(data)
|
|
442
442
|
|
|
443
443
|
elif tag == SephTag.NBGL_DRAW_IMAGE:
|
|
444
|
-
assert isinstance(screen.display.
|
|
445
|
-
self.ocr.analyze_bitmap(data)
|
|
446
|
-
screen.display.
|
|
444
|
+
assert isinstance(screen.display.nbgl_gl, NBGL)
|
|
445
|
+
self.ocr.analyze_bitmap(data, False)
|
|
446
|
+
screen.display.nbgl_gl.hal_draw_image(data)
|
|
447
447
|
|
|
448
448
|
elif tag == SephTag.NBGL_DRAW_IMAGE_RLE:
|
|
449
|
-
assert isinstance(screen.display.
|
|
450
|
-
self.ocr.analyze_bitmap(data)
|
|
451
|
-
screen.display.
|
|
449
|
+
assert isinstance(screen.display.nbgl_gl, NBGL)
|
|
450
|
+
self.ocr.analyze_bitmap(data, False)
|
|
451
|
+
screen.display.nbgl_gl.hal_draw_image_rle(data)
|
|
452
452
|
|
|
453
453
|
elif tag == SephTag.NBGL_DRAW_IMAGE_FILE:
|
|
454
|
-
assert isinstance(screen.display.
|
|
455
|
-
screen.display.
|
|
454
|
+
assert isinstance(screen.display.nbgl_gl, NBGL)
|
|
455
|
+
screen.display.nbgl_gl.hal_draw_image_file(data)
|
|
456
456
|
|
|
457
457
|
elif tag == SephTag.NFC_RAPDU:
|
|
458
458
|
data = self.transport.handle_rapdu(data)
|
|
Binary file
|