speculos 0.16.1.dev2__tar.gz → 0.16.1.dev4__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.dev4}/CHANGELOG.md +7 -0
- {speculos-0.16.1.dev2/speculos.egg-info → speculos-0.16.1.dev4}/PKG-INFO +1 -1
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/__version__.py +2 -2
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/main.py +78 -45
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/resources/launcher +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4/speculos.egg-info}/PKG-INFO +1 -1
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos.egg-info/SOURCES.txt +1 -0
- speculos-0.16.1.dev4/src/bolos/default.c +84 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/os.c +1 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/emulate.h +0 -9
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/launcher.c +133 -11
- speculos-0.16.1.dev4/src/launcher.h +20 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/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.dev4}/.clang-format +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/.codespell-ignore +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/.dockerignore +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/.github/workflows/continuous-integration-workflow.yml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/.github/workflows/documentation.yml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/.github/workflows/fast-checks.yml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/.github/workflows/force-rebase.yml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/.github/workflows/reusable_ragger_tests_latest_speculos.yml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/.github/workflows/speculos-builder.yml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/.gitignore +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/CMakeLists.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/COPYING +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/COPYING.LESSER +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/Dockerfile +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/MANIFEST.in +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/Pipfile +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/Pipfile.lock +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/README.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/README.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/blue#btc#1.5#00000000.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/blue#ram-page#blue-2.2.5#00000000.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/btc-test.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/btc.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/nanos#btc#1.5#00000000.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/nanos#btc#1.6#29717f9c.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/nanos#btc#1.6#6bd0a5f8.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/nanos#btc#2.0#ce796c1b.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/nanos#btc#2.1#1c8db8da.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/nanos#btc-test#1.5#00000000.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/nanos#btc-test#1.6#29717f9c.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/nanos#btc-test#1.6#6bd0a5f8.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/nanos#btc-test#2.0#ce796c1b.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/nanos#btc-test#2.1#1c8db8da.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/nanosp#btc#1.0#a86c791b.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/nanosp#btc#1.0.3#17bf7619.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/nanosp#btc-test#1.0#a86c791b.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/nanosp#btc-test#1.0.3#17bf7619.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/nanox#btc#1.2#57272a0f.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/nanox#btc#2.0.2#1c8db8da.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/apps/nanox#btc-test#2.0.2#1c8db8da.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/build.Dockerfile +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/clang-armv7m.cmake +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docker-compose.yml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/CNAME +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/Makefile +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/_static/screenshot-api-nanos-btc.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/_static/screenshot-btc-nanos.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/conf.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/dev/ci.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/dev/getting_started.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/dev/index.rst +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/dev/internals.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/dev/tests.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/index.rst +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/installation/build.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/installation/index.rst +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/installation/wsl.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/requirements.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/user/api.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/user/automation.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/user/clients.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/user/debug.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/user/docker.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/user/index.rst +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/user/macm1.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/user/semihosting.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/docs/user/usage.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/gcc-arm.cmake +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/lgtm.yml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/pyproject.toml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/sdk/bolos_syscalls_1.2.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/sdk/bolos_syscalls_1.5.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/sdk/bolos_syscalls_1.6.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/sdk/bolos_syscalls_2.0.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/sdk/bolos_syscalls_blue_2.2.5.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/sdk/bolos_syscalls_lnsp.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/sdk/bolos_syscalls_unified_sdk.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/setup.cfg +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/setup.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/__main__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/README.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/apdu.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/api.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/automation.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/button.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/events.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/finger.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/resources/apdu.schema +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/resources/button.schema +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/resources/finger.schema +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/resources/ticker.schema +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/restful.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/screenshot.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/static/index.html +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/static/swagger/README.md +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/static/swagger/favicon-16x16.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/static/swagger/favicon-32x32.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/static/swagger/index.html +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/static/swagger/swagger-ui-bundle.js +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/static/swagger/swagger-ui-standalone-preset.js +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/static/swagger/swagger-ui.css +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/static/swagger/swagger.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/swagger.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/swagger.yaml +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/ticker.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/api/web_interface.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/client.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/flex-api-level-cx-18.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/flex-api-level-cx-19.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/flex-api-level-cx-20.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/flex-api-level-cx-21.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/flex-api-level-cx-22.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/nanos-cx-2.0.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/nanos-cx-2.1.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/nanosp-api-level-cx-1.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/nanosp-api-level-cx-12.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/nanosp-api-level-cx-18.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/nanosp-api-level-cx-22.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/nanosp-api-level-cx-5.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/nanosp-cx-1.0.3.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/nanosp-cx-1.0.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/nanox-api-level-cx-1.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/nanox-api-level-cx-12.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/nanox-api-level-cx-18.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/nanox-api-level-cx-22.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/nanox-api-level-cx-5.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/nanox-cx-2.0.2.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/nanox-cx-2.0.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/stax-api-level-cx-1.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/stax-api-level-cx-10.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/stax-api-level-cx-11.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/stax-api-level-cx-12.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/stax-api-level-cx-13.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/stax-api-level-cx-14.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/stax-api-level-cx-15.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/stax-api-level-cx-20.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/stax-api-level-cx-21.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/stax-api-level-cx-22.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/stax-api-level-cx-3.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/stax-api-level-cx-5.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/stax-api-level-cx-7.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/stax-api-level-cx-8.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/cxlib/stax-api-level-cx-9.elf +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/flex-fonts-18.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/flex-fonts-19.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/flex-fonts-20.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/flex-fonts-21.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/flex-fonts-22.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/nanosp-fonts-18.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/nanosp-fonts-22.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/nanox-fonts-18.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/nanox-fonts-22.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/stax-fonts-1.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/stax-fonts-10.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/stax-fonts-11.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/stax-fonts-12.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/stax-fonts-13.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/stax-fonts-14.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/stax-fonts-15.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/stax-fonts-20.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/stax-fonts-21.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/stax-fonts-22.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/stax-fonts-3.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/stax-fonts-5.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/stax-fonts-7.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/stax-fonts-8.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/fonts/stax-fonts-9.bin +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/apdu.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/automation.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/automation_server.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/bagl.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/bagl_font.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/bagl_glyph.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/button_tcp.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/display.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/finger_tcp.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/headless.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/icon.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/nbgl.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/ocr.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/readerror.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/resources/automation.schema +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/rle_custom.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/screen.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/screen_text.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/seproxyhal.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/struct.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/transport/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/transport/interface.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/transport/nfc.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/transport/usb.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/mcu/vnc.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/observer.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/resources/vnc_server +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos/resources_importer.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos.egg-info/dependency_links.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos.egg-info/entry_points.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos.egg-info/requires.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/speculos.egg-info/top_level.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/CMakeLists.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/bagl.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/bagl.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_aes.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_aes.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_aes_sdk2.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_blake2.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_blake2b.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_bls.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_bls.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_bls_fp2.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_bls_g2.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_bn.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_common.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_crc.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_crc.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_curve25519.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_curve25519.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_ec.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_ec.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_ec_domain.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_ecpoint.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_ed25519.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_ed25519.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_hash.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_hash.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_hkdf.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_hkdf.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_hmac.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_hmac.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_math.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_math.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_montgomery.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_mpi.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_ripemd160.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_rng_rfc6979.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_rng_rfc6979.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_scc.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_sha256.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_sha3.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_sha512.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_twisted_edwards.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_utils.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_utils.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cx_weierstrass.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cxlib.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/cxlib.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/endorsement.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/endorsement.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/exception.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/fonts_info.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/nbgl.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/nbgl.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/nbgl_rle.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/nbgl_rle.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/os_1.2.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/os_1.5.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/os_1.6.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/os_2.0.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/os_bip32.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/os_bip32.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/os_eip2333.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/os_pki.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/os_pki.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/os_signature.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/os_signature.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/seproxyhal.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/touch.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/bolos/touch.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/emulate.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/emulate_1.2.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/emulate_1.5.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/emulate_1.6.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/emulate_2.0.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/emulate_blue_2.2.5.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/emulate_lnsp_1.0.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/emulate_unified_sdk.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/environment.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/environment.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/fonts.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/sdk.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/svc.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/svc.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/CMakeLists.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursor.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursor.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/approved.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/bitcoin.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/blue.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/fabrice.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_00.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_01.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_02.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_03.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_04.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_05.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_06.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_07.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_08.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_09.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_10.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_11.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_12.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_13.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_14.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_15.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_16.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_17.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_18.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_19.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_20.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/frame_21.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/pizza.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/star.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/sword.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/cursors/verynice.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/seccomp-bpf.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/src/vnc/vnc_server.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/CMakeLists.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/CMakeLists.txt +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/blake2b_kat.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/groestl_224_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/groestl_224_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/groestl_256_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/groestl_256_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/groestl_384_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/groestl_384_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/groestl_512_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/groestl_512_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/hmac.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/keccak_224_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/keccak_224_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/keccak_256_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/keccak_256_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/keccak_384_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/keccak_384_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/keccak_512_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/keccak_512_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/sha224_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/sha224_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/sha256_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/sha256_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/sha384_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/sha384_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/sha3_224_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/sha3_224_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/sha3_256_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/sha3_256_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/sha3_384_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/sha3_384_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/sha3_512_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/sha3_512_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/sha512_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/sha512_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/shake128_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/shake128_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/shake128_variable_output.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/shake256_long_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/shake256_short_msg.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/cavp/shake256_variable_output.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/hello.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/nist_cavp.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/nist_cavp.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_aes.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_bip32.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_blake2.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_bls.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_bn.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_crc16.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_ec.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_ecdh.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_ecdsa.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_ecpoint.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_eddsa.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_eip2333.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_endorsement.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_hmac.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_math.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_mpi_rng.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_rfc6979.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_ripemd.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_sha2.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_sha3.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_slip21.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/wycheproof/X25519.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/wycheproof/X448.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/wycheproof/ecdh_secp256k1.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/wycheproof/eddsa.data +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/test_environment.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/utils.c +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/utils.h +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/api/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/api/resources/automation.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/api/test_api.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/apps/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/apps/resources/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/apps/resources/btc_getpubkey_blue.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/apps/resources/btc_getpubkey_blue.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/apps/resources/btc_getpubkey_nanos.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/apps/resources/btc_getpubkey_nanos.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/apps/resources/btc_getpubkey_nanosp.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/apps/resources/btc_getpubkey_nanosp.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/apps/resources/btc_getpubkey_nanox.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/apps/resources/btc_getpubkey_nanox.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/apps/test_btc.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/apps/test_btc_testnet.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/apps/test_ram_page.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/apps/test_vnc.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/conftest.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/mcu/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/mcu/resources/automation_invalid_action_args.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/mcu/resources/automation_invalid_action_name.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/mcu/resources/automation_invalid_rule_key.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/mcu/resources/automation_valid.json +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/mcu/test_automation.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/pytest.ini +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/test_resources_importer.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/unit/__init__.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/unit/test_client_Api.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/python/unit/test_client_SpeculosClient.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tools/clang-format.sh +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tools/cursor.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tools/debug.sh +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tools/gdbinit +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tools/gif-recorder.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tools/ledger-live-http-proxy.py +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tools/skins/handholding.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tools/skins/nano-blue.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tools/skins/unicorn.png +0 -0
- {speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tools/winamp.py +0 -0
|
@@ -5,6 +5,13 @@ 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-13
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- `--save-nvram` and `--load-nvram` parameters that allow NVRAM testing
|
|
13
|
+
- destination boundaries verification for `nvm_write()`
|
|
14
|
+
|
|
8
15
|
## [0.16.0] 2025-03-05
|
|
9
16
|
|
|
10
17
|
### 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.dev4'
|
|
21
|
+
__version_tuple__ = version_tuple = (0, 16, 1, 'dev4')
|
|
@@ -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,45 +99,53 @@ 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
151
|
def run_qemu(s1: socket.socket, s2: socket.socket, args: argparse.Namespace, use_bagl: bool) -> int:
|
|
@@ -147,8 +176,9 @@ 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")
|
|
@@ -167,21 +197,22 @@ def run_qemu(s1: socket.socket, s2: socket.socket, args: argparse.Namespace, use
|
|
|
167
197
|
app_path = getattr(args, 'app.elf')
|
|
168
198
|
for lib in [f'main:{app_path}'] + args.library:
|
|
169
199
|
name, lib_path = lib.split(':')
|
|
170
|
-
|
|
171
|
-
text_load_addr, svc_call_address, svc_cx_call_address, \
|
|
172
|
-
fonts_addr, fonts_size = get_elf_infos(lib_path, use_bagl)
|
|
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
|
|
|
187
218
|
if args.model == 'blue':
|
|
@@ -303,6 +334,8 @@ def main(prog=None) -> int:
|
|
|
303
334
|
"left button, 'a' right, 's' both). Default: arrow keys")
|
|
304
335
|
group.add_argument('--progressive', action='store_true', help='Enable step-by-step rendering of graphical elements')
|
|
305
336
|
group.add_argument('--zoom', help='Display pixel size.', type=int, choices=range(1, 11))
|
|
337
|
+
group.add_argument('--load-nvram', action='store_true', help='Preload app NVRAM data from file beforehand')
|
|
338
|
+
group.add_argument('--save-nvram', action='store_true', help='Save app NVRAM data to file')
|
|
306
339
|
|
|
307
340
|
if prog:
|
|
308
341
|
parser.prog = prog
|
|
Binary file
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#include <err.h>
|
|
2
|
+
#include <stddef.h>
|
|
3
|
+
#include <stdio.h>
|
|
4
|
+
#include <sys/mman.h>
|
|
5
|
+
|
|
6
|
+
#include "emulate.h"
|
|
7
|
+
#include "launcher.h"
|
|
8
|
+
|
|
9
|
+
#define PAGE_SIZE 4096
|
|
10
|
+
|
|
11
|
+
unsigned long sys_os_global_pin_invalidate(void)
|
|
12
|
+
{
|
|
13
|
+
/* return void actually */
|
|
14
|
+
return 0;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
* TODO: ensure that source address is valid.
|
|
19
|
+
*/
|
|
20
|
+
int sys_nvm_write(void *dst_addr, void *src_addr, size_t src_len)
|
|
21
|
+
{
|
|
22
|
+
ptrdiff_t diff;
|
|
23
|
+
size_t size;
|
|
24
|
+
void *p;
|
|
25
|
+
|
|
26
|
+
/* Checking the destination boundaries */
|
|
27
|
+
unsigned long app_nvram_offset =
|
|
28
|
+
get_app_nvram_address() - get_app_text_load_addr();
|
|
29
|
+
if ((dst_addr < get_memory_code_address() + app_nvram_offset) ||
|
|
30
|
+
(dst_addr + src_len >=
|
|
31
|
+
get_memory_code_address() + app_nvram_offset + get_app_nvram_size())) {
|
|
32
|
+
errx(1, "App NVRAM write attempt out of boundaries\n");
|
|
33
|
+
}
|
|
34
|
+
p = (void *)((unsigned long)dst_addr & (~(PAGE_SIZE - 1)));
|
|
35
|
+
diff = (ptrdiff_t)dst_addr - (ptrdiff_t)p;
|
|
36
|
+
size = src_len + diff;
|
|
37
|
+
|
|
38
|
+
if (mprotect(p, size, PROT_WRITE) != 0) {
|
|
39
|
+
err(1, "nvm_write: mprotect(PROT_WRITE)");
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (src_addr != NULL) {
|
|
43
|
+
memcpy(dst_addr, src_addr, src_len);
|
|
44
|
+
} else {
|
|
45
|
+
memset(dst_addr, 0, src_len);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (mprotect(p, size, PROT_READ | PROT_EXEC) != 0) {
|
|
49
|
+
err(1, "nvm_write: mprotect(PROT_READ | PROT_EXEC)");
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (get_app_save_nvram()) {
|
|
53
|
+
/* Writing data to host file */
|
|
54
|
+
FILE *fptr = fopen(get_app_nvram_file_name(), "r+");
|
|
55
|
+
if (fptr == NULL) {
|
|
56
|
+
fptr = fopen(get_app_nvram_file_name(), "w");
|
|
57
|
+
if (fptr == NULL) {
|
|
58
|
+
err(1, "Failed to open the app NVRAM file %s\n",
|
|
59
|
+
get_app_nvram_file_name());
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
unsigned long data_offset =
|
|
63
|
+
dst_addr - (get_memory_code_address() + app_nvram_offset);
|
|
64
|
+
fseek(fptr, data_offset, SEEK_SET);
|
|
65
|
+
if (fwrite(src_addr, 1, src_len, fptr) != src_len) {
|
|
66
|
+
errx(1, "App NVRAM write attempt failed\n");
|
|
67
|
+
}
|
|
68
|
+
fclose(fptr);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* XXX: this function return void */
|
|
72
|
+
return 0xdeadbeef;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
int sys_nvm_erase(void *dst_addr, size_t src_len)
|
|
76
|
+
{
|
|
77
|
+
return sys_nvm_write(dst_addr, NULL, src_len);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
int sys_nvm_erase_page(unsigned int page_adr __attribute__((unused)))
|
|
81
|
+
{
|
|
82
|
+
// TODO !
|
|
83
|
+
return 0;
|
|
84
|
+
}
|
|
@@ -23,8 +23,6 @@ typedef struct try_context_s try_context_t;
|
|
|
23
23
|
typedef struct cx_ecfp_256_public_key_s cx_ecfp_public_key_t;
|
|
24
24
|
typedef struct cx_ecfp_256_private_key_s cx_ecfp_private_key_t;
|
|
25
25
|
|
|
26
|
-
struct app_s;
|
|
27
|
-
|
|
28
26
|
#define SEPH_FILENO 0 /* 0 is stdin fileno */
|
|
29
27
|
|
|
30
28
|
#ifndef UNUSED
|
|
@@ -124,13 +122,6 @@ unsigned long sys_io_seph_send(const uint8_t *buffer, uint16_t length);
|
|
|
124
122
|
unsigned long sys_io_seph_recv(uint8_t *buffer, uint16_t maxlength,
|
|
125
123
|
unsigned int flags);
|
|
126
124
|
|
|
127
|
-
void unload_running_app(bool unload_data);
|
|
128
|
-
struct app_s *get_current_app(void);
|
|
129
|
-
void save_current_context(struct sigcontext *sigcontext);
|
|
130
|
-
void replace_current_context(struct sigcontext *sigcontext);
|
|
131
|
-
int replace_current_code(struct app_s *app);
|
|
132
|
-
int run_lib(char *name, unsigned long *parameters);
|
|
133
|
-
|
|
134
125
|
unsigned long sys_try_context_set(try_context_t *context);
|
|
135
126
|
unsigned long sys_try_context_get(void);
|
|
136
127
|
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
#include "emulate.h"
|
|
16
16
|
#include "environment.h"
|
|
17
17
|
#include "fonts.h"
|
|
18
|
+
#include "launcher.h"
|
|
18
19
|
#include "svc.h"
|
|
19
20
|
|
|
20
21
|
#define LOAD_ADDR ((void *)0x40000000)
|
|
@@ -28,6 +29,9 @@
|
|
|
28
29
|
#define GIT_REVISION "00000000"
|
|
29
30
|
#endif
|
|
30
31
|
|
|
32
|
+
#define STORAGE_APP_NAME_LEN 30
|
|
33
|
+
const char STORAGE_BACKUP[] = ".backup";
|
|
34
|
+
|
|
31
35
|
struct elf_info_s {
|
|
32
36
|
unsigned long load_offset;
|
|
33
37
|
unsigned long load_size;
|
|
@@ -38,10 +42,15 @@ struct elf_info_s {
|
|
|
38
42
|
unsigned long text_load_addr;
|
|
39
43
|
unsigned long fonts_addr;
|
|
40
44
|
unsigned long fonts_size;
|
|
45
|
+
unsigned long app_nvram_addr;
|
|
46
|
+
unsigned long app_nvram_size;
|
|
41
47
|
};
|
|
42
48
|
|
|
43
49
|
struct app_s {
|
|
44
50
|
char *name;
|
|
51
|
+
char nvram_file_name[STORAGE_APP_NAME_LEN];
|
|
52
|
+
bool load_nvram;
|
|
53
|
+
bool save_nvram;
|
|
45
54
|
int fd;
|
|
46
55
|
struct elf_info_s elf;
|
|
47
56
|
};
|
|
@@ -105,7 +114,8 @@ static struct app_s *search_app_by_name(char *name)
|
|
|
105
114
|
}
|
|
106
115
|
|
|
107
116
|
/* open the app file */
|
|
108
|
-
static int open_app(char *name, char *filename, struct elf_info_s *elf
|
|
117
|
+
static int open_app(char *name, char *filename, struct elf_info_s *elf,
|
|
118
|
+
bool load_nvram, bool save_nvram)
|
|
109
119
|
{
|
|
110
120
|
int fd;
|
|
111
121
|
|
|
@@ -126,6 +136,14 @@ static int open_app(char *name, char *filename, struct elf_info_s *elf)
|
|
|
126
136
|
}
|
|
127
137
|
|
|
128
138
|
apps[napp].name = name;
|
|
139
|
+
|
|
140
|
+
size_t len = STORAGE_APP_NAME_LEN - 1;
|
|
141
|
+
strncat(apps[napp].nvram_file_name, name, len);
|
|
142
|
+
len -= strlen(name);
|
|
143
|
+
strncat(apps[napp].nvram_file_name, "_nvram.bin", len);
|
|
144
|
+
apps[napp].load_nvram = load_nvram;
|
|
145
|
+
apps[napp].save_nvram = save_nvram;
|
|
146
|
+
|
|
129
147
|
apps[napp].fd = fd;
|
|
130
148
|
apps[napp].elf.load_offset = elf->load_offset;
|
|
131
149
|
apps[napp].elf.load_size = elf->load_size;
|
|
@@ -136,6 +154,8 @@ static int open_app(char *name, char *filename, struct elf_info_s *elf)
|
|
|
136
154
|
apps[napp].elf.text_load_addr = elf->text_load_addr;
|
|
137
155
|
apps[napp].elf.fonts_addr = elf->fonts_addr;
|
|
138
156
|
apps[napp].elf.fonts_size = elf->fonts_size;
|
|
157
|
+
apps[napp].elf.app_nvram_addr = elf->app_nvram_addr;
|
|
158
|
+
apps[napp].elf.app_nvram_size = elf->app_nvram_size;
|
|
139
159
|
|
|
140
160
|
napp++;
|
|
141
161
|
|
|
@@ -153,11 +173,41 @@ static void reset_memory(bool unload_data)
|
|
|
153
173
|
}
|
|
154
174
|
}
|
|
155
175
|
|
|
176
|
+
void *get_memory_code_address(void)
|
|
177
|
+
{
|
|
178
|
+
return memory.code;
|
|
179
|
+
}
|
|
180
|
+
|
|
156
181
|
struct app_s *get_current_app(void)
|
|
157
182
|
{
|
|
158
183
|
return current_app;
|
|
159
184
|
}
|
|
160
185
|
|
|
186
|
+
char *get_app_nvram_file_name(void)
|
|
187
|
+
{
|
|
188
|
+
return current_app->nvram_file_name;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
bool get_app_save_nvram(void)
|
|
192
|
+
{
|
|
193
|
+
return current_app->save_nvram;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
unsigned long get_app_nvram_address(void)
|
|
197
|
+
{
|
|
198
|
+
return current_app->elf.app_nvram_addr;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
unsigned long get_app_nvram_size(void)
|
|
202
|
+
{
|
|
203
|
+
return current_app->elf.app_nvram_size;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
unsigned long get_app_text_load_addr(void)
|
|
207
|
+
{
|
|
208
|
+
return current_app->elf.text_load_addr;
|
|
209
|
+
}
|
|
210
|
+
|
|
161
211
|
// On old versions of the SDK, functions SVC_Call and SVC_cx_call were inlined
|
|
162
212
|
// In this case we can't look for the symbols in the elf to only patch the SVC_1
|
|
163
213
|
// inside of these functions
|
|
@@ -402,6 +452,67 @@ static void *load_app(char *name)
|
|
|
402
452
|
}
|
|
403
453
|
}
|
|
404
454
|
|
|
455
|
+
// App NVRAM data update
|
|
456
|
+
unsigned long app_nvram_offset =
|
|
457
|
+
app->elf.app_nvram_addr - app->elf.text_load_addr;
|
|
458
|
+
memset(code + app_nvram_offset, 0, app->elf.app_nvram_size);
|
|
459
|
+
size_t preload_file_size = 0;
|
|
460
|
+
|
|
461
|
+
if (app->load_nvram) {
|
|
462
|
+
FILE *fptr = fopen(app->nvram_file_name, "rb");
|
|
463
|
+
if (fptr == NULL) {
|
|
464
|
+
warnx("App NVRAM file %s is absent\n", app->nvram_file_name);
|
|
465
|
+
goto error;
|
|
466
|
+
}
|
|
467
|
+
fseek(fptr, 0, SEEK_END);
|
|
468
|
+
long lSize = ftell(fptr);
|
|
469
|
+
rewind(fptr);
|
|
470
|
+
|
|
471
|
+
uint8_t *buffer = (uint8_t *)malloc(sizeof(uint8_t) * lSize);
|
|
472
|
+
if (buffer == NULL) {
|
|
473
|
+
warnx("Error to allocate memory for app nvram read\n");
|
|
474
|
+
fclose(fptr);
|
|
475
|
+
goto error;
|
|
476
|
+
}
|
|
477
|
+
preload_file_size = fread(buffer, 1, lSize, fptr);
|
|
478
|
+
if (preload_file_size != (size_t)lSize) {
|
|
479
|
+
warnx("App nvram file size mismatch\n");
|
|
480
|
+
free(buffer);
|
|
481
|
+
fclose(fptr);
|
|
482
|
+
goto error;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
// The patch
|
|
486
|
+
memcpy(code + app_nvram_offset, buffer, preload_file_size);
|
|
487
|
+
|
|
488
|
+
free(buffer);
|
|
489
|
+
fclose(fptr);
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
if (app->save_nvram) {
|
|
493
|
+
/* Let's rename and thus backup the current file if present */
|
|
494
|
+
char backup_file_name[STORAGE_APP_NAME_LEN + sizeof(STORAGE_BACKUP)] = {
|
|
495
|
+
0
|
|
496
|
+
};
|
|
497
|
+
|
|
498
|
+
strcpy(backup_file_name, app->nvram_file_name);
|
|
499
|
+
strcat(backup_file_name, STORAGE_BACKUP);
|
|
500
|
+
rename(app->nvram_file_name, backup_file_name);
|
|
501
|
+
|
|
502
|
+
if (preload_file_size > 0) {
|
|
503
|
+
/* Let's save the initial content to the new file */
|
|
504
|
+
FILE *fptr = fopen(app->nvram_file_name, "w");
|
|
505
|
+
if (fptr == NULL) {
|
|
506
|
+
err(1, "Failed to open the app NVRAM file %s\n", app->nvram_file_name);
|
|
507
|
+
}
|
|
508
|
+
if (fwrite(code + app_nvram_offset, 1, preload_file_size, fptr) !=
|
|
509
|
+
preload_file_size) {
|
|
510
|
+
errx(1, "App NVRAM write attempt failed\n");
|
|
511
|
+
}
|
|
512
|
+
fclose(fptr);
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
|
|
405
516
|
if (mprotect(code, size, PROT_READ | PROT_EXEC) != 0) {
|
|
406
517
|
warn("could not update mprotect in rx mode for app");
|
|
407
518
|
goto error;
|
|
@@ -606,12 +717,15 @@ int run_lib(char *name, unsigned long *parameters)
|
|
|
606
717
|
/*
|
|
607
718
|
* Libraries are given with the following format:
|
|
608
719
|
* name:path:load_offset:load_size. eg.
|
|
609
|
-
* Bitcoin:apps/btc.elf:0x1000:0x9fc0:0x20001800:0x1800
|
|
720
|
+
* Bitcoin:apps/btc.elf:0x1000:0x9fc0:0x20001800:0x1800 ...
|
|
610
721
|
*/
|
|
611
|
-
static char *parse_app_infos(char *arg, char **filename, struct elf_info_s *elf
|
|
722
|
+
static char *parse_app_infos(char *arg, char **filename, struct elf_info_s *elf,
|
|
723
|
+
bool *load_nvram, bool *save_nvram)
|
|
612
724
|
{
|
|
613
725
|
char *libname;
|
|
614
726
|
int ret;
|
|
727
|
+
int load_nvram_i = 0;
|
|
728
|
+
int save_nvram_i = 0;
|
|
615
729
|
|
|
616
730
|
libname = strdup(arg);
|
|
617
731
|
*filename = strdup(arg);
|
|
@@ -619,17 +733,22 @@ static char *parse_app_infos(char *arg, char **filename, struct elf_info_s *elf)
|
|
|
619
733
|
err(1, "strdup");
|
|
620
734
|
}
|
|
621
735
|
|
|
622
|
-
ret = sscanf(
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
736
|
+
ret = sscanf(arg,
|
|
737
|
+
"%[^:]:%[^:]:0x%lx:0x%lx:0x%lx:0x%lx:0x%lx:0x%lx:0x%lx:0x%lx:0x%"
|
|
738
|
+
"lx:0x%lx:0x%lx:%d:%d",
|
|
739
|
+
libname, *filename, &elf->load_offset, &elf->load_size,
|
|
740
|
+
&elf->stack_addr, &elf->stack_size, &elf->svc_call_addr,
|
|
741
|
+
&elf->svc_cx_call_addr, &elf->text_load_addr, &elf->fonts_addr,
|
|
742
|
+
&elf->fonts_size, &elf->app_nvram_addr, &elf->app_nvram_size,
|
|
743
|
+
&load_nvram_i, &save_nvram_i);
|
|
744
|
+
if (ret != 15) {
|
|
628
745
|
warnx("failed to parse app infos (\"%s\", %d)", arg, ret);
|
|
629
746
|
free(libname);
|
|
630
747
|
free(*filename);
|
|
631
748
|
return NULL;
|
|
632
749
|
}
|
|
750
|
+
*load_nvram = ((load_nvram_i == 1) ? true : false);
|
|
751
|
+
*save_nvram = ((save_nvram_i == 1) ? true : false);
|
|
633
752
|
|
|
634
753
|
return libname;
|
|
635
754
|
}
|
|
@@ -638,15 +757,18 @@ static int load_apps(int argc, char *argv[])
|
|
|
638
757
|
{
|
|
639
758
|
char *filename, *libname;
|
|
640
759
|
struct elf_info_s elf;
|
|
760
|
+
bool load_nvram = false;
|
|
761
|
+
bool save_nvram = false;
|
|
641
762
|
int i;
|
|
642
763
|
|
|
643
764
|
for (i = 0; i < argc; i++) {
|
|
644
|
-
libname =
|
|
765
|
+
libname =
|
|
766
|
+
parse_app_infos(argv[i], &filename, &elf, &load_nvram, &save_nvram);
|
|
645
767
|
if (libname == NULL) {
|
|
646
768
|
return -1;
|
|
647
769
|
}
|
|
648
770
|
|
|
649
|
-
if (open_app(libname, filename, &elf) != 0) {
|
|
771
|
+
if (open_app(libname, filename, &elf, load_nvram, save_nvram) != 0) {
|
|
650
772
|
return -1;
|
|
651
773
|
}
|
|
652
774
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <signal.h>
|
|
4
|
+
#include <stdbool.h>
|
|
5
|
+
#include <stddef.h>
|
|
6
|
+
|
|
7
|
+
struct app_s;
|
|
8
|
+
|
|
9
|
+
void unload_running_app(bool unload_data);
|
|
10
|
+
void *get_memory_code_address(void);
|
|
11
|
+
struct app_s *get_current_app(void);
|
|
12
|
+
char *get_app_nvram_file_name(void);
|
|
13
|
+
bool get_app_save_nvram(void);
|
|
14
|
+
unsigned long get_app_nvram_address(void);
|
|
15
|
+
unsigned long get_app_nvram_size(void);
|
|
16
|
+
unsigned long get_app_text_load_addr(void);
|
|
17
|
+
void save_current_context(struct sigcontext *sigcontext);
|
|
18
|
+
void replace_current_context(struct sigcontext *sigcontext);
|
|
19
|
+
int replace_current_code(struct app_s *app);
|
|
20
|
+
int run_lib(char *name, unsigned long *parameters);
|
{speculos-0.16.1.dev2 → speculos-0.16.1.dev4}/tests/c/syscalls/test_os_global_pin_is_validated.c
RENAMED
|
@@ -22,11 +22,41 @@
|
|
|
22
22
|
hw_model_t hw_model = MODEL_COUNT;
|
|
23
23
|
sdk_version_t sdk_version = SDK_COUNT;
|
|
24
24
|
|
|
25
|
+
void *get_memory_code_address(void)
|
|
26
|
+
{
|
|
27
|
+
return NULL;
|
|
28
|
+
}
|
|
29
|
+
|
|
25
30
|
struct app_s *get_current_app(void)
|
|
26
31
|
{
|
|
27
32
|
return NULL;
|
|
28
33
|
}
|
|
29
34
|
|
|
35
|
+
char *get_app_nvram_file_name(void)
|
|
36
|
+
{
|
|
37
|
+
return NULL;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
bool get_app_save_nvram(void)
|
|
41
|
+
{
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
unsigned long get_app_nvram_address(void)
|
|
46
|
+
{
|
|
47
|
+
return 0;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
unsigned long get_app_nvram_size(void)
|
|
51
|
+
{
|
|
52
|
+
return 0;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
unsigned long get_app_text_load_addr(void)
|
|
56
|
+
{
|
|
57
|
+
return 0;
|
|
58
|
+
}
|
|
59
|
+
|
|
30
60
|
void unload_running_app(bool UNUSED(unload_data))
|
|
31
61
|
{
|
|
32
62
|
}
|