Skip to main content

APDUs for Humans

Project description

apduboy

APDUs for Humans ™️

apduboy provides a collection of Pythonic stubs that generate APDUs to communicate with the Ledger Nano S/X hardware wallet.

Installing

pip install apduboy

Examples

Retrieve Ethereum addresses

from ledgerwallet.client import LedgerClient
from ledgerwallet.transport import enumerate_devices

from apduboy.ethereum import GetEthPublicAddressOpts, get_eth_public_address
from apduboy.lib.bip32 import h, m

client = LedgerClient(enumerate_devices()[0])
opts = GetEthPublicAddressOpts(display_address=False, return_chain_code=False)

for index in range(5):
    path = m / h(44) / h(60) / h(index) / 0 / 0
    cmd = get_eth_public_address(path=path, opts=opts)
    response = cmd(client)
    print(f"Address at path {path} => 0x{response.address}")

Retrieve Bitcoin addresses

from ledgerwallet.client import LedgerClient
from ledgerwallet.transport import enumerate_devices

from apduboy.bitcoin import GetWalletPublicKeyOpts, get_wallet_public_key
from apduboy.lib.bip32 import h, m

client = LedgerClient(enumerate_devices()[0])

path = m / h(84) / h(1) / h(7) / 0 / 1234
opts = GetWalletPublicKeyOpts(display_address=False, scheme=None)
cmd = get_wallet_public_key(path=path, opts=opts)
response = cmd(client)
print(f"Address at path {path} => {response.address}")

Generate a cryptographically secure random number

from ledgerwallet.client import LedgerClient
from ledgerwallet.transport import enumerate_devices

from apduboy.bitcoin import get_random

client = LedgerClient(enumerate_devices()[0])

cmd = get_random()
response = cmd(client)
print(f"True Random Number (hex): {response.hex()}")

Sign Ethereum Transaction

from apduboy.ethereum import Ether, GWei, Transaction, sign_transaction
from apduboy.lib.bip32 import h, m

path = m / h(44) / h(60) / h(777) / 0 / 0
tx = Transaction(
    nonce=0,
    gas_price=50 * GWei,
    gas=21000,
    data=b"",
    to=bytes.fromhex("004ec07d2329997267ec62b4166639513386f32e"),
    value=32 * Ether,
)

cmd = sign_transaction(path=path, tx=tx)
response = cmd(device)  # device can be anything that provides an APDU exchange.

apduboy is currently in alpha. Please do NOT use this for signing real transactions.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

apduboy-0.5.0-py3-none-any.whl (6.5 kB view details)

Uploaded Python 3

File details

Details for the file apduboy-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: apduboy-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 6.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for apduboy-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2f2f8b88b1ad051d0dd40d3921dc92e8534ec6250766c2b35d9038905fec94ac
MD5 d630c4fc90f16dba0acd8026a038e46a
BLAKE2b-256 a15e915b6f233745a978cae13481c7da2a99eae8a48d191bd2bb44ff18413d1f

See more details on using hashes here.

Supported by

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