#ledger #ledger-nano #apdu #cryptocurrency

coins-ledger

Ledger Nano X/S connection and communication management library

19 releases

0.10.1 Feb 1, 2024
0.9.3 Jan 30, 2024
0.9.2 Dec 2, 2023
0.9.1 Nov 27, 2023
0.1.0 Jan 4, 2021

#839 in Magic Beans

Download history 2539/week @ 2023-12-23 3228/week @ 2023-12-30 3907/week @ 2024-01-06 5300/week @ 2024-01-13 6150/week @ 2024-01-20 8418/week @ 2024-01-27 9046/week @ 2024-02-03 7345/week @ 2024-02-10 5692/week @ 2024-02-17 5041/week @ 2024-02-24 5986/week @ 2024-03-02 7110/week @ 2024-03-09 6885/week @ 2024-03-16 6520/week @ 2024-03-23 6653/week @ 2024-03-30 4645/week @ 2024-04-06

26,487 downloads per month
Used in 3 crates (2 directly)

MIT/Apache

73KB
792 lines

coins-ledger

Communication library between Rust and Ledger Nano S/X devices

Building

Windows is not yet supported.

Native

  • Install dependencies
    • OSX
      • TODO
      • please file an issue if you know. I don't have a macbook :)
  • Build with native transport
    • cargo build

WASM

  • Install wasm-pack
  • MUST pass --disable-default-features
  • MUST select feature AT MOST ONE of browser and node
  • Build with node WASM bindings to @ledgerhq/hw-transport-node-hid
    • wasm-pack build --scope summa-tx --target nodejs -- --features=node --no-default-features
    • Runtime environment MUST be able to import @ledgerhq/hw-transport-node-hid
  • Build with browser WASM bindings to @ledgerhq/hw-transport-u2f
    • wasm-pack build --scope summa-tx --target bundler -- --features=broswer --no-default-features
    • Runtime environment MUST be able to import @ledgerhq/hw-transport-u2f

Features

The node and browser features are mutually exclusive. You must specify exactly one, as well as the --no-default-features flag.

When building for non-wasm architectures, a native HID transport is compiled in. When building wasm via wasm-pack, you must specify whether you want the node or browser wasm transport.

Testing

  • run the unit tests
    • $ cargo test -- --lib
  • run the integration tests
    • Plug in a Ledger Nano S or X device
    • Unlock the device
    • Open the Ethereum application on the device
    • $ cargo test

License Notes

This repo was forked from Zondax's repo at commit 7d40af96. Their code is reproduced here under the terms of the Apache 2 License. Files containing elements from their code maintain their original Apache 2 license notice at the bottom of the file.

Further work by Summa is available under the GNU LGPLv3 license.

These changes are as follows:

  • Remove bip44 crates
  • Significant refactoring to all other crates
  • Crates have been moved to be modules of a single crate
  • Refactor APDUErrorCodes
  • Refactor APDUCommand to move towards no_std support. They hold &'a [u8] instead of vectors
  • Refactor APDUAnswer to move towards no_std support and avoid unnecessary copies. It is now a thin wrapper around a &[u8]
  • Change exchange functions to accept a mutable buffer. The caller must allocate space for the response packet
  • wasm_bindgen bindings for JS ledger transports
  • Conditional compilation based abstraction of transport type
    • Native HID if not wasm32
    • Feature flags for browser or node if wasm32
  • Break out integration tests
  • Strip print logs

Dependencies

~0.3–4MB
~74K SLoC