@@ -3,17 +3,17 @@ Ethereum application : Common Technical Specifications
|
||||
Ledger Firmware Team <hello@ledger.fr>
|
||||
Application version 1.2 - 19th of August 2017
|
||||
|
||||
== 1.0
|
||||
## 1.0
|
||||
- Initial release
|
||||
|
||||
== 1.1
|
||||
## 1.1
|
||||
- Add GET APP CONFIGURATION
|
||||
- Add an option to return the chain code in GET ETH PUBLIC ADDRESS
|
||||
|
||||
== 1.2
|
||||
## 1.2
|
||||
- Add SIGN ETH PERSONAL MESSAGE
|
||||
|
||||
== About
|
||||
## About
|
||||
|
||||
This application describes the APDU messages interface to communicate with the Ethereum application.
|
||||
|
||||
@@ -25,17 +25,17 @@ The application covers the following functionalities :
|
||||
|
||||
The application interface can be accessed over HID or BLE
|
||||
|
||||
== General purpose APDUs
|
||||
## General purpose APDUs
|
||||
|
||||
=== GET ETH PUBLIC ADDRESS
|
||||
### GET ETH PUBLIC ADDRESS
|
||||
|
||||
==== Description
|
||||
#### Description
|
||||
|
||||
This command returns the public key and Ethereum address for the given BIP 32 path.
|
||||
|
||||
The address can be optionally checked on the device before being returned.
|
||||
|
||||
==== Coding
|
||||
#### Coding
|
||||
|
||||
'Command'
|
||||
|
||||
@@ -74,9 +74,9 @@ The address can be optionally checked on the device before being returned.
|
||||
|==============================================================================================================================
|
||||
|
||||
|
||||
=== SIGN ETH TRANSACTION
|
||||
### SIGN ETH TRANSACTION
|
||||
|
||||
==== Description
|
||||
#### Description
|
||||
|
||||
This command signs an Ethereum transaction after having the user validate the following parameters
|
||||
|
||||
@@ -87,7 +87,7 @@ This command signs an Ethereum transaction after having the user validate the fo
|
||||
|
||||
The input data is the RLP encoded transaction (as per https://github.com/ethereum/pyethereum/blob/develop/ethereum/transactions.py#L22), without v/r/s present, streamed to the device in 255 bytes maximum data chunks.
|
||||
|
||||
==== Coding
|
||||
#### Coding
|
||||
|
||||
'Command'
|
||||
|
||||
@@ -129,11 +129,13 @@ The input data is the RLP encoded transaction (as per https://github.com/ethereu
|
||||
| v | 1
|
||||
| r | 32
|
||||
| s | 32
|
||||
|======================================================================================================
|
||||
|==============================================================================================================================
|
||||
|
||||
=== SIGN ETH PERSONAL MESSAGE
|
||||
|
||||
==== Description
|
||||
|
||||
### SIGN ETH PERSONAL MESSAGE
|
||||
|
||||
#### Description
|
||||
|
||||
This command signs an Ethereum message following the personal_sign specification (https://github.com/ethereum/go-ethereum/pull/2940) after having the user validate the SHA-256 hash of the message being signed.
|
||||
|
||||
@@ -141,7 +143,7 @@ This command has been supported since firmware version 1.0.8
|
||||
|
||||
The input data is the message to sign, streamed to the device in 255 bytes maximum data chunks
|
||||
|
||||
==== Coding
|
||||
#### Coding
|
||||
|
||||
'Command'
|
||||
|
||||
@@ -151,7 +153,7 @@ The input data is the message to sign, streamed to the device in 255 bytes maxim
|
||||
| E0 | 08 | 00 : first message data block
|
||||
|
||||
80 : subsequent message data block
|
||||
| 00 | variable | variable
|
||||
| 00 | variable | variable
|
||||
|==============================================================================================================================
|
||||
|
||||
'Input data (first message data block)'
|
||||
@@ -183,23 +185,23 @@ The input data is the message to sign, streamed to the device in 255 bytes maxim
|
||||
| v | 1
|
||||
| r | 32
|
||||
| s | 32
|
||||
|======================================================================================================
|
||||
|==============================================================================================================================
|
||||
|
||||
|
||||
=== GET APP CONFIGURATION
|
||||
### GET APP CONFIGURATION
|
||||
|
||||
==== Description
|
||||
#### Description
|
||||
|
||||
This command returns specific application configuration
|
||||
|
||||
==== Coding
|
||||
#### Coding
|
||||
|
||||
'Command'
|
||||
|
||||
[width="80%"]
|
||||
|==============================================================================================================================
|
||||
| *CLA* | *INS* | *P1* | *P2* | *Lc* | *Le*
|
||||
| E0 | 06 | 00 | 00 | 00 | 04
|
||||
| E0 | 06 | 00 | 00 | 00 | 04
|
||||
|==============================================================================================================================
|
||||
|
||||
'Input data'
|
||||
@@ -212,9 +214,7 @@ None
|
||||
|==============================================================================================================================
|
||||
| *Description* | *Length*
|
||||
| Flags
|
||||
|
||||
0x01 : arbitrary data signature enabled by user
|
||||
|
||||
| 01
|
||||
| Application major version | 01
|
||||
| Application minor version | 01
|
||||
@@ -222,9 +222,9 @@ None
|
||||
|==============================================================================================================================
|
||||
|
||||
|
||||
== Transport protocol
|
||||
## Transport protocol
|
||||
|
||||
=== General transport description
|
||||
### General transport description
|
||||
|
||||
Ledger APDUs requests and responses are encapsulated using a flexible protocol allowing to fragment large payloads over different underlying transport mechanisms.
|
||||
|
||||
@@ -245,7 +245,7 @@ The Command tag describes the message content. Use TAG_APDU (0x05) for standard
|
||||
|
||||
The Packet sequence index describes the current sequence for fragmented payloads. The first fragment index is 0x00.
|
||||
|
||||
=== APDU Command payload encoding
|
||||
### APDU Command payload encoding
|
||||
|
||||
APDU Command payloads are encoded as follows :
|
||||
|
||||
@@ -272,7 +272,7 @@ APDU payload is encoded according to the APDU case
|
||||
| 4 | !0 | !0 | Both Input and Output Data are present - L is set to Lc
|
||||
|=======================================================================================
|
||||
|
||||
=== APDU Response payload encoding
|
||||
### APDU Response payload encoding
|
||||
|
||||
APDU Response payloads are encoded as follows :
|
||||
|
||||
@@ -283,11 +283,11 @@ APDU Response payloads are encoded as follows :
|
||||
| APDU response data and Status Word | var
|
||||
|==============================================================================================================================
|
||||
|
||||
=== USB mapping
|
||||
### USB mapping
|
||||
|
||||
Messages are exchanged with the dongle over HID endpoints over interrupt transfers, with each chunk being 64 bytes long. The HID Report ID is ignored.
|
||||
|
||||
=== BLE mapping
|
||||
### BLE mapping
|
||||
|
||||
A similar encoding is used over BLE, without the Communication channel ID.
|
||||
|
||||
@@ -297,7 +297,7 @@ When using this service, the client sends requests to the characteristic D973F2E
|
||||
|
||||
Requests are encoded using the standard BLE 20 bytes MTU size
|
||||
|
||||
== Status Words
|
||||
## Status Words
|
||||
|
||||
The following standard Status Words are returned for all APDUs - some specific Status Words can be used for specific commands and are mentioned in the command description.
|
||||
|
||||
@@ -312,4 +312,4 @@ The following standard Status Words are returned for all APDUs - some specific S
|
||||
| 6B00 | Incorrect parameter P1 or P2
|
||||
| 6Fxx | Technical problem (Internal error, please report)
|
||||
| 9000 | Normal ending of the command
|
||||
|================================================================================================
|
||||
|===============================================================================================
|
||||
|
||||
Reference in New Issue
Block a user