Script Reference

checkGenuine.py

Use attestation to determine if the device is a genuine Ledger device.

usage: python -m ledgerblue.checkGenuine [-h] [--targetId TARGETID]
                                         [--issuerKey ISSUERKEY] [--apdu]

Named Arguments

--targetId

The device’s target ID (default is Ledger Blue)

Default: 822083586

--issuerKey

Issuer key (hex encoded, default is batch 1)

Default: “0490f5c9d15a0134bb019d2afd0bf297149738459706e7ac5be4abc350a1f818057224fce12ec9a65de18ec34d6e8c24db927835ea1692b14c32e9836a75dad609”

--apdu

Display APDU log

Default: False

deleteApp.py

Delete the app with the specified name.

usage: python -m ledgerblue.deleteApp [-h] [--targetId TARGETID]
                                      [--appName APPNAME] [--appHash APPHASH]
                                      [--rootPrivateKey ROOTPRIVATEKEY]
                                      [--apdu] [--deployLegacy]
                                      [--offline OFFLINE]

Named Arguments

--targetId

The device’s target ID (default is Ledger Blue)

Default: 822083586

--appName

The name of the application to delete

--appHash

Set the application hash

--rootPrivateKey

A private key used to establish a Secure Channel (hex encoded)

--apdu

Display APDU log

Default: False

--deployLegacy

Use legacy deployment API

Default: False

--offline

Request to only output application load APDUs into given filename

derivePassphrase.py

Set a BIP 39 passphrase on the device.

usage: python -m ledgerblue.derivePassphrase [-h] [--persistent]

Named Arguments

--persistent

Persist passphrase as secondary PIN (otherwise, it’s set as a temporary passphrase)

Default: False

endorsementSetupLedger.py

Generate an attestation keypair, using Ledger to sign the Owner certificate.

usage: python -m ledgerblue.endorsementSetupLedger [-h] [--url URL]
                                                   [--bypass-ssl-check]
                                                   [--apdu] [--perso PERSO]
                                                   [--endorsement ENDORSEMENT]
                                                   [--targetId TARGETID] --key
                                                   {1,2}

Named Arguments

--url

Server URL

Default: “https://hsmprod.hardwarewallet.com/hsm/process

--bypass-ssl-check

Keep going even if remote certificate verification fails

Default: False

--apdu

Display APDU log

Default: False

--perso

A reference to the personalization key; this is a reference to the specific Issuer keypair used by Ledger to sign the device’s Issuer Certificate

Default: “perso_11”

--endorsement

A reference to the endorsement key to use; this is a reference to the specific Owner keypair to be used by Ledger to sign the Owner Certificate

Default: “attest_1”

--targetId

The device’s target ID (default is Ledger Blue)

--key

Possible choices: 1, 2

Which endorsement scheme to use

endorsementSetup.py

Generate an attestation keypair, using the provided Owner private key to sign the Owner Certificate.

usage: python -m ledgerblue.endorsementSetup [-h] --key {1,2}
                                             [--certificate CERTIFICATE]
                                             [--privateKey PRIVATEKEY]
                                             [--targetId TARGETID]
                                             [--issuerKey ISSUERKEY]
                                             [--rootPrivateKey ROOTPRIVATEKEY]
                                             [--apdu]

Named Arguments

--key

Possible choices: 1, 2

Which endorsement scheme to use

--certificate

Optional certificate to store if finalizing the endorsement (hex encoded), if no private key is specified

--privateKey

Optional private key to use to create a test certificate (hex encoded), if no certificate is specified

--targetId

The device’s target ID (default is Ledger Blue)

Default: 822083586

--issuerKey

Issuer key (hex encoded, default is batch 1)

Default: “0490f5c9d15a0134bb019d2afd0bf297149738459706e7ac5be4abc350a1f818057224fce12ec9a65de18ec34d6e8c24db927835ea1692b14c32e9836a75dad609”

--rootPrivateKey

SCP Host private key

--apdu

Display APDU log

Default: False

genCAPair.py

Generate a Custom CA public-private keypair and print it to console.

usage: python -m ledgerblue.genCAPair [-h]

hashApp.py

Calculate an application hash from the application’s hex file.

usage: python -m ledgerblue.hashApp [-h] --hex HEX [--targetId TARGETID]
                                    [--targetVersion TARGETVERSION]

Named Arguments

--hex

The application hex file to be hashed

--targetId

The device’s target ID (default is Ledger Blue)

--targetVersion

Set the chip target version

hostOnboard.py

Warning

Using this script undermines the security of the device. Caveat emptor.

usage: python -m ledgerblue.hostOnboard [-h] [--apdu] --id {0,1,2} [--pin PIN]
                                        [--prefix PREFIX]
                                        [--passphrase PASSPHRASE]
                                        [--words WORDS]

Named Arguments

--apdu

Display APDU log

Default: False

--id

Possible choices: 0, 1, 2

Identity to initialize

--pin

Set a PINs to backup the seed for future use

--prefix

Derivation prefix

--passphrase

Derivation passphrase

--words

Derivation phrase

listApps.py

List all apps on the device.

usage: python -m ledgerblue.listApps [-h] [--targetId TARGETID]
                                     [--rootPrivateKey ROOTPRIVATEKEY]
                                     [--apdu] [--deployLegacy] [--scp]

Named Arguments

--targetId

The device’s target ID (default is Ledger Blue)

Default: 822083586

--rootPrivateKey

The Signer private key used to establish a Secure Channel (otherwise, a random one will be generated)

--apdu

Display APDU log

Default: False

--deployLegacy

Use legacy deployment API

Default: False

--scp

Use a secure channel to list applications

Default: False

loadApp.py

Load an app onto the device from a hex file.

usage: python -m ledgerblue.loadApp [-h] [--targetId TARGETID]
                                    [--targetVersion TARGETVERSION]
                                    [--apiLevel APILEVEL] --fileName FILENAME
                                    [--icon ICON] [--curve CURVE]
                                    [--path PATH] [--path_slip21 PATH_SLIP21]
                                    --appName APPNAME [--signature SIGNATURE]
                                    [--signApp] [--appFlags APPFLAGS]
                                    [--bootAddr BOOTADDR]
                                    [--rootPrivateKey ROOTPRIVATEKEY]
                                    [--signPrivateKey SIGNPRIVATEKEY] [--apdu]
                                    [--deployLegacy] [--delete] [--params]
                                    [--tlv] [--dataSize DATASIZE]
                                    [--appVersion APPVERSION]
                                    [--offline OFFLINE] [--offlineText]
                                    [--installparamsSize INSTALLPARAMSSIZE]
                                    [--tlvraw TLVRAW] [--dep DEP] [--nocrc]

Named Arguments

--targetId

The device’s target ID (default is Ledger Blue)

Default: 822083586

--targetVersion

Set the chip target version

--apiLevel

Set the API level of the SDK used to build the app

Default: -1

--fileName

The application hex file to be loaded onto the device

--icon

The icon content to use (hex encoded)

--curve

A curve on which BIP 32 derivation is locked (“secp256k1”, “secp256r1”, “ed25519” or “bls12381g1”), can be repeated

--path

A BIP 32 path to which derivation is locked (format decimal a’/b’/c), can be repeated

--path_slip21

A SLIP 21 path to which derivation is locked

--appName

The name to give the application after loading it

--signature

A signature of the application (hex encoded)

--signApp

Sign application with provided signPrivateKey

Default: False

--appFlags

The application flags

Default: 0

--bootAddr

The application’s boot address

--rootPrivateKey

The Signer private key used to establish a Secure Channel (otherwise a random one will be generated)

--signPrivateKey

Set the private key used to sign the loaded app

--apdu

Display APDU log

Default: False

--deployLegacy

Use legacy deployment API

Default: False

--delete

Delete the app with the same name before loading the provided one

Default: False

--params

Store icon and install parameters in a parameter section before the code

Default: False

--tlv

Use install parameters for all variable length parameters

Default: False

--dataSize

The code section’s size in the provided hex file (to separate data from code, if not provided the whole allocated NVRAM section for the application will remain readonly.

--appVersion

The application version (as a string)

--offline

Request to only output application load APDUs into given filename

--offlineText

Request to only output application load APDUs into given filename in text mode

Default: False

--installparamsSize

The loaded install parameters section size (when parameters are already included within the .hex file.

--tlvraw

Add a custom install param with the hextag:hexvalue encoding

--dep

Add a dependency over an appname[:appversion]

--nocrc

Skip CRC generation when loading

Default: False

loadMCU.py

Load the firmware onto the MCU. The MCU must already be in bootloader mode.

usage: python -m ledgerblue.loadMCU [-h] --targetId TARGETID --fileName
                                    FILENAME [--bootAddr BOOTADDR] [--apdu]
                                    [--reverse] [--nocrc]

Named Arguments

--targetId

The device’s target ID

--fileName

The name of the firmware file to load

--bootAddr

The firmware’s boot address

--apdu

Display APDU log

Default: False

--reverse

Load HEX file in reverse from the highest address to the lowest

Default: False

--nocrc

Load HEX file without checking CRC of loaded sections

Default: False

mcuBootloader.py

Request the MCU to execute its bootloader.

usage: python -m ledgerblue.mcuBootloader [-h] [--targetId TARGETID]
                                          [--rootPrivateKey ROOTPRIVATEKEY]
                                          [--apdu]

Named Arguments

--targetId

The device’s target ID (default is Ledger Blue)

Default: 822083586

--rootPrivateKey

The Signer private key used to establish a Secure Channel (otherwise a random one will be generated)

--apdu

Display APDU log

Default: False

resetCustomCA.py

Remove all Custom CA public keys previously enrolled onto the device.

usage: python -m ledgerblue.resetCustomCA [-h] [--targetId TARGETID] [--apdu]
                                          [--rootPrivateKey ROOTPRIVATEKEY]

Named Arguments

--targetId

The device’s target ID (default is Ledger Blue)

Default: 822083586

--apdu

Display APDU log

Default: False

--rootPrivateKey

The Signer private key used to establish a Secure Channel (otherwise a random one will be generated)

runApp.py

usage: python -m ledgerblue.runApp [-h] [--targetId TARGETID] [--apdu]
                                   [--rootPrivateKey ROOTPRIVATEKEY] --appName
                                   APPNAME

Named Arguments

--targetId

The device’s target ID (default is Ledger Blue)

Default: 822083586

--apdu

Display APDU log

Default: False

--rootPrivateKey

The Signer private key used to establish a Secure Channel (otherwise a random one will be generated)

--appName

The name of the application to run

runScript.py

Read a sequence of command APDUs from a file and send them to the device. The file must be formatted as hex, with one CAPDU per line.

usage: python -m ledgerblue.runScript [-h] [--fileName FILENAME] [--apdu]
                                      [--scp] [--targetId TARGETID]
                                      [--elfFile ELFFILE]
                                      [--rootPrivateKey ROOTPRIVATEKEY]

Named Arguments

--fileName

The name of the APDU script to load

--apdu

Display APDU log

Default: False

--scp

Open a Secure Channel to exchange APDU

Default: False

--targetId

The device’s target ID (default is Ledger Nano S). If –elfFile is used, the targetId from the ELF file will be used instead.

Default: 823132162

--elfFile

ELF file from which the target ID is fetched. Overrides ‘–targetId’

--rootPrivateKey

The Signer private key used to establish a Secure Channel (otherwise a random one will be generated)

setupCustomCA.py

Enroll a Custom CA public key onto the device.

usage: python -m ledgerblue.setupCustomCA [-h] [--targetId TARGETID] [--apdu]
                                          [--rootPrivateKey ROOTPRIVATEKEY]
                                          --public PUBLIC --name NAME

Named Arguments

--targetId

The device’s target ID (default is Ledger Blue)

Default: 822083586

--apdu

Display APDU log

Default: False

--rootPrivateKey

The Signer private key used to establish a Secure Channel (otherwise a random one will be generated)

--public

The Custom CA public key to be enrolled (hex encoded)

--name

The name to assign to the Custom CA (this will be displayed on screen upon auth requests)

signApp.py

See loadApp, and its –signApp flag.

updateFirmware.py

usage: python -m ledgerblue.updateFirmware [-h] [--url URL]
                                           [--bypass-ssl-check] [--apdu]
                                           [--perso PERSO] --firmware FIRMWARE
                                           [--targetId TARGETID] --firmwareKey
                                           FIRMWAREKEY

Named Arguments

--url

Server URL

Default: “https://hsmprod.hardwarewallet.com/hsm/process

--bypass-ssl-check

Keep going even if remote certificate verification fails

Default: False

--apdu

Display APDU log

Default: False

--perso

A reference to the personalization key; this is a reference to the specific Issuer keypair used by Ledger to sign the device’s Issuer Certificate

Default: “perso_11”

--firmware

A reference to the firmware to load

--targetId

The device’s target ID (default is Ledger Blue)

Default: 822083586

--firmwareKey

A reference to the firmware key to use

verifyApp.py

usage: python -m ledgerblue.verifyApp [-h] --hex HEX --key KEY --signature
                                      SIGNATURE

Named Arguments

--hex

The hex file of the signed application

--key

The Custom CA public key with which to verify the signature (hex encoded)

--signature

The signature to be verified (hex encoded)

verifyEndorsement1.py

Verify a message signature created with Endorsement Scheme #1.

usage: python -m ledgerblue.verifyEndorsement1 [-h] --key KEY --codehash
                                               CODEHASH --message MESSAGE
                                               --signature SIGNATURE

Named Arguments

--key

The endorsement public key with which to verify the signature (hex encoded)

--codehash

The hash of the app associated with the endorsement request (hex encoded)

--message

The message associated to the endorsement request (hex encoded)

--signature

The signature to be verified (hex encoded)

verifyEndorsement2.py

Verify a message signature created with Endorsement Scheme #2.

usage: python -m ledgerblue.verifyEndorsement2 [-h] --key KEY --codehash
                                               CODEHASH --message MESSAGE
                                               --signature SIGNATURE

Named Arguments

--key

The endorsement public key with which to verify the signature (hex encoded)

--codehash

The hash of the app associated with the endorsement request (hex encoded)

--message

The message associated to the endorsement request (hex encoded)

--signature

The signature to be verified (hex encoded)