All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Add
debugAppscript to capture app PRINTF output over USB CDC - Scan until Ledger CDC port appears (connection & disconnection) and add timestamp
- Enable BLS12-377 and ZIP32 derivations in parameters installation
- Add support for Apex BLE
- Add
actionlintCI linting - USB environment variable to select specific port
- Rename
distributeFirmware11_scanintodistributeFirmware - Bump protobuf version to match ledgerctl
- Replace deploy job with reusable workflow
- Apply
ruffformatting and linting across codebase - Push to Artifactory Python registry in CI
- Remove useless push to
test.pypi.org - Update
upload-artifactaction (v3 deprecated)
- Fix issue when a LP has a
.hexwith several areas - Fix PCSC reader detection
- Fix support for PCSC smartcard readers
- Fix APDU through BLE
- Fix AES init with IV
- Reduce specific CI permission to the targeted job
- Supported Python versions: dropped 3.6, 3.7 and 3.8, added 3.11, 3.12 and 3.13
- Fix issue when a LP has a
.hexwith several areas
- Fix missing import in
loadApp.py
- Add detailed descriptions for some error codes to ease debug
- Raise
CommExceptionwith response data - Shutdown socket before closing
loadApp.py: Fix return code
- Making the main function of
loadApp.pycallable
- Align protobuf dependency versions with Ledgerwallet
- Fix
appNameparameter encoding inrunApp - Fix indentation on
runApp
- Add Europa service UUID
- Implement the backup deletion flow
- Add
--bypass-ssl-checkforupdateFirmware2command - Automatic deployment in CI
- Generate & deploy doc in the CI
- Delete unused constants/import
- Replace NFC polling mechanism with a simple transceive operation
- Remove
nfcTagUpdate.pyscript - Update udev rule for hidraw USB access
- Update & document the generation of Sphinx documentation
- Refactor
recoverPrepareDataIdv - Encrypt backup data with provider's key
- Allow local install even when no tag or SCM tool is present
- Fix list of valid sections
- Do not force
response=Trueonwrite_gatt_char()calls
- Add Recover's scripts and instructions
- HexLoader: Add language packs functions
- Add
createpackParamsas an attribute ofHexLoader
- Set
long_description_content_typeto markdown
- Add
BleComm.pyscript withBleScannerclass for device scanning and selection - Add
BleDeviceclass with open/close/exchange methods - Add
DongleBLEclass incomm.py, integrateBleDevicefromBleComm.py - Add Nano X support (add Nano X service UUID)
- Use BLE write cmd characteristic to speed up transfer time
- Add
readElfMetadatatool and integrate it torunScript
- Enable
--rootPrivateKeyusage - Set NFC APDU max size to 255 (as USB HID transport)
- Fix
runScriptSCP APDU formatting
- Add NFC support in
comm.py - Add new script
nfcTagUpdate.pyto update NFC tag content - Add
nfcpydependency
- Fix pyscard version for setuptools v67
createapp: set invalid API level (legacy) to -1loadApp.py: Removeapilevelparameter
- SDK API level handling in load script
- Add public endorsement endpoint
- Hotfix adding a close function to
FileCardclass
- Fixed assertion error
- Fix
apdugenwrong return type
- Remove
ctxandflagsparameters - Script params: use keyword arguments for
argparse - Remove redundant parentheses and semicolons
- Replace
hexstr()withbytes.hex() - Remove legacy code specific to Python 2
- Remove unused imports
- Add missing import
- Rename
prime256r1tosecp256r1
- Argument to bypass SSL check of remote certificate when running remote install script
- Add argument to bypass SSL check of remote certificate when endorsing a device
- Add link to Speculos in documentation
- Add note on developer Nano X units
- Update Ledger URLs
- Test for
AttributeErrorwhen readingsecp256k1.HAS_ECDH
- Fix BLS-12 381 G1 derivation
- Add BLS-12 381 G1 derivation
- Add RFC6979 support for deterministic signatures
- Handle GET RESPONSE
- Raise exception when needed
- SLIP-0021 support when loading an application on 1.6 firmware
- Delete socket on close for better serialization of
DongleServerobject
- Add support for more device statuses
- Add
apduMaxDataSizemethod to thecommTCPDongleServerclass - Update README with macOS installation instructions
- More generic error messages
- Change sig type from
bytearraytobytesto matchsecp256k1
- Update
updateFirmwareto usedistributeFirmware11_scan
- U2F Python 3 compatibility
- Working
endorsementSetupon Python 3
- Add common backend support for genuine check & management
- Add TCP proxy support
- Add Nano X to README
- Improve Python 3 compatibility
- Support additional Status Words
- Accept the generic status
61xx - Standardize tab and space mix to 4 spaces for Python 3 compatibility
- Fix missing
targetVersionand Python 2 incompatibility - Add a
lib_dependencyerror message
- Add support of SCP4 version for application hash computation
- Python 3 fixes
- Fix Python 3 invalid encoding in
targetVersion
- Add Blue 2.1 target ID
- Fix genuine check for newer firmware versions
- Fix Blue 2.1 compatibility for
updateFirmware
- Fix ECPy dependency version
- Fix SCP on Blue 2.1
- Always generate canonical signature on sign
- Replace
pycryptowithpycryptodomex
- Python 3 compatibility additional fix
- New script
getMemInfoand newhexloadermethodgetMemInfo - New argument
signPrivateKeyinloadAppto decorrelate signature from SCP opening - Add
runScriptdebug support - Nano S 1.4 support
- Add
.gitignore
- Cleanup Python 3 support
- Better interface filter, macOS portability
- Fix custom CA handling
- Fix py2 compatibility for
setupCustomCA - Friendlier errors for
0x6985,0x6a84and0x6a85 - Fix typo on
getDeployedSecretV1
- Fix invalid exit condition
- Python 3 fixes
- Added documentation
- Fixed CSS override issue for docs
- Added documentation
- Add
runApp.pyfor specific firmware
- Add scripts related to Nano S 1.3
- Additional Attestation / Endorsement related APIs
- Merge HSM logic
- Fix
derivePassphrasefor Python 2
- Add endorsement APIs
- Add public key tweak for endorsement validation
- Compatibility with Blue firmware 2.0 (production release)
- Speedup
- Encode correctly the passphrase in UTF8 NFKD
- Force to recompile
secp256k1for recent pip - Update libudev package
- Update README
- Fix indent errors and print function for Python 3 builds
- Add passphrase derivation utility
- Add genuine device check script
- Support Secure Channel outgoing data
- Add Pillow dependency
- Python 3 port with keeping Python 2 compliance
- Add received data in
CommExceptionobject
- Optional
libsecp256k1dependency, default to pure Python cryptographic API to help Windows users
- Fix timeout from 7 hours to expected 20 seconds
- Fix PyPI update
- Support locking on curve and multiple paths (API level 5)
- Fix copy/paste error
- Mention Nano S in documentation
- Add application signature & validation scripts
- Add standalone MCU load support
- Add SCP support
- Add locked down application path, icon, signature support
- Add boot address support, hex printer
- Nano S vendor ID support
- Support 1.1 deployed logic
- Add experimental desktop BLE support
- Fix MCU firmware loading
- Fix string/number concatenation in error messages
- Initial import