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 hashes)

Uploaded Python 3

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