// Copyright 2019 Shift Cryptosecurity AG // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; package shiftcrypto.bitbox02; import "common.proto"; import "antiklepto.proto"; // Kept for backwards compatibility. Use chain_id instead, introduced in v9.10.0. enum ETHCoin { ETH = 0; // Removed in v9.14.0 - deprecated RopstenETH = 1; // Removed in v9.14.0 - deprecated RinkebyETH = 2; } enum ETHAddressCase { ETH_ADDRESS_CASE_MIXED = 0; ETH_ADDRESS_CASE_UPPER = 1; ETH_ADDRESS_CASE_LOWER = 2; } message ETHPubRequest { repeated uint32 keypath = 1; // Deprecated: use chain_id instead. ETHCoin coin = 2; enum OutputType { ADDRESS = 0; XPUB = 1; } OutputType output_type = 3; bool display = 4; bytes contract_address = 5; // If non-zero, `coin` is ignored and `chain_id` is used to identify the network. uint64 chain_id = 6; } // TX payload for "legacy" (EIP-155) transactions: https://eips.ethereum.org/EIPS/eip-155 message ETHSignRequest { // Deprecated: use chain_id instead. ETHCoin coin = 1; repeated uint32 keypath = 2; bytes nonce = 3; // smallest big endian serialization, max. 16 bytes bytes gas_price = 4; // smallest big endian serialization, max. 16 bytes bytes gas_limit = 5; // smallest big endian serialization, max. 16 bytes bytes recipient = 6; // 20 byte recipient bytes value = 7; // smallest big endian serialization, max. 32 bytes bytes data = 8; AntiKleptoHostNonceCommitment host_nonce_commitment = 9; // If non-zero, `coin` is ignored and `chain_id` is used to identify the network. uint64 chain_id = 10; ETHAddressCase address_case = 11; } // TX payload for an EIP-1559 (type 2) transaction: https://eips.ethereum.org/EIPS/eip-1559 message ETHSignEIP1559Request { uint64 chain_id = 1; repeated uint32 keypath = 2; bytes nonce = 3; // smallest big endian serialization, max. 16 bytes bytes max_priority_fee_per_gas = 4; // smallest big endian serialization, max. 16 bytes bytes max_fee_per_gas = 5; // smallest big endian serialization, max. 16 bytes bytes gas_limit = 6; // smallest big endian serialization, max. 16 bytes bytes recipient = 7; // 20 byte recipient bytes value = 8; // smallest big endian serialization, max. 32 bytes bytes data = 9; AntiKleptoHostNonceCommitment host_nonce_commitment = 10; ETHAddressCase address_case = 11; } message ETHSignMessageRequest { // Deprecated: use chain_id instead. ETHCoin coin = 1; repeated uint32 keypath = 2; bytes msg = 3; AntiKleptoHostNonceCommitment host_nonce_commitment = 4; // If non-zero, `coin` is ignored and `chain_id` is used to identify the network. uint64 chain_id = 5; } message ETHSignResponse { bytes signature = 1; // 65 bytes, last byte is the recid } message ETHSignTypedMessageRequest { enum DataType { UNKNOWN = 0; BYTES = 1; UINT = 2; INT = 3; BOOL = 4; ADDRESS = 5; STRING = 6; ARRAY = 7; STRUCT = 8; } message MemberType { DataType type = 1; uint32 size = 2; string struct_name = 3; // if type==STRUCT, name of struct type. MemberType array_type = 4; // if type==ARRAY, type of elements } message Member { string name = 1; MemberType type = 2; } message StructType { string name = 1; repeated Member members = 2; } uint64 chain_id = 1; repeated uint32 keypath = 2; repeated StructType types = 3; string primary_type = 4; AntiKleptoHostNonceCommitment host_nonce_commitment = 5; } message ETHTypedMessageValueResponse { enum RootObject { UNKNOWN = 0; DOMAIN = 1; MESSAGE = 2; } RootObject root_object = 1; repeated uint32 path = 2; } message ETHTypedMessageValueRequest { bytes value = 1; } message ETHRequest { oneof request { ETHPubRequest pub = 1; ETHSignRequest sign = 2; ETHSignMessageRequest sign_msg = 3; AntiKleptoSignatureRequest antiklepto_signature = 4; ETHSignTypedMessageRequest sign_typed_msg = 5; ETHTypedMessageValueRequest typed_msg_value = 6; ETHSignEIP1559Request sign_eip1559 = 7; } } message ETHResponse { oneof response { PubResponse pub = 1; ETHSignResponse sign = 2; AntiKleptoSignerCommitment antiklepto_signer_commitment = 3; ETHTypedMessageValueResponse typed_msg_value = 4; } }