Skip to main content

LedgerCOMM

Overview

Python library to send and receive APDU through HID or TCP socket. It can be used with a Ledger Nano S/X or with the Speculos emulator.

Install

If you just want to communicate through TCP socket, there is no dependency

$ pip install ledgercomm

otherwise, hidapi must be installed as an extra dependency like this

$ pip install ledgercomm[hid]

Getting started

Library

from ledgercomm import Transport

# Nano S/X using HID interface
transport = Transport(interface="hid", debug=True)
# or Speculos through TCP socket
transport = Transport(interface="tcp", server="127.0.0.1", port=9999, debug=True)

#
# send/recv APDUs
#

# send method for structured APDUs
transport.send(cla=0xe0, ins=0x03, p1=0, p2=0, cdata=b"")  # send b"\xe0\x03\x00\x00\x00"
# or send_raw method for hexadecimal string
transport.send_raw("E003000000")  # send b"\xe0\x03\x00\x00\x00"
# or with bytes type
transport.send_raw(b"\xe0\x03\x00\x00\x00")

# Waiting for a response (blocking IO)
sw, response = transport.recv()  # type: int, bytes

#
# exchange APDUs (one time send/recv)
#

# exchange method for structured APDUs
sw, response = transport.exchange(cla=0xe0, ins=0x03, p1=0, p2=0, cdata=b"")  # send b"\xe0\x03\x00\x00\x00"
# or exchange_raw method for hexadecimal string
sw, reponse = transport.exchange_raw("E003000000")  # send b"\xe0\x03\x00\x00\x00"
# or with bytes type
sw, response = transport.exchange_raw(b"\xe0\x03\x00\x00\x00")

CLI

Usage

When installed, ledgercomm provides a CLI tool named ledgercomm-send

$ ledgercomm-send --help
usage: ledgercomm-send [-h] [--hid] [--server SERVER] [--port PORT] [--startswith STARTSWITH]
                       {file,stdin,log} ...

positional arguments:
  {file,stdin,log}      sub-command help
    file                send APDUs from file
    stdin               send APDUs from stdin
    log                 send APDUs from Ledger Live log file

optional arguments:
  -h, --help            show this help message and exit
  --hid                 Use HID instead of TCP client
  --server SERVER       IP server of the TCP client (default: 127.0.0.1)
  --port PORT           Port of the TCP client (default: 9999)
  --startswith STARTSWITH
                        Only send APDUs starting with STARTSWITH (default: None)

Example

If Speculos is launched with default parameters or your Nano S/X is plugged with correct udev rules, you can send APDUs from stdin

$ echo "E003000000" | ledgercomm-send stdin  # Speculos
$ echo "E003000000" | ledgercomm-send --hid stdin  # Nano S/X

Or you can replay APDUs using the following text file named apdus.txt with some condition

# this line won't be send if you've the right STARTSWITH condition
=> E003000000
# another APDU to send
=> E004000000

then

$ ledgercomm-send --startswith "=>" file apdus.txt

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ledgercomm-1.1.2.tar.gz (9.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ledgercomm-1.1.2-py3-none-any.whl (11.0 kB view details)

Uploaded Python 3

File details

Details for the file ledgercomm-1.1.2.tar.gz.

File metadata

  • Download URL: ledgercomm-1.1.2.tar.gz
  • Upload date:
  • Size: 9.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.14

File hashes

Hashes for ledgercomm-1.1.2.tar.gz
Algorithm Hash digest
SHA256 8b338f6f0bfedf85eaf26a6af7e41120685dfb3e2956718948c9d83a4b5155bb
MD5 ab65ff0c0ac3784621d4e5436dca8a73
BLAKE2b-256 18b8cf90ce9e54d089b372198c3705ab008afdbfcf61f5a5b4d4bc5be39bf3ee

See more details on using hashes here.

File details

Details for the file ledgercomm-1.1.2-py3-none-any.whl.

File metadata

  • Download URL: ledgercomm-1.1.2-py3-none-any.whl
  • Upload date:
  • Size: 11.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.14

File hashes

Hashes for ledgercomm-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e3a39198b7c01135d7bdb049948ac41ce22cd8d39ddf6fbfc236a228d560a0ce
MD5 e5c0bcb15ff8d15c0a7b7cfdb2b19b9e
BLAKE2b-256 b4e75b64813ce616c586477d7212b48fde397445b532b6e1d64e2b17811148a5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page