From 1f1c3bf35fe8d3777943de1e6fb959357c2015e4 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Thu, 28 Sep 2017 13:16:15 +0200 Subject: [PATCH] firmware/protob: remove generated stuff --- firmware/protob/messages.pb.c | 450 ------------ firmware/protob/messages.pb.h | 1227 ------------------------------ firmware/protob/messages_map.h | 90 --- firmware/protob/pb.h | 520 +------------ firmware/protob/pb_decode.c | 1268 +------------------------------- firmware/protob/pb_decode.h | 150 +--- firmware/protob/pb_encode.c | 668 +---------------- firmware/protob/pb_encode.h | 155 +--- firmware/protob/storage.pb.c | 42 -- firmware/protob/storage.pb.h | 79 -- firmware/protob/types.pb.c | 213 ------ firmware/protob/types.pb.h | 422 ----------- 12 files changed, 5 insertions(+), 5279 deletions(-) delete mode 100644 firmware/protob/messages.pb.c delete mode 100644 firmware/protob/messages.pb.h delete mode 100644 firmware/protob/messages_map.h mode change 100644 => 120000 firmware/protob/pb.h mode change 100644 => 120000 firmware/protob/pb_decode.c mode change 100644 => 120000 firmware/protob/pb_decode.h mode change 100644 => 120000 firmware/protob/pb_encode.c mode change 100644 => 120000 firmware/protob/pb_encode.h delete mode 100644 firmware/protob/storage.pb.c delete mode 100644 firmware/protob/storage.pb.h delete mode 100644 firmware/protob/types.pb.c delete mode 100644 firmware/protob/types.pb.h diff --git a/firmware/protob/messages.pb.c b/firmware/protob/messages.pb.c deleted file mode 100644 index 54de2aaa1..000000000 --- a/firmware/protob/messages.pb.c +++ /dev/null @@ -1,450 +0,0 @@ -/* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.2.9.3 */ - -#include "messages.pb.h" - -const char GetPublicKey_coin_name_default[21] = "Bitcoin"; -const char GetAddress_coin_name_default[21] = "Bitcoin"; -const InputScriptType GetAddress_script_type_default = InputScriptType_SPENDADDRESS; -const char LoadDevice_language_default[17] = "english"; -const uint32_t ResetDevice_strength_default = 256u; -const char ResetDevice_language_default[17] = "english"; -const char RecoveryDevice_language_default[17] = "english"; -const char SignMessage_coin_name_default[21] = "Bitcoin"; -const InputScriptType SignMessage_script_type_default = InputScriptType_SPENDADDRESS; -const char VerifyMessage_coin_name_default[21] = "Bitcoin"; -const char SignTx_coin_name_default[21] = "Bitcoin"; -const uint32_t SignTx_version_default = 1u; -const uint32_t SignTx_lock_time_default = 0u; - - -const pb_field_t Initialize_fields[1] = { - PB_LAST_FIELD -}; - -const pb_field_t GetFeatures_fields[1] = { - PB_LAST_FIELD -}; - -const pb_field_t Features_fields[21] = { - PB_FIELD2( 1, STRING , OPTIONAL, STATIC , FIRST, Features, vendor, vendor, 0), - PB_FIELD2( 2, UINT32 , OPTIONAL, STATIC , OTHER, Features, major_version, vendor, 0), - PB_FIELD2( 3, UINT32 , OPTIONAL, STATIC , OTHER, Features, minor_version, major_version, 0), - PB_FIELD2( 4, UINT32 , OPTIONAL, STATIC , OTHER, Features, patch_version, minor_version, 0), - PB_FIELD2( 5, BOOL , OPTIONAL, STATIC , OTHER, Features, bootloader_mode, patch_version, 0), - PB_FIELD2( 6, STRING , OPTIONAL, STATIC , OTHER, Features, device_id, bootloader_mode, 0), - PB_FIELD2( 7, BOOL , OPTIONAL, STATIC , OTHER, Features, pin_protection, device_id, 0), - PB_FIELD2( 8, BOOL , OPTIONAL, STATIC , OTHER, Features, passphrase_protection, pin_protection, 0), - PB_FIELD2( 9, STRING , OPTIONAL, STATIC , OTHER, Features, language, passphrase_protection, 0), - PB_FIELD2( 10, STRING , OPTIONAL, STATIC , OTHER, Features, label, language, 0), - PB_FIELD2( 11, MESSAGE , REPEATED, STATIC , OTHER, Features, coins, label, &CoinType_fields), - PB_FIELD2( 12, BOOL , OPTIONAL, STATIC , OTHER, Features, initialized, coins, 0), - PB_FIELD2( 13, BYTES , OPTIONAL, STATIC , OTHER, Features, revision, initialized, 0), - PB_FIELD2( 14, BYTES , OPTIONAL, STATIC , OTHER, Features, bootloader_hash, revision, 0), - PB_FIELD2( 15, BOOL , OPTIONAL, STATIC , OTHER, Features, imported, bootloader_hash, 0), - PB_FIELD2( 16, BOOL , OPTIONAL, STATIC , OTHER, Features, pin_cached, imported, 0), - PB_FIELD2( 17, BOOL , OPTIONAL, STATIC , OTHER, Features, passphrase_cached, pin_cached, 0), - PB_FIELD2( 18, BOOL , OPTIONAL, STATIC , OTHER, Features, firmware_present, passphrase_cached, 0), - PB_FIELD2( 19, BOOL , OPTIONAL, STATIC , OTHER, Features, needs_backup, firmware_present, 0), - PB_FIELD2( 20, UINT32 , OPTIONAL, STATIC , OTHER, Features, flags, needs_backup, 0), - PB_LAST_FIELD -}; - -const pb_field_t ClearSession_fields[1] = { - PB_LAST_FIELD -}; - -const pb_field_t ApplySettings_fields[5] = { - PB_FIELD2( 1, STRING , OPTIONAL, STATIC , FIRST, ApplySettings, language, language, 0), - PB_FIELD2( 2, STRING , OPTIONAL, STATIC , OTHER, ApplySettings, label, language, 0), - PB_FIELD2( 3, BOOL , OPTIONAL, STATIC , OTHER, ApplySettings, use_passphrase, label, 0), - PB_FIELD2( 4, BYTES , OPTIONAL, STATIC , OTHER, ApplySettings, homescreen, use_passphrase, 0), - PB_LAST_FIELD -}; - -const pb_field_t ApplyFlags_fields[2] = { - PB_FIELD2( 1, UINT32 , OPTIONAL, STATIC , FIRST, ApplyFlags, flags, flags, 0), - PB_LAST_FIELD -}; - -const pb_field_t ChangePin_fields[2] = { - PB_FIELD2( 1, BOOL , OPTIONAL, STATIC , FIRST, ChangePin, remove, remove, 0), - PB_LAST_FIELD -}; - -const pb_field_t Ping_fields[5] = { - PB_FIELD2( 1, STRING , OPTIONAL, STATIC , FIRST, Ping, message, message, 0), - PB_FIELD2( 2, BOOL , OPTIONAL, STATIC , OTHER, Ping, button_protection, message, 0), - PB_FIELD2( 3, BOOL , OPTIONAL, STATIC , OTHER, Ping, pin_protection, button_protection, 0), - PB_FIELD2( 4, BOOL , OPTIONAL, STATIC , OTHER, Ping, passphrase_protection, pin_protection, 0), - PB_LAST_FIELD -}; - -const pb_field_t Success_fields[2] = { - PB_FIELD2( 1, STRING , OPTIONAL, STATIC , FIRST, Success, message, message, 0), - PB_LAST_FIELD -}; - -const pb_field_t Failure_fields[3] = { - PB_FIELD2( 1, ENUM , OPTIONAL, STATIC , FIRST, Failure, code, code, 0), - PB_FIELD2( 2, STRING , OPTIONAL, STATIC , OTHER, Failure, message, code, 0), - PB_LAST_FIELD -}; - -const pb_field_t ButtonRequest_fields[3] = { - PB_FIELD2( 1, ENUM , OPTIONAL, STATIC , FIRST, ButtonRequest, code, code, 0), - PB_FIELD2( 2, STRING , OPTIONAL, STATIC , OTHER, ButtonRequest, data, code, 0), - PB_LAST_FIELD -}; - -const pb_field_t ButtonAck_fields[1] = { - PB_LAST_FIELD -}; - -const pb_field_t PinMatrixRequest_fields[2] = { - PB_FIELD2( 1, ENUM , OPTIONAL, STATIC , FIRST, PinMatrixRequest, type, type, 0), - PB_LAST_FIELD -}; - -const pb_field_t PinMatrixAck_fields[2] = { - PB_FIELD2( 1, STRING , REQUIRED, STATIC , FIRST, PinMatrixAck, pin, pin, 0), - PB_LAST_FIELD -}; - -const pb_field_t Cancel_fields[1] = { - PB_LAST_FIELD -}; - -const pb_field_t PassphraseRequest_fields[1] = { - PB_LAST_FIELD -}; - -const pb_field_t PassphraseAck_fields[2] = { - PB_FIELD2( 1, STRING , REQUIRED, STATIC , FIRST, PassphraseAck, passphrase, passphrase, 0), - PB_LAST_FIELD -}; - -const pb_field_t GetEntropy_fields[2] = { - PB_FIELD2( 1, UINT32 , REQUIRED, STATIC , FIRST, GetEntropy, size, size, 0), - PB_LAST_FIELD -}; - -const pb_field_t Entropy_fields[2] = { - PB_FIELD2( 1, BYTES , REQUIRED, STATIC , FIRST, Entropy, entropy, entropy, 0), - PB_LAST_FIELD -}; - -const pb_field_t GetPublicKey_fields[5] = { - PB_FIELD2( 1, UINT32 , REPEATED, STATIC , FIRST, GetPublicKey, address_n, address_n, 0), - PB_FIELD2( 2, STRING , OPTIONAL, STATIC , OTHER, GetPublicKey, ecdsa_curve_name, address_n, 0), - PB_FIELD2( 3, BOOL , OPTIONAL, STATIC , OTHER, GetPublicKey, show_display, ecdsa_curve_name, 0), - PB_FIELD2( 4, STRING , OPTIONAL, STATIC , OTHER, GetPublicKey, coin_name, show_display, &GetPublicKey_coin_name_default), - PB_LAST_FIELD -}; - -const pb_field_t PublicKey_fields[3] = { - PB_FIELD2( 1, MESSAGE , REQUIRED, STATIC , FIRST, PublicKey, node, node, &HDNodeType_fields), - PB_FIELD2( 2, STRING , OPTIONAL, STATIC , OTHER, PublicKey, xpub, node, 0), - PB_LAST_FIELD -}; - -const pb_field_t GetAddress_fields[6] = { - PB_FIELD2( 1, UINT32 , REPEATED, STATIC , FIRST, GetAddress, address_n, address_n, 0), - PB_FIELD2( 2, STRING , OPTIONAL, STATIC , OTHER, GetAddress, coin_name, address_n, &GetAddress_coin_name_default), - PB_FIELD2( 3, BOOL , OPTIONAL, STATIC , OTHER, GetAddress, show_display, coin_name, 0), - PB_FIELD2( 4, MESSAGE , OPTIONAL, STATIC , OTHER, GetAddress, multisig, show_display, &MultisigRedeemScriptType_fields), - PB_FIELD2( 5, ENUM , OPTIONAL, STATIC , OTHER, GetAddress, script_type, multisig, &GetAddress_script_type_default), - PB_LAST_FIELD -}; - -const pb_field_t EthereumGetAddress_fields[3] = { - PB_FIELD2( 1, UINT32 , REPEATED, STATIC , FIRST, EthereumGetAddress, address_n, address_n, 0), - PB_FIELD2( 2, BOOL , OPTIONAL, STATIC , OTHER, EthereumGetAddress, show_display, address_n, 0), - PB_LAST_FIELD -}; - -const pb_field_t Address_fields[2] = { - PB_FIELD2( 1, STRING , REQUIRED, STATIC , FIRST, Address, address, address, 0), - PB_LAST_FIELD -}; - -const pb_field_t EthereumAddress_fields[2] = { - PB_FIELD2( 1, BYTES , REQUIRED, STATIC , FIRST, EthereumAddress, address, address, 0), - PB_LAST_FIELD -}; - -const pb_field_t WipeDevice_fields[1] = { - PB_LAST_FIELD -}; - -const pb_field_t LoadDevice_fields[9] = { - PB_FIELD2( 1, STRING , OPTIONAL, STATIC , FIRST, LoadDevice, mnemonic, mnemonic, 0), - PB_FIELD2( 2, MESSAGE , OPTIONAL, STATIC , OTHER, LoadDevice, node, mnemonic, &HDNodeType_fields), - PB_FIELD2( 3, STRING , OPTIONAL, STATIC , OTHER, LoadDevice, pin, node, 0), - PB_FIELD2( 4, BOOL , OPTIONAL, STATIC , OTHER, LoadDevice, passphrase_protection, pin, 0), - PB_FIELD2( 5, STRING , OPTIONAL, STATIC , OTHER, LoadDevice, language, passphrase_protection, &LoadDevice_language_default), - PB_FIELD2( 6, STRING , OPTIONAL, STATIC , OTHER, LoadDevice, label, language, 0), - PB_FIELD2( 7, BOOL , OPTIONAL, STATIC , OTHER, LoadDevice, skip_checksum, label, 0), - PB_FIELD2( 8, UINT32 , OPTIONAL, STATIC , OTHER, LoadDevice, u2f_counter, skip_checksum, 0), - PB_LAST_FIELD -}; - -const pb_field_t ResetDevice_fields[9] = { - PB_FIELD2( 1, BOOL , OPTIONAL, STATIC , FIRST, ResetDevice, display_random, display_random, 0), - PB_FIELD2( 2, UINT32 , OPTIONAL, STATIC , OTHER, ResetDevice, strength, display_random, &ResetDevice_strength_default), - PB_FIELD2( 3, BOOL , OPTIONAL, STATIC , OTHER, ResetDevice, passphrase_protection, strength, 0), - PB_FIELD2( 4, BOOL , OPTIONAL, STATIC , OTHER, ResetDevice, pin_protection, passphrase_protection, 0), - PB_FIELD2( 5, STRING , OPTIONAL, STATIC , OTHER, ResetDevice, language, pin_protection, &ResetDevice_language_default), - PB_FIELD2( 6, STRING , OPTIONAL, STATIC , OTHER, ResetDevice, label, language, 0), - PB_FIELD2( 7, UINT32 , OPTIONAL, STATIC , OTHER, ResetDevice, u2f_counter, label, 0), - PB_FIELD2( 8, BOOL , OPTIONAL, STATIC , OTHER, ResetDevice, skip_backup, u2f_counter, 0), - PB_LAST_FIELD -}; - -const pb_field_t BackupDevice_fields[1] = { - PB_LAST_FIELD -}; - -const pb_field_t EntropyRequest_fields[1] = { - PB_LAST_FIELD -}; - -const pb_field_t EntropyAck_fields[2] = { - PB_FIELD2( 1, BYTES , OPTIONAL, STATIC , FIRST, EntropyAck, entropy, entropy, 0), - PB_LAST_FIELD -}; - -const pb_field_t RecoveryDevice_fields[10] = { - PB_FIELD2( 1, UINT32 , OPTIONAL, STATIC , FIRST, RecoveryDevice, word_count, word_count, 0), - PB_FIELD2( 2, BOOL , OPTIONAL, STATIC , OTHER, RecoveryDevice, passphrase_protection, word_count, 0), - PB_FIELD2( 3, BOOL , OPTIONAL, STATIC , OTHER, RecoveryDevice, pin_protection, passphrase_protection, 0), - PB_FIELD2( 4, STRING , OPTIONAL, STATIC , OTHER, RecoveryDevice, language, pin_protection, &RecoveryDevice_language_default), - PB_FIELD2( 5, STRING , OPTIONAL, STATIC , OTHER, RecoveryDevice, label, language, 0), - PB_FIELD2( 6, BOOL , OPTIONAL, STATIC , OTHER, RecoveryDevice, enforce_wordlist, label, 0), - PB_FIELD2( 8, UINT32 , OPTIONAL, STATIC , OTHER, RecoveryDevice, type, enforce_wordlist, 0), - PB_FIELD2( 9, UINT32 , OPTIONAL, STATIC , OTHER, RecoveryDevice, u2f_counter, type, 0), - PB_FIELD2( 10, BOOL , OPTIONAL, STATIC , OTHER, RecoveryDevice, dry_run, u2f_counter, 0), - PB_LAST_FIELD -}; - -const pb_field_t WordRequest_fields[2] = { - PB_FIELD2( 1, ENUM , OPTIONAL, STATIC , FIRST, WordRequest, type, type, 0), - PB_LAST_FIELD -}; - -const pb_field_t WordAck_fields[2] = { - PB_FIELD2( 1, STRING , REQUIRED, STATIC , FIRST, WordAck, word, word, 0), - PB_LAST_FIELD -}; - -const pb_field_t SignMessage_fields[5] = { - PB_FIELD2( 1, UINT32 , REPEATED, STATIC , FIRST, SignMessage, address_n, address_n, 0), - PB_FIELD2( 2, BYTES , REQUIRED, STATIC , OTHER, SignMessage, message, address_n, 0), - PB_FIELD2( 3, STRING , OPTIONAL, STATIC , OTHER, SignMessage, coin_name, message, &SignMessage_coin_name_default), - PB_FIELD2( 4, ENUM , OPTIONAL, STATIC , OTHER, SignMessage, script_type, coin_name, &SignMessage_script_type_default), - PB_LAST_FIELD -}; - -const pb_field_t VerifyMessage_fields[5] = { - PB_FIELD2( 1, STRING , OPTIONAL, STATIC , FIRST, VerifyMessage, address, address, 0), - PB_FIELD2( 2, BYTES , OPTIONAL, STATIC , OTHER, VerifyMessage, signature, address, 0), - PB_FIELD2( 3, BYTES , OPTIONAL, STATIC , OTHER, VerifyMessage, message, signature, 0), - PB_FIELD2( 4, STRING , OPTIONAL, STATIC , OTHER, VerifyMessage, coin_name, message, &VerifyMessage_coin_name_default), - PB_LAST_FIELD -}; - -const pb_field_t MessageSignature_fields[3] = { - PB_FIELD2( 1, STRING , OPTIONAL, STATIC , FIRST, MessageSignature, address, address, 0), - PB_FIELD2( 2, BYTES , OPTIONAL, STATIC , OTHER, MessageSignature, signature, address, 0), - PB_LAST_FIELD -}; - -const pb_field_t CipherKeyValue_fields[8] = { - PB_FIELD2( 1, UINT32 , REPEATED, STATIC , FIRST, CipherKeyValue, address_n, address_n, 0), - PB_FIELD2( 2, STRING , OPTIONAL, STATIC , OTHER, CipherKeyValue, key, address_n, 0), - PB_FIELD2( 3, BYTES , OPTIONAL, STATIC , OTHER, CipherKeyValue, value, key, 0), - PB_FIELD2( 4, BOOL , OPTIONAL, STATIC , OTHER, CipherKeyValue, encrypt, value, 0), - PB_FIELD2( 5, BOOL , OPTIONAL, STATIC , OTHER, CipherKeyValue, ask_on_encrypt, encrypt, 0), - PB_FIELD2( 6, BOOL , OPTIONAL, STATIC , OTHER, CipherKeyValue, ask_on_decrypt, ask_on_encrypt, 0), - PB_FIELD2( 7, BYTES , OPTIONAL, STATIC , OTHER, CipherKeyValue, iv, ask_on_decrypt, 0), - PB_LAST_FIELD -}; - -const pb_field_t CipheredKeyValue_fields[2] = { - PB_FIELD2( 1, BYTES , OPTIONAL, STATIC , FIRST, CipheredKeyValue, value, value, 0), - PB_LAST_FIELD -}; - -const pb_field_t SignTx_fields[6] = { - PB_FIELD2( 1, UINT32 , REQUIRED, STATIC , FIRST, SignTx, outputs_count, outputs_count, 0), - PB_FIELD2( 2, UINT32 , REQUIRED, STATIC , OTHER, SignTx, inputs_count, outputs_count, 0), - PB_FIELD2( 3, STRING , OPTIONAL, STATIC , OTHER, SignTx, coin_name, inputs_count, &SignTx_coin_name_default), - PB_FIELD2( 4, UINT32 , OPTIONAL, STATIC , OTHER, SignTx, version, coin_name, &SignTx_version_default), - PB_FIELD2( 5, UINT32 , OPTIONAL, STATIC , OTHER, SignTx, lock_time, version, &SignTx_lock_time_default), - PB_LAST_FIELD -}; - -const pb_field_t TxRequest_fields[4] = { - PB_FIELD2( 1, ENUM , OPTIONAL, STATIC , FIRST, TxRequest, request_type, request_type, 0), - PB_FIELD2( 2, MESSAGE , OPTIONAL, STATIC , OTHER, TxRequest, details, request_type, &TxRequestDetailsType_fields), - PB_FIELD2( 3, MESSAGE , OPTIONAL, STATIC , OTHER, TxRequest, serialized, details, &TxRequestSerializedType_fields), - PB_LAST_FIELD -}; - -const pb_field_t TxAck_fields[2] = { - PB_FIELD2( 1, MESSAGE , OPTIONAL, STATIC , FIRST, TxAck, tx, tx, &TransactionType_fields), - PB_LAST_FIELD -}; - -const pb_field_t EthereumSignTx_fields[10] = { - PB_FIELD2( 1, UINT32 , REPEATED, STATIC , FIRST, EthereumSignTx, address_n, address_n, 0), - PB_FIELD2( 2, BYTES , OPTIONAL, STATIC , OTHER, EthereumSignTx, nonce, address_n, 0), - PB_FIELD2( 3, BYTES , OPTIONAL, STATIC , OTHER, EthereumSignTx, gas_price, nonce, 0), - PB_FIELD2( 4, BYTES , OPTIONAL, STATIC , OTHER, EthereumSignTx, gas_limit, gas_price, 0), - PB_FIELD2( 5, BYTES , OPTIONAL, STATIC , OTHER, EthereumSignTx, to, gas_limit, 0), - PB_FIELD2( 6, BYTES , OPTIONAL, STATIC , OTHER, EthereumSignTx, value, to, 0), - PB_FIELD2( 7, BYTES , OPTIONAL, STATIC , OTHER, EthereumSignTx, data_initial_chunk, value, 0), - PB_FIELD2( 8, UINT32 , OPTIONAL, STATIC , OTHER, EthereumSignTx, data_length, data_initial_chunk, 0), - PB_FIELD2( 9, UINT32 , OPTIONAL, STATIC , OTHER, EthereumSignTx, chain_id, data_length, 0), - PB_LAST_FIELD -}; - -const pb_field_t EthereumTxRequest_fields[5] = { - PB_FIELD2( 1, UINT32 , OPTIONAL, STATIC , FIRST, EthereumTxRequest, data_length, data_length, 0), - PB_FIELD2( 2, UINT32 , OPTIONAL, STATIC , OTHER, EthereumTxRequest, signature_v, data_length, 0), - PB_FIELD2( 3, BYTES , OPTIONAL, STATIC , OTHER, EthereumTxRequest, signature_r, signature_v, 0), - PB_FIELD2( 4, BYTES , OPTIONAL, STATIC , OTHER, EthereumTxRequest, signature_s, signature_r, 0), - PB_LAST_FIELD -}; - -const pb_field_t EthereumTxAck_fields[2] = { - PB_FIELD2( 1, BYTES , OPTIONAL, STATIC , FIRST, EthereumTxAck, data_chunk, data_chunk, 0), - PB_LAST_FIELD -}; - -const pb_field_t EthereumSignMessage_fields[3] = { - PB_FIELD2( 1, UINT32 , REPEATED, STATIC , FIRST, EthereumSignMessage, address_n, address_n, 0), - PB_FIELD2( 2, BYTES , REQUIRED, STATIC , OTHER, EthereumSignMessage, message, address_n, 0), - PB_LAST_FIELD -}; - -const pb_field_t EthereumVerifyMessage_fields[4] = { - PB_FIELD2( 1, BYTES , OPTIONAL, STATIC , FIRST, EthereumVerifyMessage, address, address, 0), - PB_FIELD2( 2, BYTES , OPTIONAL, STATIC , OTHER, EthereumVerifyMessage, signature, address, 0), - PB_FIELD2( 3, BYTES , OPTIONAL, STATIC , OTHER, EthereumVerifyMessage, message, signature, 0), - PB_LAST_FIELD -}; - -const pb_field_t EthereumMessageSignature_fields[3] = { - PB_FIELD2( 1, BYTES , OPTIONAL, STATIC , FIRST, EthereumMessageSignature, address, address, 0), - PB_FIELD2( 2, BYTES , OPTIONAL, STATIC , OTHER, EthereumMessageSignature, signature, address, 0), - PB_LAST_FIELD -}; - -const pb_field_t SignIdentity_fields[5] = { - PB_FIELD2( 1, MESSAGE , OPTIONAL, STATIC , FIRST, SignIdentity, identity, identity, &IdentityType_fields), - PB_FIELD2( 2, BYTES , OPTIONAL, STATIC , OTHER, SignIdentity, challenge_hidden, identity, 0), - PB_FIELD2( 3, STRING , OPTIONAL, STATIC , OTHER, SignIdentity, challenge_visual, challenge_hidden, 0), - PB_FIELD2( 4, STRING , OPTIONAL, STATIC , OTHER, SignIdentity, ecdsa_curve_name, challenge_visual, 0), - PB_LAST_FIELD -}; - -const pb_field_t SignedIdentity_fields[4] = { - PB_FIELD2( 1, STRING , OPTIONAL, STATIC , FIRST, SignedIdentity, address, address, 0), - PB_FIELD2( 2, BYTES , OPTIONAL, STATIC , OTHER, SignedIdentity, public_key, address, 0), - PB_FIELD2( 3, BYTES , OPTIONAL, STATIC , OTHER, SignedIdentity, signature, public_key, 0), - PB_LAST_FIELD -}; - -const pb_field_t GetECDHSessionKey_fields[4] = { - PB_FIELD2( 1, MESSAGE , OPTIONAL, STATIC , FIRST, GetECDHSessionKey, identity, identity, &IdentityType_fields), - PB_FIELD2( 2, BYTES , OPTIONAL, STATIC , OTHER, GetECDHSessionKey, peer_public_key, identity, 0), - PB_FIELD2( 3, STRING , OPTIONAL, STATIC , OTHER, GetECDHSessionKey, ecdsa_curve_name, peer_public_key, 0), - PB_LAST_FIELD -}; - -const pb_field_t ECDHSessionKey_fields[2] = { - PB_FIELD2( 1, BYTES , OPTIONAL, STATIC , FIRST, ECDHSessionKey, session_key, session_key, 0), - PB_LAST_FIELD -}; - -const pb_field_t SetU2FCounter_fields[2] = { - PB_FIELD2( 1, UINT32 , OPTIONAL, STATIC , FIRST, SetU2FCounter, u2f_counter, u2f_counter, 0), - PB_LAST_FIELD -}; - -const pb_field_t DebugLinkDecision_fields[2] = { - PB_FIELD2( 1, BOOL , REQUIRED, STATIC , FIRST, DebugLinkDecision, yes_no, yes_no, 0), - PB_LAST_FIELD -}; - -const pb_field_t DebugLinkGetState_fields[1] = { - PB_LAST_FIELD -}; - -const pb_field_t DebugLinkState_fields[11] = { - PB_FIELD2( 1, BYTES , OPTIONAL, STATIC , FIRST, DebugLinkState, layout, layout, 0), - PB_FIELD2( 2, STRING , OPTIONAL, STATIC , OTHER, DebugLinkState, pin, layout, 0), - PB_FIELD2( 3, STRING , OPTIONAL, STATIC , OTHER, DebugLinkState, matrix, pin, 0), - PB_FIELD2( 4, STRING , OPTIONAL, STATIC , OTHER, DebugLinkState, mnemonic, matrix, 0), - PB_FIELD2( 5, MESSAGE , OPTIONAL, STATIC , OTHER, DebugLinkState, node, mnemonic, &HDNodeType_fields), - PB_FIELD2( 6, BOOL , OPTIONAL, STATIC , OTHER, DebugLinkState, passphrase_protection, node, 0), - PB_FIELD2( 7, STRING , OPTIONAL, STATIC , OTHER, DebugLinkState, reset_word, passphrase_protection, 0), - PB_FIELD2( 8, BYTES , OPTIONAL, STATIC , OTHER, DebugLinkState, reset_entropy, reset_word, 0), - PB_FIELD2( 9, STRING , OPTIONAL, STATIC , OTHER, DebugLinkState, recovery_fake_word, reset_entropy, 0), - PB_FIELD2( 10, UINT32 , OPTIONAL, STATIC , OTHER, DebugLinkState, recovery_word_pos, recovery_fake_word, 0), - PB_LAST_FIELD -}; - -const pb_field_t DebugLinkStop_fields[1] = { - PB_LAST_FIELD -}; - -const pb_field_t DebugLinkLog_fields[4] = { - PB_FIELD2( 1, UINT32 , OPTIONAL, STATIC , FIRST, DebugLinkLog, level, level, 0), - PB_FIELD2( 2, STRING , OPTIONAL, STATIC , OTHER, DebugLinkLog, bucket, level, 0), - PB_FIELD2( 3, STRING , OPTIONAL, STATIC , OTHER, DebugLinkLog, text, bucket, 0), - PB_LAST_FIELD -}; - -const pb_field_t DebugLinkMemoryRead_fields[3] = { - PB_FIELD2( 1, UINT32 , OPTIONAL, STATIC , FIRST, DebugLinkMemoryRead, address, address, 0), - PB_FIELD2( 2, UINT32 , OPTIONAL, STATIC , OTHER, DebugLinkMemoryRead, length, address, 0), - PB_LAST_FIELD -}; - -const pb_field_t DebugLinkMemory_fields[2] = { - PB_FIELD2( 1, BYTES , OPTIONAL, STATIC , FIRST, DebugLinkMemory, memory, memory, 0), - PB_LAST_FIELD -}; - -const pb_field_t DebugLinkMemoryWrite_fields[4] = { - PB_FIELD2( 1, UINT32 , OPTIONAL, STATIC , FIRST, DebugLinkMemoryWrite, address, address, 0), - PB_FIELD2( 2, BYTES , OPTIONAL, STATIC , OTHER, DebugLinkMemoryWrite, memory, address, 0), - PB_FIELD2( 3, BOOL , OPTIONAL, STATIC , OTHER, DebugLinkMemoryWrite, flash, memory, 0), - PB_LAST_FIELD -}; - -const pb_field_t DebugLinkFlashErase_fields[2] = { - PB_FIELD2( 1, UINT32 , OPTIONAL, STATIC , FIRST, DebugLinkFlashErase, sector, sector, 0), - PB_LAST_FIELD -}; - - -/* Check that field information fits in pb_field_t */ -#if !defined(PB_FIELD_32BIT) -/* If you get an error here, it means that you need to define PB_FIELD_32BIT - * compile-time option. You can do that in pb.h or on compiler command line. - * - * The reason you need to do this is that some of your messages contain tag - * numbers or field sizes that are larger than what can fit in 8 or 16 bit - * field descriptors. - */ -STATIC_ASSERT((pb_membersize(Features, coins[0]) < 65536 && pb_membersize(PublicKey, node) < 65536 && pb_membersize(GetAddress, multisig) < 65536 && pb_membersize(LoadDevice, node) < 65536 && pb_membersize(TxRequest, details) < 65536 && pb_membersize(TxRequest, serialized) < 65536 && pb_membersize(TxAck, tx) < 65536 && pb_membersize(SignIdentity, identity) < 65536 && pb_membersize(GetECDHSessionKey, identity) < 65536 && pb_membersize(DebugLinkState, node) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_Initialize_GetFeatures_Features_ClearSession_ApplySettings_ApplyFlags_ChangePin_Ping_Success_Failure_ButtonRequest_ButtonAck_PinMatrixRequest_PinMatrixAck_Cancel_PassphraseRequest_PassphraseAck_GetEntropy_Entropy_GetPublicKey_PublicKey_GetAddress_EthereumGetAddress_Address_EthereumAddress_WipeDevice_LoadDevice_ResetDevice_BackupDevice_EntropyRequest_EntropyAck_RecoveryDevice_WordRequest_WordAck_SignMessage_VerifyMessage_MessageSignature_CipherKeyValue_CipheredKeyValue_SignTx_TxRequest_TxAck_EthereumSignTx_EthereumTxRequest_EthereumTxAck_EthereumSignMessage_EthereumVerifyMessage_EthereumMessageSignature_SignIdentity_SignedIdentity_GetECDHSessionKey_ECDHSessionKey_SetU2FCounter_DebugLinkDecision_DebugLinkGetState_DebugLinkState_DebugLinkStop_DebugLinkLog_DebugLinkMemoryRead_DebugLinkMemory_DebugLinkMemoryWrite_DebugLinkFlashErase) -#endif - -#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT) -#error Field descriptor for ApplySettings.homescreen is too large. Define PB_FIELD_16BIT to fix this. -#endif - - diff --git a/firmware/protob/messages.pb.h b/firmware/protob/messages.pb.h deleted file mode 100644 index 9ac45f06e..000000000 --- a/firmware/protob/messages.pb.h +++ /dev/null @@ -1,1227 +0,0 @@ -/* Automatically generated nanopb header */ -/* Generated by nanopb-0.2.9.3 */ - -#ifndef _PB_MESSAGES_PB_H_ -#define _PB_MESSAGES_PB_H_ -#include "pb.h" -#include "types.pb.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Enum definitions */ -typedef enum _MessageType { - MessageType_MessageType_Initialize = 0, - MessageType_MessageType_Ping = 1, - MessageType_MessageType_Success = 2, - MessageType_MessageType_Failure = 3, - MessageType_MessageType_ChangePin = 4, - MessageType_MessageType_WipeDevice = 5, - MessageType_MessageType_FirmwareErase = 6, - MessageType_MessageType_FirmwareUpload = 7, - MessageType_MessageType_FirmwareRequest = 8, - MessageType_MessageType_GetEntropy = 9, - MessageType_MessageType_Entropy = 10, - MessageType_MessageType_GetPublicKey = 11, - MessageType_MessageType_PublicKey = 12, - MessageType_MessageType_LoadDevice = 13, - MessageType_MessageType_ResetDevice = 14, - MessageType_MessageType_SignTx = 15, - MessageType_MessageType_SimpleSignTx = 16, - MessageType_MessageType_Features = 17, - MessageType_MessageType_PinMatrixRequest = 18, - MessageType_MessageType_PinMatrixAck = 19, - MessageType_MessageType_Cancel = 20, - MessageType_MessageType_TxRequest = 21, - MessageType_MessageType_TxAck = 22, - MessageType_MessageType_CipherKeyValue = 23, - MessageType_MessageType_ClearSession = 24, - MessageType_MessageType_ApplySettings = 25, - MessageType_MessageType_ButtonRequest = 26, - MessageType_MessageType_ButtonAck = 27, - MessageType_MessageType_ApplyFlags = 28, - MessageType_MessageType_GetAddress = 29, - MessageType_MessageType_Address = 30, - MessageType_MessageType_SelfTest = 32, - MessageType_MessageType_BackupDevice = 34, - MessageType_MessageType_EntropyRequest = 35, - MessageType_MessageType_EntropyAck = 36, - MessageType_MessageType_SignMessage = 38, - MessageType_MessageType_VerifyMessage = 39, - MessageType_MessageType_MessageSignature = 40, - MessageType_MessageType_PassphraseRequest = 41, - MessageType_MessageType_PassphraseAck = 42, - MessageType_MessageType_EstimateTxSize = 43, - MessageType_MessageType_TxSize = 44, - MessageType_MessageType_RecoveryDevice = 45, - MessageType_MessageType_WordRequest = 46, - MessageType_MessageType_WordAck = 47, - MessageType_MessageType_CipheredKeyValue = 48, - MessageType_MessageType_EncryptMessage = 49, - MessageType_MessageType_EncryptedMessage = 50, - MessageType_MessageType_DecryptMessage = 51, - MessageType_MessageType_DecryptedMessage = 52, - MessageType_MessageType_SignIdentity = 53, - MessageType_MessageType_SignedIdentity = 54, - MessageType_MessageType_GetFeatures = 55, - MessageType_MessageType_EthereumGetAddress = 56, - MessageType_MessageType_EthereumAddress = 57, - MessageType_MessageType_EthereumSignTx = 58, - MessageType_MessageType_EthereumTxRequest = 59, - MessageType_MessageType_EthereumTxAck = 60, - MessageType_MessageType_GetECDHSessionKey = 61, - MessageType_MessageType_ECDHSessionKey = 62, - MessageType_MessageType_SetU2FCounter = 63, - MessageType_MessageType_EthereumSignMessage = 64, - MessageType_MessageType_EthereumVerifyMessage = 65, - MessageType_MessageType_EthereumMessageSignature = 66, - MessageType_MessageType_DebugLinkDecision = 100, - MessageType_MessageType_DebugLinkGetState = 101, - MessageType_MessageType_DebugLinkState = 102, - MessageType_MessageType_DebugLinkStop = 103, - MessageType_MessageType_DebugLinkLog = 104, - MessageType_MessageType_DebugLinkMemoryRead = 110, - MessageType_MessageType_DebugLinkMemory = 111, - MessageType_MessageType_DebugLinkMemoryWrite = 112, - MessageType_MessageType_DebugLinkFlashErase = 113 -} MessageType; - -/* Struct definitions */ -typedef struct _BackupDevice { - uint8_t dummy_field; -} BackupDevice; - -typedef struct _ButtonAck { - uint8_t dummy_field; -} ButtonAck; - -typedef struct _Cancel { - uint8_t dummy_field; -} Cancel; - -typedef struct _ClearSession { - uint8_t dummy_field; -} ClearSession; - -typedef struct _DebugLinkGetState { - uint8_t dummy_field; -} DebugLinkGetState; - -typedef struct _DebugLinkStop { - uint8_t dummy_field; -} DebugLinkStop; - -typedef struct _EntropyRequest { - uint8_t dummy_field; -} EntropyRequest; - -typedef struct _GetFeatures { - uint8_t dummy_field; -} GetFeatures; - -typedef struct _Initialize { - uint8_t dummy_field; -} Initialize; - -typedef struct _PassphraseRequest { - uint8_t dummy_field; -} PassphraseRequest; - -typedef struct _WipeDevice { - uint8_t dummy_field; -} WipeDevice; - -typedef struct _Address { - char address[60]; -} Address; - -typedef struct _ApplyFlags { - bool has_flags; - uint32_t flags; -} ApplyFlags; - -typedef struct { - size_t size; - uint8_t bytes[1024]; -} ApplySettings_homescreen_t; - -typedef struct _ApplySettings { - bool has_language; - char language[17]; - bool has_label; - char label[33]; - bool has_use_passphrase; - bool use_passphrase; - bool has_homescreen; - ApplySettings_homescreen_t homescreen; -} ApplySettings; - -typedef struct _ButtonRequest { - bool has_code; - ButtonRequestType code; - bool has_data; - char data[256]; -} ButtonRequest; - -typedef struct _ChangePin { - bool has_remove; - bool remove; -} ChangePin; - -typedef struct { - size_t size; - uint8_t bytes[1024]; -} CipherKeyValue_value_t; - -typedef struct { - size_t size; - uint8_t bytes[16]; -} CipherKeyValue_iv_t; - -typedef struct _CipherKeyValue { - size_t address_n_count; - uint32_t address_n[8]; - bool has_key; - char key[256]; - bool has_value; - CipherKeyValue_value_t value; - bool has_encrypt; - bool encrypt; - bool has_ask_on_encrypt; - bool ask_on_encrypt; - bool has_ask_on_decrypt; - bool ask_on_decrypt; - bool has_iv; - CipherKeyValue_iv_t iv; -} CipherKeyValue; - -typedef struct { - size_t size; - uint8_t bytes[1024]; -} CipheredKeyValue_value_t; - -typedef struct _CipheredKeyValue { - bool has_value; - CipheredKeyValue_value_t value; -} CipheredKeyValue; - -typedef struct _DebugLinkDecision { - bool yes_no; -} DebugLinkDecision; - -typedef struct _DebugLinkFlashErase { - bool has_sector; - uint32_t sector; -} DebugLinkFlashErase; - -typedef struct _DebugLinkLog { - bool has_level; - uint32_t level; - bool has_bucket; - char bucket[33]; - bool has_text; - char text[256]; -} DebugLinkLog; - -typedef struct { - size_t size; - uint8_t bytes[1024]; -} DebugLinkMemory_memory_t; - -typedef struct _DebugLinkMemory { - bool has_memory; - DebugLinkMemory_memory_t memory; -} DebugLinkMemory; - -typedef struct _DebugLinkMemoryRead { - bool has_address; - uint32_t address; - bool has_length; - uint32_t length; -} DebugLinkMemoryRead; - -typedef struct { - size_t size; - uint8_t bytes[1024]; -} DebugLinkMemoryWrite_memory_t; - -typedef struct _DebugLinkMemoryWrite { - bool has_address; - uint32_t address; - bool has_memory; - DebugLinkMemoryWrite_memory_t memory; - bool has_flash; - bool flash; -} DebugLinkMemoryWrite; - -typedef struct { - size_t size; - uint8_t bytes[1024]; -} DebugLinkState_layout_t; - -typedef struct { - size_t size; - uint8_t bytes[128]; -} DebugLinkState_reset_entropy_t; - -typedef struct _DebugLinkState { - bool has_layout; - DebugLinkState_layout_t layout; - bool has_pin; - char pin[10]; - bool has_matrix; - char matrix[10]; - bool has_mnemonic; - char mnemonic[241]; - bool has_node; - HDNodeType node; - bool has_passphrase_protection; - bool passphrase_protection; - bool has_reset_word; - char reset_word[12]; - bool has_reset_entropy; - DebugLinkState_reset_entropy_t reset_entropy; - bool has_recovery_fake_word; - char recovery_fake_word[12]; - bool has_recovery_word_pos; - uint32_t recovery_word_pos; -} DebugLinkState; - -typedef struct { - size_t size; - uint8_t bytes[65]; -} ECDHSessionKey_session_key_t; - -typedef struct _ECDHSessionKey { - bool has_session_key; - ECDHSessionKey_session_key_t session_key; -} ECDHSessionKey; - -typedef struct { - size_t size; - uint8_t bytes[1024]; -} Entropy_entropy_t; - -typedef struct _Entropy { - Entropy_entropy_t entropy; -} Entropy; - -typedef struct { - size_t size; - uint8_t bytes[128]; -} EntropyAck_entropy_t; - -typedef struct _EntropyAck { - bool has_entropy; - EntropyAck_entropy_t entropy; -} EntropyAck; - -typedef struct { - size_t size; - uint8_t bytes[20]; -} EthereumAddress_address_t; - -typedef struct _EthereumAddress { - EthereumAddress_address_t address; -} EthereumAddress; - -typedef struct _EthereumGetAddress { - size_t address_n_count; - uint32_t address_n[8]; - bool has_show_display; - bool show_display; -} EthereumGetAddress; - -typedef struct { - size_t size; - uint8_t bytes[20]; -} EthereumMessageSignature_address_t; - -typedef struct { - size_t size; - uint8_t bytes[65]; -} EthereumMessageSignature_signature_t; - -typedef struct _EthereumMessageSignature { - bool has_address; - EthereumMessageSignature_address_t address; - bool has_signature; - EthereumMessageSignature_signature_t signature; -} EthereumMessageSignature; - -typedef struct { - size_t size; - uint8_t bytes[1024]; -} EthereumSignMessage_message_t; - -typedef struct _EthereumSignMessage { - size_t address_n_count; - uint32_t address_n[8]; - EthereumSignMessage_message_t message; -} EthereumSignMessage; - -typedef struct { - size_t size; - uint8_t bytes[32]; -} EthereumSignTx_nonce_t; - -typedef struct { - size_t size; - uint8_t bytes[32]; -} EthereumSignTx_gas_price_t; - -typedef struct { - size_t size; - uint8_t bytes[32]; -} EthereumSignTx_gas_limit_t; - -typedef struct { - size_t size; - uint8_t bytes[20]; -} EthereumSignTx_to_t; - -typedef struct { - size_t size; - uint8_t bytes[32]; -} EthereumSignTx_value_t; - -typedef struct { - size_t size; - uint8_t bytes[1024]; -} EthereumSignTx_data_initial_chunk_t; - -typedef struct _EthereumSignTx { - size_t address_n_count; - uint32_t address_n[8]; - bool has_nonce; - EthereumSignTx_nonce_t nonce; - bool has_gas_price; - EthereumSignTx_gas_price_t gas_price; - bool has_gas_limit; - EthereumSignTx_gas_limit_t gas_limit; - bool has_to; - EthereumSignTx_to_t to; - bool has_value; - EthereumSignTx_value_t value; - bool has_data_initial_chunk; - EthereumSignTx_data_initial_chunk_t data_initial_chunk; - bool has_data_length; - uint32_t data_length; - bool has_chain_id; - uint32_t chain_id; -} EthereumSignTx; - -typedef struct { - size_t size; - uint8_t bytes[1024]; -} EthereumTxAck_data_chunk_t; - -typedef struct _EthereumTxAck { - bool has_data_chunk; - EthereumTxAck_data_chunk_t data_chunk; -} EthereumTxAck; - -typedef struct { - size_t size; - uint8_t bytes[32]; -} EthereumTxRequest_signature_r_t; - -typedef struct { - size_t size; - uint8_t bytes[32]; -} EthereumTxRequest_signature_s_t; - -typedef struct _EthereumTxRequest { - bool has_data_length; - uint32_t data_length; - bool has_signature_v; - uint32_t signature_v; - bool has_signature_r; - EthereumTxRequest_signature_r_t signature_r; - bool has_signature_s; - EthereumTxRequest_signature_s_t signature_s; -} EthereumTxRequest; - -typedef struct { - size_t size; - uint8_t bytes[20]; -} EthereumVerifyMessage_address_t; - -typedef struct { - size_t size; - uint8_t bytes[65]; -} EthereumVerifyMessage_signature_t; - -typedef struct { - size_t size; - uint8_t bytes[1024]; -} EthereumVerifyMessage_message_t; - -typedef struct _EthereumVerifyMessage { - bool has_address; - EthereumVerifyMessage_address_t address; - bool has_signature; - EthereumVerifyMessage_signature_t signature; - bool has_message; - EthereumVerifyMessage_message_t message; -} EthereumVerifyMessage; - -typedef struct _Failure { - bool has_code; - FailureType code; - bool has_message; - char message[256]; -} Failure; - -typedef struct { - size_t size; - uint8_t bytes[20]; -} Features_revision_t; - -typedef struct { - size_t size; - uint8_t bytes[32]; -} Features_bootloader_hash_t; - -typedef struct _Features { - bool has_vendor; - char vendor[33]; - bool has_major_version; - uint32_t major_version; - bool has_minor_version; - uint32_t minor_version; - bool has_patch_version; - uint32_t patch_version; - bool has_bootloader_mode; - bool bootloader_mode; - bool has_device_id; - char device_id[25]; - bool has_pin_protection; - bool pin_protection; - bool has_passphrase_protection; - bool passphrase_protection; - bool has_language; - char language[17]; - bool has_label; - char label[33]; - size_t coins_count; - CoinType coins[10]; - bool has_initialized; - bool initialized; - bool has_revision; - Features_revision_t revision; - bool has_bootloader_hash; - Features_bootloader_hash_t bootloader_hash; - bool has_imported; - bool imported; - bool has_pin_cached; - bool pin_cached; - bool has_passphrase_cached; - bool passphrase_cached; - bool has_firmware_present; - bool firmware_present; - bool has_needs_backup; - bool needs_backup; - bool has_flags; - uint32_t flags; -} Features; - -typedef struct _GetAddress { - size_t address_n_count; - uint32_t address_n[8]; - bool has_coin_name; - char coin_name[21]; - bool has_show_display; - bool show_display; - bool has_multisig; - MultisigRedeemScriptType multisig; - bool has_script_type; - InputScriptType script_type; -} GetAddress; - -typedef struct { - size_t size; - uint8_t bytes[65]; -} GetECDHSessionKey_peer_public_key_t; - -typedef struct _GetECDHSessionKey { - bool has_identity; - IdentityType identity; - bool has_peer_public_key; - GetECDHSessionKey_peer_public_key_t peer_public_key; - bool has_ecdsa_curve_name; - char ecdsa_curve_name[32]; -} GetECDHSessionKey; - -typedef struct _GetEntropy { - uint32_t size; -} GetEntropy; - -typedef struct _GetPublicKey { - size_t address_n_count; - uint32_t address_n[8]; - bool has_ecdsa_curve_name; - char ecdsa_curve_name[32]; - bool has_show_display; - bool show_display; - bool has_coin_name; - char coin_name[21]; -} GetPublicKey; - -typedef struct _LoadDevice { - bool has_mnemonic; - char mnemonic[241]; - bool has_node; - HDNodeType node; - bool has_pin; - char pin[10]; - bool has_passphrase_protection; - bool passphrase_protection; - bool has_language; - char language[17]; - bool has_label; - char label[33]; - bool has_skip_checksum; - bool skip_checksum; - bool has_u2f_counter; - uint32_t u2f_counter; -} LoadDevice; - -typedef struct { - size_t size; - uint8_t bytes[65]; -} MessageSignature_signature_t; - -typedef struct _MessageSignature { - bool has_address; - char address[60]; - bool has_signature; - MessageSignature_signature_t signature; -} MessageSignature; - -typedef struct _PassphraseAck { - char passphrase[51]; -} PassphraseAck; - -typedef struct _PinMatrixAck { - char pin[10]; -} PinMatrixAck; - -typedef struct _PinMatrixRequest { - bool has_type; - PinMatrixRequestType type; -} PinMatrixRequest; - -typedef struct _Ping { - bool has_message; - char message[256]; - bool has_button_protection; - bool button_protection; - bool has_pin_protection; - bool pin_protection; - bool has_passphrase_protection; - bool passphrase_protection; -} Ping; - -typedef struct _PublicKey { - HDNodeType node; - bool has_xpub; - char xpub[113]; -} PublicKey; - -typedef struct _RecoveryDevice { - bool has_word_count; - uint32_t word_count; - bool has_passphrase_protection; - bool passphrase_protection; - bool has_pin_protection; - bool pin_protection; - bool has_language; - char language[17]; - bool has_label; - char label[33]; - bool has_enforce_wordlist; - bool enforce_wordlist; - bool has_type; - uint32_t type; - bool has_u2f_counter; - uint32_t u2f_counter; - bool has_dry_run; - bool dry_run; -} RecoveryDevice; - -typedef struct _ResetDevice { - bool has_display_random; - bool display_random; - bool has_strength; - uint32_t strength; - bool has_passphrase_protection; - bool passphrase_protection; - bool has_pin_protection; - bool pin_protection; - bool has_language; - char language[17]; - bool has_label; - char label[33]; - bool has_u2f_counter; - uint32_t u2f_counter; - bool has_skip_backup; - bool skip_backup; -} ResetDevice; - -typedef struct _SetU2FCounter { - bool has_u2f_counter; - uint32_t u2f_counter; -} SetU2FCounter; - -typedef struct { - size_t size; - uint8_t bytes[256]; -} SignIdentity_challenge_hidden_t; - -typedef struct _SignIdentity { - bool has_identity; - IdentityType identity; - bool has_challenge_hidden; - SignIdentity_challenge_hidden_t challenge_hidden; - bool has_challenge_visual; - char challenge_visual[256]; - bool has_ecdsa_curve_name; - char ecdsa_curve_name[32]; -} SignIdentity; - -typedef struct { - size_t size; - uint8_t bytes[1024]; -} SignMessage_message_t; - -typedef struct _SignMessage { - size_t address_n_count; - uint32_t address_n[8]; - SignMessage_message_t message; - bool has_coin_name; - char coin_name[21]; - bool has_script_type; - InputScriptType script_type; -} SignMessage; - -typedef struct _SignTx { - uint32_t outputs_count; - uint32_t inputs_count; - bool has_coin_name; - char coin_name[21]; - bool has_version; - uint32_t version; - bool has_lock_time; - uint32_t lock_time; -} SignTx; - -typedef struct { - size_t size; - uint8_t bytes[33]; -} SignedIdentity_public_key_t; - -typedef struct { - size_t size; - uint8_t bytes[65]; -} SignedIdentity_signature_t; - -typedef struct _SignedIdentity { - bool has_address; - char address[60]; - bool has_public_key; - SignedIdentity_public_key_t public_key; - bool has_signature; - SignedIdentity_signature_t signature; -} SignedIdentity; - -typedef struct _Success { - bool has_message; - char message[256]; -} Success; - -typedef struct _TxAck { - bool has_tx; - TransactionType tx; -} TxAck; - -typedef struct _TxRequest { - bool has_request_type; - RequestType request_type; - bool has_details; - TxRequestDetailsType details; - bool has_serialized; - TxRequestSerializedType serialized; -} TxRequest; - -typedef struct { - size_t size; - uint8_t bytes[65]; -} VerifyMessage_signature_t; - -typedef struct { - size_t size; - uint8_t bytes[1024]; -} VerifyMessage_message_t; - -typedef struct _VerifyMessage { - bool has_address; - char address[60]; - bool has_signature; - VerifyMessage_signature_t signature; - bool has_message; - VerifyMessage_message_t message; - bool has_coin_name; - char coin_name[21]; -} VerifyMessage; - -typedef struct _WordAck { - char word[12]; -} WordAck; - -typedef struct _WordRequest { - bool has_type; - WordRequestType type; -} WordRequest; - -/* Default values for struct fields */ -extern const char GetPublicKey_coin_name_default[21]; -extern const char GetAddress_coin_name_default[21]; -extern const InputScriptType GetAddress_script_type_default; -extern const char LoadDevice_language_default[17]; -extern const uint32_t ResetDevice_strength_default; -extern const char ResetDevice_language_default[17]; -extern const char RecoveryDevice_language_default[17]; -extern const char SignMessage_coin_name_default[21]; -extern const InputScriptType SignMessage_script_type_default; -extern const char VerifyMessage_coin_name_default[21]; -extern const char SignTx_coin_name_default[21]; -extern const uint32_t SignTx_version_default; -extern const uint32_t SignTx_lock_time_default; - -/* Initializer values for message structs */ -#define Initialize_init_default {0} -#define GetFeatures_init_default {0} -#define Features_init_default {false, "", false, 0, false, 0, false, 0, false, 0, false, "", false, 0, false, 0, false, "", false, "", 0, {CoinType_init_default, CoinType_init_default, CoinType_init_default, CoinType_init_default, CoinType_init_default, CoinType_init_default, CoinType_init_default, CoinType_init_default, CoinType_init_default, CoinType_init_default}, false, 0, false, {0, {0}}, false, {0, {0}}, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0} -#define ClearSession_init_default {0} -#define ApplySettings_init_default {false, "", false, "", false, 0, false, {0, {0}}} -#define ApplyFlags_init_default {false, 0} -#define ChangePin_init_default {false, 0} -#define Ping_init_default {false, "", false, 0, false, 0, false, 0} -#define Success_init_default {false, ""} -#define Failure_init_default {false, (FailureType)0, false, ""} -#define ButtonRequest_init_default {false, (ButtonRequestType)0, false, ""} -#define ButtonAck_init_default {0} -#define PinMatrixRequest_init_default {false, (PinMatrixRequestType)0} -#define PinMatrixAck_init_default {""} -#define Cancel_init_default {0} -#define PassphraseRequest_init_default {0} -#define PassphraseAck_init_default {""} -#define GetEntropy_init_default {0} -#define Entropy_init_default {{0, {0}}} -#define GetPublicKey_init_default {0, {0, 0, 0, 0, 0, 0, 0, 0}, false, "", false, 0, false, "Bitcoin"} -#define PublicKey_init_default {HDNodeType_init_default, false, ""} -#define GetAddress_init_default {0, {0, 0, 0, 0, 0, 0, 0, 0}, false, "Bitcoin", false, 0, false, MultisigRedeemScriptType_init_default, false, InputScriptType_SPENDADDRESS} -#define EthereumGetAddress_init_default {0, {0, 0, 0, 0, 0, 0, 0, 0}, false, 0} -#define Address_init_default {""} -#define EthereumAddress_init_default {{0, {0}}} -#define WipeDevice_init_default {0} -#define LoadDevice_init_default {false, "", false, HDNodeType_init_default, false, "", false, 0, false, "english", false, "", false, 0, false, 0} -#define ResetDevice_init_default {false, 0, false, 256u, false, 0, false, 0, false, "english", false, "", false, 0, false, 0} -#define BackupDevice_init_default {0} -#define EntropyRequest_init_default {0} -#define EntropyAck_init_default {false, {0, {0}}} -#define RecoveryDevice_init_default {false, 0, false, 0, false, 0, false, "english", false, "", false, 0, false, 0, false, 0, false, 0} -#define WordRequest_init_default {false, (WordRequestType)0} -#define WordAck_init_default {""} -#define SignMessage_init_default {0, {0, 0, 0, 0, 0, 0, 0, 0}, {0, {0}}, false, "Bitcoin", false, InputScriptType_SPENDADDRESS} -#define VerifyMessage_init_default {false, "", false, {0, {0}}, false, {0, {0}}, false, "Bitcoin"} -#define MessageSignature_init_default {false, "", false, {0, {0}}} -#define CipherKeyValue_init_default {0, {0, 0, 0, 0, 0, 0, 0, 0}, false, "", false, {0, {0}}, false, 0, false, 0, false, 0, false, {0, {0}}} -#define CipheredKeyValue_init_default {false, {0, {0}}} -#define SignTx_init_default {0, 0, false, "Bitcoin", false, 1u, false, 0u} -#define TxRequest_init_default {false, (RequestType)0, false, TxRequestDetailsType_init_default, false, TxRequestSerializedType_init_default} -#define TxAck_init_default {false, TransactionType_init_default} -#define EthereumSignTx_init_default {0, {0, 0, 0, 0, 0, 0, 0, 0}, false, {0, {0}}, false, {0, {0}}, false, {0, {0}}, false, {0, {0}}, false, {0, {0}}, false, {0, {0}}, false, 0, false, 0} -#define EthereumTxRequest_init_default {false, 0, false, 0, false, {0, {0}}, false, {0, {0}}} -#define EthereumTxAck_init_default {false, {0, {0}}} -#define EthereumSignMessage_init_default {0, {0, 0, 0, 0, 0, 0, 0, 0}, {0, {0}}} -#define EthereumVerifyMessage_init_default {false, {0, {0}}, false, {0, {0}}, false, {0, {0}}} -#define EthereumMessageSignature_init_default {false, {0, {0}}, false, {0, {0}}} -#define SignIdentity_init_default {false, IdentityType_init_default, false, {0, {0}}, false, "", false, ""} -#define SignedIdentity_init_default {false, "", false, {0, {0}}, false, {0, {0}}} -#define GetECDHSessionKey_init_default {false, IdentityType_init_default, false, {0, {0}}, false, ""} -#define ECDHSessionKey_init_default {false, {0, {0}}} -#define SetU2FCounter_init_default {false, 0} -#define DebugLinkDecision_init_default {0} -#define DebugLinkGetState_init_default {0} -#define DebugLinkState_init_default {false, {0, {0}}, false, "", false, "", false, "", false, HDNodeType_init_default, false, 0, false, "", false, {0, {0}}, false, "", false, 0} -#define DebugLinkStop_init_default {0} -#define DebugLinkLog_init_default {false, 0, false, "", false, ""} -#define DebugLinkMemoryRead_init_default {false, 0, false, 0} -#define DebugLinkMemory_init_default {false, {0, {0}}} -#define DebugLinkMemoryWrite_init_default {false, 0, false, {0, {0}}, false, 0} -#define DebugLinkFlashErase_init_default {false, 0} -#define Initialize_init_zero {0} -#define GetFeatures_init_zero {0} -#define Features_init_zero {false, "", false, 0, false, 0, false, 0, false, 0, false, "", false, 0, false, 0, false, "", false, "", 0, {CoinType_init_zero, CoinType_init_zero, CoinType_init_zero, CoinType_init_zero, CoinType_init_zero, CoinType_init_zero, CoinType_init_zero, CoinType_init_zero, CoinType_init_zero, CoinType_init_zero}, false, 0, false, {0, {0}}, false, {0, {0}}, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0} -#define ClearSession_init_zero {0} -#define ApplySettings_init_zero {false, "", false, "", false, 0, false, {0, {0}}} -#define ApplyFlags_init_zero {false, 0} -#define ChangePin_init_zero {false, 0} -#define Ping_init_zero {false, "", false, 0, false, 0, false, 0} -#define Success_init_zero {false, ""} -#define Failure_init_zero {false, (FailureType)0, false, ""} -#define ButtonRequest_init_zero {false, (ButtonRequestType)0, false, ""} -#define ButtonAck_init_zero {0} -#define PinMatrixRequest_init_zero {false, (PinMatrixRequestType)0} -#define PinMatrixAck_init_zero {""} -#define Cancel_init_zero {0} -#define PassphraseRequest_init_zero {0} -#define PassphraseAck_init_zero {""} -#define GetEntropy_init_zero {0} -#define Entropy_init_zero {{0, {0}}} -#define GetPublicKey_init_zero {0, {0, 0, 0, 0, 0, 0, 0, 0}, false, "", false, 0, false, ""} -#define PublicKey_init_zero {HDNodeType_init_zero, false, ""} -#define GetAddress_init_zero {0, {0, 0, 0, 0, 0, 0, 0, 0}, false, "", false, 0, false, MultisigRedeemScriptType_init_zero, false, (InputScriptType)0} -#define EthereumGetAddress_init_zero {0, {0, 0, 0, 0, 0, 0, 0, 0}, false, 0} -#define Address_init_zero {""} -#define EthereumAddress_init_zero {{0, {0}}} -#define WipeDevice_init_zero {0} -#define LoadDevice_init_zero {false, "", false, HDNodeType_init_zero, false, "", false, 0, false, "", false, "", false, 0, false, 0} -#define ResetDevice_init_zero {false, 0, false, 0, false, 0, false, 0, false, "", false, "", false, 0, false, 0} -#define BackupDevice_init_zero {0} -#define EntropyRequest_init_zero {0} -#define EntropyAck_init_zero {false, {0, {0}}} -#define RecoveryDevice_init_zero {false, 0, false, 0, false, 0, false, "", false, "", false, 0, false, 0, false, 0, false, 0} -#define WordRequest_init_zero {false, (WordRequestType)0} -#define WordAck_init_zero {""} -#define SignMessage_init_zero {0, {0, 0, 0, 0, 0, 0, 0, 0}, {0, {0}}, false, "", false, (InputScriptType)0} -#define VerifyMessage_init_zero {false, "", false, {0, {0}}, false, {0, {0}}, false, ""} -#define MessageSignature_init_zero {false, "", false, {0, {0}}} -#define CipherKeyValue_init_zero {0, {0, 0, 0, 0, 0, 0, 0, 0}, false, "", false, {0, {0}}, false, 0, false, 0, false, 0, false, {0, {0}}} -#define CipheredKeyValue_init_zero {false, {0, {0}}} -#define SignTx_init_zero {0, 0, false, "", false, 0, false, 0} -#define TxRequest_init_zero {false, (RequestType)0, false, TxRequestDetailsType_init_zero, false, TxRequestSerializedType_init_zero} -#define TxAck_init_zero {false, TransactionType_init_zero} -#define EthereumSignTx_init_zero {0, {0, 0, 0, 0, 0, 0, 0, 0}, false, {0, {0}}, false, {0, {0}}, false, {0, {0}}, false, {0, {0}}, false, {0, {0}}, false, {0, {0}}, false, 0, false, 0} -#define EthereumTxRequest_init_zero {false, 0, false, 0, false, {0, {0}}, false, {0, {0}}} -#define EthereumTxAck_init_zero {false, {0, {0}}} -#define EthereumSignMessage_init_zero {0, {0, 0, 0, 0, 0, 0, 0, 0}, {0, {0}}} -#define EthereumVerifyMessage_init_zero {false, {0, {0}}, false, {0, {0}}, false, {0, {0}}} -#define EthereumMessageSignature_init_zero {false, {0, {0}}, false, {0, {0}}} -#define SignIdentity_init_zero {false, IdentityType_init_zero, false, {0, {0}}, false, "", false, ""} -#define SignedIdentity_init_zero {false, "", false, {0, {0}}, false, {0, {0}}} -#define GetECDHSessionKey_init_zero {false, IdentityType_init_zero, false, {0, {0}}, false, ""} -#define ECDHSessionKey_init_zero {false, {0, {0}}} -#define SetU2FCounter_init_zero {false, 0} -#define DebugLinkDecision_init_zero {0} -#define DebugLinkGetState_init_zero {0} -#define DebugLinkState_init_zero {false, {0, {0}}, false, "", false, "", false, "", false, HDNodeType_init_zero, false, 0, false, "", false, {0, {0}}, false, "", false, 0} -#define DebugLinkStop_init_zero {0} -#define DebugLinkLog_init_zero {false, 0, false, "", false, ""} -#define DebugLinkMemoryRead_init_zero {false, 0, false, 0} -#define DebugLinkMemory_init_zero {false, {0, {0}}} -#define DebugLinkMemoryWrite_init_zero {false, 0, false, {0, {0}}, false, 0} -#define DebugLinkFlashErase_init_zero {false, 0} - -/* Field tags (for use in manual encoding/decoding) */ -#define Address_address_tag 1 -#define ApplyFlags_flags_tag 1 -#define ApplySettings_language_tag 1 -#define ApplySettings_label_tag 2 -#define ApplySettings_use_passphrase_tag 3 -#define ApplySettings_homescreen_tag 4 -#define ButtonRequest_code_tag 1 -#define ButtonRequest_data_tag 2 -#define ChangePin_remove_tag 1 -#define CipherKeyValue_address_n_tag 1 -#define CipherKeyValue_key_tag 2 -#define CipherKeyValue_value_tag 3 -#define CipherKeyValue_encrypt_tag 4 -#define CipherKeyValue_ask_on_encrypt_tag 5 -#define CipherKeyValue_ask_on_decrypt_tag 6 -#define CipherKeyValue_iv_tag 7 -#define CipheredKeyValue_value_tag 1 -#define DebugLinkDecision_yes_no_tag 1 -#define DebugLinkFlashErase_sector_tag 1 -#define DebugLinkLog_level_tag 1 -#define DebugLinkLog_bucket_tag 2 -#define DebugLinkLog_text_tag 3 -#define DebugLinkMemory_memory_tag 1 -#define DebugLinkMemoryRead_address_tag 1 -#define DebugLinkMemoryRead_length_tag 2 -#define DebugLinkMemoryWrite_address_tag 1 -#define DebugLinkMemoryWrite_memory_tag 2 -#define DebugLinkMemoryWrite_flash_tag 3 -#define DebugLinkState_layout_tag 1 -#define DebugLinkState_pin_tag 2 -#define DebugLinkState_matrix_tag 3 -#define DebugLinkState_mnemonic_tag 4 -#define DebugLinkState_node_tag 5 -#define DebugLinkState_passphrase_protection_tag 6 -#define DebugLinkState_reset_word_tag 7 -#define DebugLinkState_reset_entropy_tag 8 -#define DebugLinkState_recovery_fake_word_tag 9 -#define DebugLinkState_recovery_word_pos_tag 10 -#define ECDHSessionKey_session_key_tag 1 -#define Entropy_entropy_tag 1 -#define EntropyAck_entropy_tag 1 -#define EthereumAddress_address_tag 1 -#define EthereumGetAddress_address_n_tag 1 -#define EthereumGetAddress_show_display_tag 2 -#define EthereumMessageSignature_address_tag 1 -#define EthereumMessageSignature_signature_tag 2 -#define EthereumSignMessage_address_n_tag 1 -#define EthereumSignMessage_message_tag 2 -#define EthereumSignTx_address_n_tag 1 -#define EthereumSignTx_nonce_tag 2 -#define EthereumSignTx_gas_price_tag 3 -#define EthereumSignTx_gas_limit_tag 4 -#define EthereumSignTx_to_tag 5 -#define EthereumSignTx_value_tag 6 -#define EthereumSignTx_data_initial_chunk_tag 7 -#define EthereumSignTx_data_length_tag 8 -#define EthereumSignTx_chain_id_tag 9 -#define EthereumTxAck_data_chunk_tag 1 -#define EthereumTxRequest_data_length_tag 1 -#define EthereumTxRequest_signature_v_tag 2 -#define EthereumTxRequest_signature_r_tag 3 -#define EthereumTxRequest_signature_s_tag 4 -#define EthereumVerifyMessage_address_tag 1 -#define EthereumVerifyMessage_signature_tag 2 -#define EthereumVerifyMessage_message_tag 3 -#define Failure_code_tag 1 -#define Failure_message_tag 2 -#define Features_vendor_tag 1 -#define Features_major_version_tag 2 -#define Features_minor_version_tag 3 -#define Features_patch_version_tag 4 -#define Features_bootloader_mode_tag 5 -#define Features_device_id_tag 6 -#define Features_pin_protection_tag 7 -#define Features_passphrase_protection_tag 8 -#define Features_language_tag 9 -#define Features_label_tag 10 -#define Features_coins_tag 11 -#define Features_initialized_tag 12 -#define Features_revision_tag 13 -#define Features_bootloader_hash_tag 14 -#define Features_imported_tag 15 -#define Features_pin_cached_tag 16 -#define Features_passphrase_cached_tag 17 -#define Features_firmware_present_tag 18 -#define Features_needs_backup_tag 19 -#define Features_flags_tag 20 -#define GetAddress_address_n_tag 1 -#define GetAddress_coin_name_tag 2 -#define GetAddress_show_display_tag 3 -#define GetAddress_multisig_tag 4 -#define GetAddress_script_type_tag 5 -#define GetECDHSessionKey_identity_tag 1 -#define GetECDHSessionKey_peer_public_key_tag 2 -#define GetECDHSessionKey_ecdsa_curve_name_tag 3 -#define GetEntropy_size_tag 1 -#define GetPublicKey_address_n_tag 1 -#define GetPublicKey_ecdsa_curve_name_tag 2 -#define GetPublicKey_show_display_tag 3 -#define GetPublicKey_coin_name_tag 4 -#define LoadDevice_mnemonic_tag 1 -#define LoadDevice_node_tag 2 -#define LoadDevice_pin_tag 3 -#define LoadDevice_passphrase_protection_tag 4 -#define LoadDevice_language_tag 5 -#define LoadDevice_label_tag 6 -#define LoadDevice_skip_checksum_tag 7 -#define LoadDevice_u2f_counter_tag 8 -#define MessageSignature_address_tag 1 -#define MessageSignature_signature_tag 2 -#define PassphraseAck_passphrase_tag 1 -#define PinMatrixAck_pin_tag 1 -#define PinMatrixRequest_type_tag 1 -#define Ping_message_tag 1 -#define Ping_button_protection_tag 2 -#define Ping_pin_protection_tag 3 -#define Ping_passphrase_protection_tag 4 -#define PublicKey_node_tag 1 -#define PublicKey_xpub_tag 2 -#define RecoveryDevice_word_count_tag 1 -#define RecoveryDevice_passphrase_protection_tag 2 -#define RecoveryDevice_pin_protection_tag 3 -#define RecoveryDevice_language_tag 4 -#define RecoveryDevice_label_tag 5 -#define RecoveryDevice_enforce_wordlist_tag 6 -#define RecoveryDevice_type_tag 8 -#define RecoveryDevice_u2f_counter_tag 9 -#define RecoveryDevice_dry_run_tag 10 -#define ResetDevice_display_random_tag 1 -#define ResetDevice_strength_tag 2 -#define ResetDevice_passphrase_protection_tag 3 -#define ResetDevice_pin_protection_tag 4 -#define ResetDevice_language_tag 5 -#define ResetDevice_label_tag 6 -#define ResetDevice_u2f_counter_tag 7 -#define ResetDevice_skip_backup_tag 8 -#define SetU2FCounter_u2f_counter_tag 1 -#define SignIdentity_identity_tag 1 -#define SignIdentity_challenge_hidden_tag 2 -#define SignIdentity_challenge_visual_tag 3 -#define SignIdentity_ecdsa_curve_name_tag 4 -#define SignMessage_address_n_tag 1 -#define SignMessage_message_tag 2 -#define SignMessage_coin_name_tag 3 -#define SignMessage_script_type_tag 4 -#define SignTx_outputs_count_tag 1 -#define SignTx_inputs_count_tag 2 -#define SignTx_coin_name_tag 3 -#define SignTx_version_tag 4 -#define SignTx_lock_time_tag 5 -#define SignedIdentity_address_tag 1 -#define SignedIdentity_public_key_tag 2 -#define SignedIdentity_signature_tag 3 -#define Success_message_tag 1 -#define TxAck_tx_tag 1 -#define TxRequest_request_type_tag 1 -#define TxRequest_details_tag 2 -#define TxRequest_serialized_tag 3 -#define VerifyMessage_address_tag 1 -#define VerifyMessage_signature_tag 2 -#define VerifyMessage_message_tag 3 -#define VerifyMessage_coin_name_tag 4 -#define WordAck_word_tag 1 -#define WordRequest_type_tag 1 - -/* Struct field encoding specification for nanopb */ -extern const pb_field_t Initialize_fields[1]; -extern const pb_field_t GetFeatures_fields[1]; -extern const pb_field_t Features_fields[21]; -extern const pb_field_t ClearSession_fields[1]; -extern const pb_field_t ApplySettings_fields[5]; -extern const pb_field_t ApplyFlags_fields[2]; -extern const pb_field_t ChangePin_fields[2]; -extern const pb_field_t Ping_fields[5]; -extern const pb_field_t Success_fields[2]; -extern const pb_field_t Failure_fields[3]; -extern const pb_field_t ButtonRequest_fields[3]; -extern const pb_field_t ButtonAck_fields[1]; -extern const pb_field_t PinMatrixRequest_fields[2]; -extern const pb_field_t PinMatrixAck_fields[2]; -extern const pb_field_t Cancel_fields[1]; -extern const pb_field_t PassphraseRequest_fields[1]; -extern const pb_field_t PassphraseAck_fields[2]; -extern const pb_field_t GetEntropy_fields[2]; -extern const pb_field_t Entropy_fields[2]; -extern const pb_field_t GetPublicKey_fields[5]; -extern const pb_field_t PublicKey_fields[3]; -extern const pb_field_t GetAddress_fields[6]; -extern const pb_field_t EthereumGetAddress_fields[3]; -extern const pb_field_t Address_fields[2]; -extern const pb_field_t EthereumAddress_fields[2]; -extern const pb_field_t WipeDevice_fields[1]; -extern const pb_field_t LoadDevice_fields[9]; -extern const pb_field_t ResetDevice_fields[9]; -extern const pb_field_t BackupDevice_fields[1]; -extern const pb_field_t EntropyRequest_fields[1]; -extern const pb_field_t EntropyAck_fields[2]; -extern const pb_field_t RecoveryDevice_fields[10]; -extern const pb_field_t WordRequest_fields[2]; -extern const pb_field_t WordAck_fields[2]; -extern const pb_field_t SignMessage_fields[5]; -extern const pb_field_t VerifyMessage_fields[5]; -extern const pb_field_t MessageSignature_fields[3]; -extern const pb_field_t CipherKeyValue_fields[8]; -extern const pb_field_t CipheredKeyValue_fields[2]; -extern const pb_field_t SignTx_fields[6]; -extern const pb_field_t TxRequest_fields[4]; -extern const pb_field_t TxAck_fields[2]; -extern const pb_field_t EthereumSignTx_fields[10]; -extern const pb_field_t EthereumTxRequest_fields[5]; -extern const pb_field_t EthereumTxAck_fields[2]; -extern const pb_field_t EthereumSignMessage_fields[3]; -extern const pb_field_t EthereumVerifyMessage_fields[4]; -extern const pb_field_t EthereumMessageSignature_fields[3]; -extern const pb_field_t SignIdentity_fields[5]; -extern const pb_field_t SignedIdentity_fields[4]; -extern const pb_field_t GetECDHSessionKey_fields[4]; -extern const pb_field_t ECDHSessionKey_fields[2]; -extern const pb_field_t SetU2FCounter_fields[2]; -extern const pb_field_t DebugLinkDecision_fields[2]; -extern const pb_field_t DebugLinkGetState_fields[1]; -extern const pb_field_t DebugLinkState_fields[11]; -extern const pb_field_t DebugLinkStop_fields[1]; -extern const pb_field_t DebugLinkLog_fields[4]; -extern const pb_field_t DebugLinkMemoryRead_fields[3]; -extern const pb_field_t DebugLinkMemory_fields[2]; -extern const pb_field_t DebugLinkMemoryWrite_fields[4]; -extern const pb_field_t DebugLinkFlashErase_fields[2]; - -/* Maximum encoded size of messages (where known) */ -#define Initialize_size 0 -#define GetFeatures_size 0 -#define Features_size (279 + 10*CoinType_size) -#define ClearSession_size 0 -#define ApplySettings_size 1083 -#define ApplyFlags_size 6 -#define ChangePin_size 2 -#define Ping_size 265 -#define Success_size 259 -#define Failure_size 265 -#define ButtonRequest_size 265 -#define ButtonAck_size 0 -#define PinMatrixRequest_size 6 -#define PinMatrixAck_size 12 -#define Cancel_size 0 -#define PassphraseRequest_size 0 -#define PassphraseAck_size 53 -#define GetEntropy_size 6 -#define Entropy_size 1027 -#define GetPublicKey_size 107 -#define PublicKey_size (121 + HDNodeType_size) -#define GetAddress_size (85 + MultisigRedeemScriptType_size) -#define EthereumGetAddress_size 50 -#define Address_size 62 -#define EthereumAddress_size 22 -#define WipeDevice_size 0 -#define LoadDevice_size (326 + HDNodeType_size) -#define ResetDevice_size 74 -#define BackupDevice_size 0 -#define EntropyRequest_size 0 -#define EntropyAck_size 131 -#define RecoveryDevice_size 80 -#define WordRequest_size 6 -#define WordAck_size 14 -#define SignMessage_size 1104 -#define VerifyMessage_size 1179 -#define MessageSignature_size 129 -#define CipherKeyValue_size 1358 -#define CipheredKeyValue_size 1027 -#define SignTx_size 47 -#define TxRequest_size (18 + TxRequestDetailsType_size + TxRequestSerializedType_size) -#define TxAck_size (6 + TransactionType_size) -#define EthereumSignTx_size 1245 -#define EthereumTxRequest_size 80 -#define EthereumTxAck_size 1027 -#define EthereumSignMessage_size 1075 -#define EthereumVerifyMessage_size 1116 -#define EthereumMessageSignature_size 89 -#define SignIdentity_size (558 + IdentityType_size) -#define SignedIdentity_size 164 -#define GetECDHSessionKey_size (107 + IdentityType_size) -#define ECDHSessionKey_size 67 -#define SetU2FCounter_size 6 -#define DebugLinkDecision_size 2 -#define DebugLinkGetState_size 0 -#define DebugLinkState_size (1468 + HDNodeType_size) -#define DebugLinkStop_size 0 -#define DebugLinkLog_size 300 -#define DebugLinkMemoryRead_size 12 -#define DebugLinkMemory_size 1027 -#define DebugLinkMemoryWrite_size 1035 -#define DebugLinkFlashErase_size 6 - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/firmware/protob/messages_map.h b/firmware/protob/messages_map.h deleted file mode 100644 index 958dfef57..000000000 --- a/firmware/protob/messages_map.h +++ /dev/null @@ -1,90 +0,0 @@ - // This file is automatically generated by messages_map.py -- DO NOT EDIT! - - // in messages - - { 'n', 'i', MessageType_MessageType_Initialize, Initialize_fields, (void (*)(void *)) fsm_msgInitialize }, - { 'n', 'i', MessageType_MessageType_Ping, Ping_fields, (void (*)(void *)) fsm_msgPing }, - { 'n', 'i', MessageType_MessageType_ChangePin, ChangePin_fields, (void (*)(void *)) fsm_msgChangePin }, - { 'n', 'i', MessageType_MessageType_WipeDevice, WipeDevice_fields, (void (*)(void *)) fsm_msgWipeDevice }, - // Message FirmwareErase is used in bootloader mode only - // Message FirmwareUpload is used in bootloader mode only - { 'n', 'i', MessageType_MessageType_GetEntropy, GetEntropy_fields, (void (*)(void *)) fsm_msgGetEntropy }, - { 'n', 'i', MessageType_MessageType_GetPublicKey, GetPublicKey_fields, (void (*)(void *)) fsm_msgGetPublicKey }, - { 'n', 'i', MessageType_MessageType_LoadDevice, LoadDevice_fields, (void (*)(void *)) fsm_msgLoadDevice }, - { 'n', 'i', MessageType_MessageType_ResetDevice, ResetDevice_fields, (void (*)(void *)) fsm_msgResetDevice }, - { 'n', 'i', MessageType_MessageType_SignTx, SignTx_fields, (void (*)(void *)) fsm_msgSignTx }, - // Message SimpleSignTx is deprecated - // Message PinMatrixAck is used in tiny mode - { 'n', 'i', MessageType_MessageType_Cancel, Cancel_fields, (void (*)(void *)) fsm_msgCancel }, - { 'n', 'i', MessageType_MessageType_TxAck, TxAck_fields, (void (*)(void *)) fsm_msgTxAck }, - { 'n', 'i', MessageType_MessageType_CipherKeyValue, CipherKeyValue_fields, (void (*)(void *)) fsm_msgCipherKeyValue }, - { 'n', 'i', MessageType_MessageType_ClearSession, ClearSession_fields, (void (*)(void *)) fsm_msgClearSession }, - { 'n', 'i', MessageType_MessageType_ApplySettings, ApplySettings_fields, (void (*)(void *)) fsm_msgApplySettings }, - // Message ButtonAck is used in tiny mode - { 'n', 'i', MessageType_MessageType_ApplyFlags, ApplyFlags_fields, (void (*)(void *)) fsm_msgApplyFlags }, - { 'n', 'i', MessageType_MessageType_GetAddress, GetAddress_fields, (void (*)(void *)) fsm_msgGetAddress }, - // Message SelfTest is used in bootloader mode only - { 'n', 'i', MessageType_MessageType_BackupDevice, BackupDevice_fields, (void (*)(void *)) fsm_msgBackupDevice }, - { 'n', 'i', MessageType_MessageType_EntropyAck, EntropyAck_fields, (void (*)(void *)) fsm_msgEntropyAck }, - { 'n', 'i', MessageType_MessageType_SignMessage, SignMessage_fields, (void (*)(void *)) fsm_msgSignMessage }, - { 'n', 'i', MessageType_MessageType_VerifyMessage, VerifyMessage_fields, (void (*)(void *)) fsm_msgVerifyMessage }, - // Message PassphraseAck is used in tiny mode - // Message EstimateTxSize is deprecated - { 'n', 'i', MessageType_MessageType_RecoveryDevice, RecoveryDevice_fields, (void (*)(void *)) fsm_msgRecoveryDevice }, - { 'n', 'i', MessageType_MessageType_WordAck, WordAck_fields, (void (*)(void *)) fsm_msgWordAck }, - // Message EncryptMessage is deprecated - // Message DecryptMessage is deprecated - { 'n', 'i', MessageType_MessageType_SignIdentity, SignIdentity_fields, (void (*)(void *)) fsm_msgSignIdentity }, - { 'n', 'i', MessageType_MessageType_GetFeatures, GetFeatures_fields, (void (*)(void *)) fsm_msgGetFeatures }, - { 'n', 'i', MessageType_MessageType_EthereumGetAddress, EthereumGetAddress_fields, (void (*)(void *)) fsm_msgEthereumGetAddress }, - { 'n', 'i', MessageType_MessageType_EthereumSignTx, EthereumSignTx_fields, (void (*)(void *)) fsm_msgEthereumSignTx }, - { 'n', 'i', MessageType_MessageType_EthereumTxAck, EthereumTxAck_fields, (void (*)(void *)) fsm_msgEthereumTxAck }, - { 'n', 'i', MessageType_MessageType_GetECDHSessionKey, GetECDHSessionKey_fields, (void (*)(void *)) fsm_msgGetECDHSessionKey }, - { 'n', 'i', MessageType_MessageType_SetU2FCounter, SetU2FCounter_fields, (void (*)(void *)) fsm_msgSetU2FCounter }, - { 'n', 'i', MessageType_MessageType_EthereumSignMessage, EthereumSignMessage_fields, (void (*)(void *)) fsm_msgEthereumSignMessage }, - { 'n', 'i', MessageType_MessageType_EthereumVerifyMessage, EthereumVerifyMessage_fields, (void (*)(void *)) fsm_msgEthereumVerifyMessage }, - - // out messages - - { 'n', 'o', MessageType_MessageType_Success, Success_fields, 0 }, - { 'n', 'o', MessageType_MessageType_Failure, Failure_fields, 0 }, - // Message FirmwareRequest is used in bootloader mode only - { 'n', 'o', MessageType_MessageType_Entropy, Entropy_fields, 0 }, - { 'n', 'o', MessageType_MessageType_PublicKey, PublicKey_fields, 0 }, - { 'n', 'o', MessageType_MessageType_Features, Features_fields, 0 }, - { 'n', 'o', MessageType_MessageType_PinMatrixRequest, PinMatrixRequest_fields, 0 }, - { 'n', 'o', MessageType_MessageType_TxRequest, TxRequest_fields, 0 }, - { 'n', 'o', MessageType_MessageType_ButtonRequest, ButtonRequest_fields, 0 }, - { 'n', 'o', MessageType_MessageType_Address, Address_fields, 0 }, - { 'n', 'o', MessageType_MessageType_EntropyRequest, EntropyRequest_fields, 0 }, - { 'n', 'o', MessageType_MessageType_MessageSignature, MessageSignature_fields, 0 }, - { 'n', 'o', MessageType_MessageType_PassphraseRequest, PassphraseRequest_fields, 0 }, - // Message TxSize is deprecated - { 'n', 'o', MessageType_MessageType_WordRequest, WordRequest_fields, 0 }, - { 'n', 'o', MessageType_MessageType_CipheredKeyValue, CipheredKeyValue_fields, 0 }, - // Message EncryptedMessage is deprecated - // Message DecryptedMessage is deprecated - { 'n', 'o', MessageType_MessageType_SignedIdentity, SignedIdentity_fields, 0 }, - { 'n', 'o', MessageType_MessageType_EthereumAddress, EthereumAddress_fields, 0 }, - { 'n', 'o', MessageType_MessageType_EthereumTxRequest, EthereumTxRequest_fields, 0 }, - { 'n', 'o', MessageType_MessageType_ECDHSessionKey, ECDHSessionKey_fields, 0 }, - { 'n', 'o', MessageType_MessageType_EthereumMessageSignature, EthereumMessageSignature_fields, 0 }, - -#if DEBUG_LINK - - // debug in messages - - // Message DebugLinkDecision is used in tiny mode - { 'd', 'i', MessageType_MessageType_DebugLinkGetState, DebugLinkGetState_fields, (void (*)(void *)) fsm_msgDebugLinkGetState }, - { 'd', 'i', MessageType_MessageType_DebugLinkStop, DebugLinkStop_fields, (void (*)(void *)) fsm_msgDebugLinkStop }, - { 'd', 'i', MessageType_MessageType_DebugLinkMemoryRead, DebugLinkMemoryRead_fields, (void (*)(void *)) fsm_msgDebugLinkMemoryRead }, - { 'd', 'i', MessageType_MessageType_DebugLinkMemoryWrite, DebugLinkMemoryWrite_fields, (void (*)(void *)) fsm_msgDebugLinkMemoryWrite }, - { 'd', 'i', MessageType_MessageType_DebugLinkFlashErase, DebugLinkFlashErase_fields, (void (*)(void *)) fsm_msgDebugLinkFlashErase }, - - // debug out messages - - { 'd', 'o', MessageType_MessageType_DebugLinkState, DebugLinkState_fields, 0 }, - { 'd', 'o', MessageType_MessageType_DebugLinkLog, DebugLinkLog_fields, 0 }, - { 'd', 'o', MessageType_MessageType_DebugLinkMemory, DebugLinkMemory_fields, 0 }, - -#endif diff --git a/firmware/protob/pb.h b/firmware/protob/pb.h deleted file mode 100644 index dedcfe46a..000000000 --- a/firmware/protob/pb.h +++ /dev/null @@ -1,519 +0,0 @@ -/* Common parts of the nanopb library. Most of these are quite low-level - * stuff. For the high-level interface, see pb_encode.h and pb_decode.h. - */ - -#ifndef _PB_H_ -#define _PB_H_ - -/***************************************************************** - * Nanopb compilation time options. You can change these here by * - * uncommenting the lines, or on the compiler command line. * - *****************************************************************/ - -/* Enable support for dynamically allocated fields */ -/* #define PB_ENABLE_MALLOC 1 */ - -/* Define this if your CPU architecture is big endian, i.e. it - * stores the most-significant byte first. */ -/* #define __BIG_ENDIAN__ 1 */ - -/* Increase the number of required fields that are tracked. - * A compiler warning will tell if you need this. */ -/* #define PB_MAX_REQUIRED_FIELDS 256 */ - -/* Add support for tag numbers > 255 and fields larger than 255 bytes. */ -/* #define PB_FIELD_16BIT 1 */ - -/* Add support for tag numbers > 65536 and fields larger than 65536 bytes. */ -/* #define PB_FIELD_32BIT 1 */ - -/* Disable support for error messages in order to save some code space. */ -/* #define PB_NO_ERRMSG 1 */ - -/* Disable support for custom streams (support only memory buffers). */ -/* #define PB_BUFFER_ONLY 1 */ - -/* Switch back to the old-style callback function signature. - * This was the default until nanopb-0.2.1. */ -/* #define PB_OLD_CALLBACK_STYLE */ - - -/****************************************************************** - * You usually don't need to change anything below this line. * - * Feel free to look around and use the defined macros, though. * - ******************************************************************/ - - -/* Version of the nanopb library. Just in case you want to check it in - * your own program. */ -#define NANOPB_VERSION nanopb-0.2.9.3 - -/* Include all the system headers needed by nanopb. You will need the - * definitions of the following: - * - strlen, memcpy, memset functions - * - [u]int8_t, [u]int16_t, [u]int32_t, [u]int64_t - * - size_t - * - bool - * - * If you don't have the standard header files, you can instead provide - * a custom header that defines or includes all this. In that case, - * define PB_SYSTEM_HEADER to the path of this file. - */ -#ifdef PB_SYSTEM_HEADER -#include PB_SYSTEM_HEADER -#else -#include -#include -#include -#include - -#ifdef PB_ENABLE_MALLOC -#include -#endif -#endif - -/* Macro for defining packed structures (compiler dependent). - * This just reduces memory requirements, but is not required. - */ -#if defined(__GNUC__) || defined(__clang__) - /* For GCC and clang */ -# define PB_PACKED_STRUCT_START -# define PB_PACKED_STRUCT_END -# define pb_packed __attribute__((packed)) -#elif defined(__ICCARM__) || defined(__CC_ARM) - /* For IAR ARM and Keil MDK-ARM compilers */ -# define PB_PACKED_STRUCT_START _Pragma("pack(push, 1)") -# define PB_PACKED_STRUCT_END _Pragma("pack(pop)") -# define pb_packed -#elif defined(_MSC_VER) && (_MSC_VER >= 1500) - /* For Microsoft Visual C++ */ -# define PB_PACKED_STRUCT_START __pragma(pack(push, 1)) -# define PB_PACKED_STRUCT_END __pragma(pack(pop)) -# define pb_packed -#else - /* Unknown compiler */ -# define PB_PACKED_STRUCT_START -# define PB_PACKED_STRUCT_END -# define pb_packed -#endif - -/* Handly macro for suppressing unreferenced-parameter compiler warnings. */ -#ifndef UNUSED -#define UNUSED(x) (void)(x) -#endif - -/* Compile-time assertion, used for checking compatible compilation options. - * If this does not work properly on your compiler, use #define STATIC_ASSERT - * to disable it. - * - * But before doing that, check carefully the error message / place where it - * comes from to see if the error has a real cause. Unfortunately the error - * message is not always very clear to read, but you can see the reason better - * in the place where the STATIC_ASSERT macro was called. - */ -#ifndef STATIC_ASSERT -#define STATIC_ASSERT(COND,MSG) typedef char STATIC_ASSERT_MSG(MSG, __LINE__, __COUNTER__)[(COND)?1:-1]; -#define STATIC_ASSERT_MSG(MSG, LINE, COUNTER) STATIC_ASSERT_MSG_(MSG, LINE, COUNTER) -#define STATIC_ASSERT_MSG_(MSG, LINE, COUNTER) static_assertion_##MSG##LINE##COUNTER -#endif - -/* Number of required fields to keep track of. */ -#ifndef PB_MAX_REQUIRED_FIELDS -#define PB_MAX_REQUIRED_FIELDS 64 -#endif - -#if PB_MAX_REQUIRED_FIELDS < 64 -#error You should not lower PB_MAX_REQUIRED_FIELDS from the default value (64). -#endif - -/* List of possible field types. These are used in the autogenerated code. - * Least-significant 4 bits tell the scalar type - * Most-significant 4 bits specify repeated/required/packed etc. - */ - -typedef uint8_t pb_type_t; - -/**** Field data types ****/ - -/* Numeric types */ -#define PB_LTYPE_VARINT 0x00 /* int32, int64, enum, bool */ -#define PB_LTYPE_UVARINT 0x01 /* uint32, uint64 */ -#define PB_LTYPE_SVARINT 0x02 /* sint32, sint64 */ -#define PB_LTYPE_FIXED32 0x03 /* fixed32, sfixed32, float */ -#define PB_LTYPE_FIXED64 0x04 /* fixed64, sfixed64, double */ - -/* Marker for last packable field type. */ -#define PB_LTYPE_LAST_PACKABLE 0x04 - -/* Byte array with pre-allocated buffer. - * data_size is the length of the allocated PB_BYTES_ARRAY structure. */ -#define PB_LTYPE_BYTES 0x05 - -/* String with pre-allocated buffer. - * data_size is the maximum length. */ -#define PB_LTYPE_STRING 0x06 - -/* Submessage - * submsg_fields is pointer to field descriptions */ -#define PB_LTYPE_SUBMESSAGE 0x07 - -/* Extension pseudo-field - * The field contains a pointer to pb_extension_t */ -#define PB_LTYPE_EXTENSION 0x08 - -/* Number of declared LTYPES */ -#define PB_LTYPES_COUNT 9 -#define PB_LTYPE_MASK 0x0F - -/**** Field repetition rules ****/ - -#define PB_HTYPE_REQUIRED 0x00 -#define PB_HTYPE_OPTIONAL 0x10 -#define PB_HTYPE_REPEATED 0x20 -#define PB_HTYPE_MASK 0x30 - -/**** Field allocation types ****/ - -#define PB_ATYPE_STATIC 0x00 -#define PB_ATYPE_POINTER 0x80 -#define PB_ATYPE_CALLBACK 0x40 -#define PB_ATYPE_MASK 0xC0 - -#define PB_ATYPE(x) ((x) & PB_ATYPE_MASK) -#define PB_HTYPE(x) ((x) & PB_HTYPE_MASK) -#define PB_LTYPE(x) ((x) & PB_LTYPE_MASK) - -/* Data type used for storing sizes of struct fields - * and array counts. - */ -#if defined(PB_FIELD_32BIT) - typedef uint32_t pb_size_t; - typedef int32_t pb_ssize_t; -#elif defined(PB_FIELD_16BIT) - typedef uint16_t pb_size_t; - typedef int16_t pb_ssize_t; -#else - typedef uint8_t pb_size_t; - typedef int8_t pb_ssize_t; -#endif - -/* This structure is used in auto-generated constants - * to specify struct fields. - * You can change field sizes if you need structures - * larger than 256 bytes or field tags larger than 256. - * The compiler should complain if your .proto has such - * structures. Fix that by defining PB_FIELD_16BIT or - * PB_FIELD_32BIT. - */ -PB_PACKED_STRUCT_START -typedef struct _pb_field_t pb_field_t; -struct _pb_field_t { - pb_size_t tag; - pb_type_t type; - pb_size_t data_offset; /* Offset of field data, relative to previous field. */ - pb_ssize_t size_offset; /* Offset of array size or has-boolean, relative to data */ - pb_size_t data_size; /* Data size in bytes for a single item */ - pb_size_t array_size; /* Maximum number of entries in array */ - - /* Field definitions for submessage - * OR default value for all other non-array, non-callback types - * If null, then field will zeroed. */ - const void *ptr; -} pb_packed; -PB_PACKED_STRUCT_END - -/* Make sure that the standard integer types are of the expected sizes. - * All kinds of things may break otherwise.. atleast all fixed* types. - * - * If you get errors here, it probably means that your stdint.h is not - * correct for your platform. - */ -STATIC_ASSERT(sizeof(int8_t) == 1, INT8_T_WRONG_SIZE) -STATIC_ASSERT(sizeof(uint8_t) == 1, UINT8_T_WRONG_SIZE) -STATIC_ASSERT(sizeof(int16_t) == 2, INT16_T_WRONG_SIZE) -STATIC_ASSERT(sizeof(uint16_t) == 2, UINT16_T_WRONG_SIZE) -STATIC_ASSERT(sizeof(int32_t) == 4, INT32_T_WRONG_SIZE) -STATIC_ASSERT(sizeof(uint32_t) == 4, UINT32_T_WRONG_SIZE) -STATIC_ASSERT(sizeof(int64_t) == 8, INT64_T_WRONG_SIZE) -STATIC_ASSERT(sizeof(uint64_t) == 8, UINT64_T_WRONG_SIZE) - -/* This structure is used for 'bytes' arrays. - * It has the number of bytes in the beginning, and after that an array. - * Note that actual structs used will have a different length of bytes array. - */ -#define PB_BYTES_ARRAY_T(n) struct { size_t size; uint8_t bytes[n]; } -#define PB_BYTES_ARRAY_T_ALLOCSIZE(n) ((size_t)n + offsetof(pb_bytes_array_t, bytes)) - -struct _pb_bytes_array_t { - size_t size; - uint8_t bytes[1]; -}; -typedef struct _pb_bytes_array_t pb_bytes_array_t; - -/* This structure is used for giving the callback function. - * It is stored in the message structure and filled in by the method that - * calls pb_decode. - * - * The decoding callback will be given a limited-length stream - * If the wire type was string, the length is the length of the string. - * If the wire type was a varint/fixed32/fixed64, the length is the length - * of the actual value. - * The function may be called multiple times (especially for repeated types, - * but also otherwise if the message happens to contain the field multiple - * times.) - * - * The encoding callback will receive the actual output stream. - * It should write all the data in one call, including the field tag and - * wire type. It can write multiple fields. - * - * The callback can be null if you want to skip a field. - */ -typedef struct _pb_istream_t pb_istream_t; -typedef struct _pb_ostream_t pb_ostream_t; -typedef struct _pb_callback_t pb_callback_t; -struct _pb_callback_t { -#ifdef PB_OLD_CALLBACK_STYLE - /* Deprecated since nanopb-0.2.1 */ - union { - bool (*decode)(pb_istream_t *stream, const pb_field_t *field, void *arg); - bool (*encode)(pb_ostream_t *stream, const pb_field_t *field, const void *arg); - } funcs; -#else - /* New function signature, which allows modifying arg contents in callback. */ - union { - bool (*decode)(pb_istream_t *stream, const pb_field_t *field, void **arg); - bool (*encode)(pb_ostream_t *stream, const pb_field_t *field, void * const *arg); - } funcs; -#endif - - /* Free arg for use by callback */ - void *arg; -}; - -/* Wire types. Library user needs these only in encoder callbacks. */ -typedef enum { - PB_WT_VARINT = 0, - PB_WT_64BIT = 1, - PB_WT_STRING = 2, - PB_WT_32BIT = 5 -} pb_wire_type_t; - -/* Structure for defining the handling of unknown/extension fields. - * Usually the pb_extension_type_t structure is automatically generated, - * while the pb_extension_t structure is created by the user. However, - * if you want to catch all unknown fields, you can also create a custom - * pb_extension_type_t with your own callback. - */ -typedef struct _pb_extension_type_t pb_extension_type_t; -typedef struct _pb_extension_t pb_extension_t; -struct _pb_extension_type_t { - /* Called for each unknown field in the message. - * If you handle the field, read off all of its data and return true. - * If you do not handle the field, do not read anything and return true. - * If you run into an error, return false. - * Set to NULL for default handler. - */ - bool (*decode)(pb_istream_t *stream, pb_extension_t *extension, - uint32_t tag, pb_wire_type_t wire_type); - - /* Called once after all regular fields have been encoded. - * If you have something to write, do so and return true. - * If you do not have anything to write, just return true. - * If you run into an error, return false. - * Set to NULL for default handler. - */ - bool (*encode)(pb_ostream_t *stream, const pb_extension_t *extension); - - /* Free field for use by the callback. */ - const void *arg; -}; - -struct _pb_extension_t { - /* Type describing the extension field. Usually you'll initialize - * this to a pointer to the automatically generated structure. */ - const pb_extension_type_t *type; - - /* Destination for the decoded data. This must match the datatype - * of the extension field. */ - void *dest; - - /* Pointer to the next extension handler, or NULL. - * If this extension does not match a field, the next handler is - * automatically called. */ - pb_extension_t *next; - - /* The decoder sets this to true if the extension was found. - * Ignored for encoding. */ - bool found; -}; - -/* Memory allocation functions to use. You can define pb_realloc and - * pb_free to custom functions if you want. */ -#ifdef PB_ENABLE_MALLOC -# ifndef pb_realloc -# define pb_realloc(ptr, size) realloc(ptr, size) -# endif -# ifndef pb_free -# define pb_free(ptr) free(ptr) -# endif -#endif - -/* These macros are used to declare pb_field_t's in the constant array. */ -/* Size of a structure member, in bytes. */ -#define pb_membersize(st, m) (sizeof ((st*)0)->m) -/* Number of entries in an array. */ -#define pb_arraysize(st, m) (pb_membersize(st, m) / pb_membersize(st, m[0])) -/* Delta from start of one member to the start of another member. */ -#define pb_delta(st, m1, m2) ((int)offsetof(st, m1) - (int)offsetof(st, m2)) -/* Marks the end of the field list */ -#define PB_LAST_FIELD {0,(pb_type_t) 0,0,0,0,0,0} - -/* Macros for filling in the data_offset field */ -/* data_offset for first field in a message */ -#define PB_DATAOFFSET_FIRST(st, m1, m2) (offsetof(st, m1)) -/* data_offset for subsequent fields */ -#define PB_DATAOFFSET_OTHER(st, m1, m2) (offsetof(st, m1) - offsetof(st, m2) - pb_membersize(st, m2)) -/* Choose first/other based on m1 == m2 (deprecated, remains for backwards compatibility) */ -#define PB_DATAOFFSET_CHOOSE(st, m1, m2) (int)(offsetof(st, m1) == offsetof(st, m2) \ - ? PB_DATAOFFSET_FIRST(st, m1, m2) \ - : PB_DATAOFFSET_OTHER(st, m1, m2)) - -/* Required fields are the simplest. They just have delta (padding) from - * previous field end, and the size of the field. Pointer is used for - * submessages and default values. - */ -#define PB_REQUIRED_STATIC(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_REQUIRED | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -/* Optional fields add the delta to the has_ variable. */ -#define PB_OPTIONAL_STATIC(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_OPTIONAL | ltype, \ - fd, \ - pb_delta(st, has_ ## m, m), \ - pb_membersize(st, m), 0, ptr} - -/* Repeated fields have a _count field and also the maximum number of entries. */ -#define PB_REPEATED_STATIC(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_REPEATED | ltype, \ - fd, \ - pb_delta(st, m ## _count, m), \ - pb_membersize(st, m[0]), \ - pb_arraysize(st, m), ptr} - -/* Allocated fields carry the size of the actual data, not the pointer */ -#define PB_REQUIRED_POINTER(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_REQUIRED | ltype, \ - fd, 0, pb_membersize(st, m[0]), 0, ptr} - -/* Optional fields don't need a has_ variable, as information would be redundant */ -#define PB_OPTIONAL_POINTER(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_OPTIONAL | ltype, \ - fd, 0, pb_membersize(st, m[0]), 0, ptr} - -/* Repeated fields have a _count field and a pointer to array of pointers */ -#define PB_REPEATED_POINTER(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_REPEATED | ltype, \ - fd, pb_delta(st, m ## _count, m), \ - pb_membersize(st, m[0]), 0, ptr} - -/* Callbacks are much like required fields except with special datatype. */ -#define PB_REQUIRED_CALLBACK(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_CALLBACK | PB_HTYPE_REQUIRED | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -#define PB_OPTIONAL_CALLBACK(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_CALLBACK | PB_HTYPE_OPTIONAL | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -#define PB_REPEATED_CALLBACK(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_CALLBACK | PB_HTYPE_REPEATED | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -/* Optional extensions don't have the has_ field, as that would be redundant. */ -#define PB_OPTEXT_STATIC(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_OPTIONAL | ltype, \ - 0, \ - 0, \ - pb_membersize(st, m), 0, ptr} - -#define PB_OPTEXT_CALLBACK(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_CALLBACK | PB_HTYPE_OPTIONAL | ltype, \ - 0, 0, pb_membersize(st, m), 0, ptr} - -/* The mapping from protobuf types to LTYPEs is done using these macros. */ -#define PB_LTYPE_MAP_BOOL PB_LTYPE_VARINT -#define PB_LTYPE_MAP_BYTES PB_LTYPE_BYTES -#define PB_LTYPE_MAP_DOUBLE PB_LTYPE_FIXED64 -#define PB_LTYPE_MAP_ENUM PB_LTYPE_VARINT -#define PB_LTYPE_MAP_FIXED32 PB_LTYPE_FIXED32 -#define PB_LTYPE_MAP_FIXED64 PB_LTYPE_FIXED64 -#define PB_LTYPE_MAP_FLOAT PB_LTYPE_FIXED32 -#define PB_LTYPE_MAP_INT32 PB_LTYPE_VARINT -#define PB_LTYPE_MAP_INT64 PB_LTYPE_VARINT -#define PB_LTYPE_MAP_MESSAGE PB_LTYPE_SUBMESSAGE -#define PB_LTYPE_MAP_SFIXED32 PB_LTYPE_FIXED32 -#define PB_LTYPE_MAP_SFIXED64 PB_LTYPE_FIXED64 -#define PB_LTYPE_MAP_SINT32 PB_LTYPE_SVARINT -#define PB_LTYPE_MAP_SINT64 PB_LTYPE_SVARINT -#define PB_LTYPE_MAP_STRING PB_LTYPE_STRING -#define PB_LTYPE_MAP_UINT32 PB_LTYPE_UVARINT -#define PB_LTYPE_MAP_UINT64 PB_LTYPE_UVARINT -#define PB_LTYPE_MAP_EXTENSION PB_LTYPE_EXTENSION - -/* This is the actual macro used in field descriptions. - * It takes these arguments: - * - Field tag number - * - Field type: BOOL, BYTES, DOUBLE, ENUM, FIXED32, FIXED64, - * FLOAT, INT32, INT64, MESSAGE, SFIXED32, SFIXED64 - * SINT32, SINT64, STRING, UINT32, UINT64 or EXTENSION - * - Field rules: REQUIRED, OPTIONAL or REPEATED - * - Allocation: STATIC or CALLBACK - * - Message name - * - Field name - * - Previous field name (or field name again for first field) - * - Pointer to default value or submsg fields. - */ - -#define PB_FIELD(tag, type, rules, allocation, message, field, prevfield, ptr) \ - PB_ ## rules ## _ ## allocation(tag, message, field, \ - PB_DATAOFFSET_CHOOSE(message, field, prevfield), \ - PB_LTYPE_MAP_ ## type, ptr) - -/* This is a new version of the macro used by nanopb generator from - * version 0.2.3 onwards. It avoids the use of a ternary expression in - * the initialization, which confused some compilers. - * - * - Placement: FIRST or OTHER, depending on if this is the first field in structure. - * - */ -#define PB_FIELD2(tag, type, rules, allocation, placement, message, field, prevfield, ptr) \ - PB_ ## rules ## _ ## allocation(tag, message, field, \ - PB_DATAOFFSET_ ## placement(message, field, prevfield), \ - PB_LTYPE_MAP_ ## type, ptr) - - -/* These macros are used for giving out error messages. - * They are mostly a debugging aid; the main error information - * is the true/false return value from functions. - * Some code space can be saved by disabling the error - * messages if not used. - */ -#ifdef PB_NO_ERRMSG -#define PB_RETURN_ERROR(stream,msg) \ - do {\ - UNUSED(stream); \ - return false; \ - } while(0) -#define PB_GET_ERROR(stream) "(errmsg disabled)" -#else -#define PB_RETURN_ERROR(stream,msg) \ - do {\ - if ((stream)->errmsg == NULL) \ - (stream)->errmsg = (msg); \ - return false; \ - } while(0) -#define PB_GET_ERROR(stream) ((stream)->errmsg ? (stream)->errmsg : "(none)") -#endif - -#endif diff --git a/firmware/protob/pb.h b/firmware/protob/pb.h new file mode 120000 index 000000000..835188c42 --- /dev/null +++ b/firmware/protob/pb.h @@ -0,0 +1 @@ +../../vendor/nanopb/pb.h \ No newline at end of file diff --git a/firmware/protob/pb_decode.c b/firmware/protob/pb_decode.c deleted file mode 100644 index 307bbc459..000000000 --- a/firmware/protob/pb_decode.c +++ /dev/null @@ -1,1267 +0,0 @@ -/* pb_decode.c -- decode a protobuf using minimal resources - * - * 2011 Petteri Aimonen - */ - -/* Use the GCC warn_unused_result attribute to check that all return values - * are propagated correctly. On other compilers and gcc before 3.4.0 just - * ignore the annotation. - */ -#if !defined(__GNUC__) || ( __GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 4) - #define checkreturn -#else - #define checkreturn __attribute__((warn_unused_result)) -#endif - -#include "pb.h" -#include "pb_decode.h" - -/************************************** - * Declarations internal to this file * - **************************************/ - -/* Iterator for pb_field_t list */ -typedef struct { - const pb_field_t *start; /* Start of the pb_field_t array */ - const pb_field_t *pos; /* Current position of the iterator */ - unsigned field_index; /* Zero-based index of the field. */ - unsigned required_field_index; /* Zero-based index that counts only the required fields */ - void *dest_struct; /* Pointer to the destination structure to decode to */ - void *pData; /* Pointer where to store current field value */ - void *pSize; /* Pointer where to store the size of current array field */ -} pb_field_iterator_t; - -typedef bool (*pb_decoder_t)(pb_istream_t *stream, const pb_field_t *field, void *dest) checkreturn; - -static bool checkreturn buf_read(pb_istream_t *stream, uint8_t *buf, size_t count); -static bool checkreturn pb_decode_varint32(pb_istream_t *stream, uint32_t *dest); -static bool checkreturn read_raw_value(pb_istream_t *stream, pb_wire_type_t wire_type, uint8_t *buf, size_t *size); -static void pb_field_init(pb_field_iterator_t *iter, const pb_field_t *fields, void *dest_struct); -static bool pb_field_next(pb_field_iterator_t *iter); -static bool checkreturn pb_field_find(pb_field_iterator_t *iter, uint32_t tag); -static bool checkreturn decode_static_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iterator_t *iter); -static bool checkreturn decode_callback_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iterator_t *iter); -static bool checkreturn decode_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iterator_t *iter); -static void iter_from_extension(pb_field_iterator_t *iter, pb_extension_t *extension); -static bool checkreturn default_extension_decoder(pb_istream_t *stream, pb_extension_t *extension, uint32_t tag, pb_wire_type_t wire_type); -static bool checkreturn decode_extension(pb_istream_t *stream, uint32_t tag, pb_wire_type_t wire_type, pb_field_iterator_t *iter); -static bool checkreturn find_extension_field(pb_field_iterator_t *iter); -static void pb_message_set_to_defaults(const pb_field_t fields[], void *dest_struct); -static bool checkreturn pb_dec_varint(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_uvarint(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_svarint(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_fixed32(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_fixed64(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_bytes(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_string(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_submessage(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_skip_varint(pb_istream_t *stream); -static bool checkreturn pb_skip_string(pb_istream_t *stream); - -#ifdef PB_ENABLE_MALLOC -static bool checkreturn allocate_field(pb_istream_t *stream, void *pData, size_t data_size, size_t array_size); -static void pb_release_single_field(const pb_field_iterator_t *iter); -#endif - -/* --- Function pointers to field decoders --- - * Order in the array must match pb_action_t LTYPE numbering. - */ -static const pb_decoder_t PB_DECODERS[PB_LTYPES_COUNT] = { - &pb_dec_varint, - &pb_dec_uvarint, - &pb_dec_svarint, - &pb_dec_fixed32, - &pb_dec_fixed64, - - &pb_dec_bytes, - &pb_dec_string, - &pb_dec_submessage, - NULL /* extensions */ -}; - -/******************************* - * pb_istream_t implementation * - *******************************/ - -static bool checkreturn buf_read(pb_istream_t *stream, uint8_t *buf, size_t count) -{ - uint8_t *source = (uint8_t*)stream->state; - stream->state = source + count; - - if (buf != NULL) - { - while (count--) - *buf++ = *source++; - } - - return true; -} - -bool checkreturn pb_read(pb_istream_t *stream, uint8_t *buf, size_t count) -{ -#ifndef PB_BUFFER_ONLY - if (buf == NULL && stream->callback != buf_read) - { - /* Skip input bytes */ - uint8_t tmp[16]; - while (count > 16) - { - if (!pb_read(stream, tmp, 16)) - return false; - - count -= 16; - } - - return pb_read(stream, tmp, count); - } -#endif - - if (stream->bytes_left < count) - PB_RETURN_ERROR(stream, "end-of-stream"); - -#ifndef PB_BUFFER_ONLY - if (!stream->callback(stream, buf, count)) - PB_RETURN_ERROR(stream, "io error"); -#else - if (!buf_read(stream, buf, count)) - return false; -#endif - - stream->bytes_left -= count; - return true; -} - -/* Read a single byte from input stream. buf may not be NULL. - * This is an optimization for the varint decoding. */ -static bool checkreturn pb_readbyte(pb_istream_t *stream, uint8_t *buf) -{ - if (stream->bytes_left == 0) - PB_RETURN_ERROR(stream, "end-of-stream"); - -#ifndef PB_BUFFER_ONLY - if (!stream->callback(stream, buf, 1)) - PB_RETURN_ERROR(stream, "io error"); -#else - *buf = *(uint8_t*)stream->state; - stream->state = (uint8_t*)stream->state + 1; -#endif - - stream->bytes_left--; - - return true; -} - -pb_istream_t pb_istream_from_buffer(const uint8_t *buf, size_t bufsize) -{ - pb_istream_t stream; -#ifdef PB_BUFFER_ONLY - stream.callback = NULL; -#else - stream.callback = &buf_read; -#endif - stream.state = buf; - stream.bytes_left = bufsize; -#ifndef PB_NO_ERRMSG - stream.errmsg = NULL; -#endif - return stream; -} - -/******************** - * Helper functions * - ********************/ - -static bool checkreturn pb_decode_varint32(pb_istream_t *stream, uint32_t *dest) -{ - uint8_t byte; - uint32_t result; - - if (!pb_readbyte(stream, &byte)) - return false; - - if ((byte & 0x80) == 0) - { - /* Quick case, 1 byte value */ - result = byte; - } - else - { - /* Multibyte case */ - uint8_t bitpos = 7; - result = byte & 0x7F; - - do - { - if (bitpos >= 32) - PB_RETURN_ERROR(stream, "varint overflow"); - - if (!pb_readbyte(stream, &byte)) - return false; - - result |= (uint32_t)(byte & 0x7F) << bitpos; - bitpos = (uint8_t)(bitpos + 7); - } while (byte & 0x80); - } - - *dest = result; - return true; -} - -bool checkreturn pb_decode_varint(pb_istream_t *stream, uint64_t *dest) -{ - uint8_t byte; - uint8_t bitpos = 0; - uint64_t result = 0; - - do - { - if (bitpos >= 64) - PB_RETURN_ERROR(stream, "varint overflow"); - - if (!pb_readbyte(stream, &byte)) - return false; - - result |= (uint64_t)(byte & 0x7F) << bitpos; - bitpos = (uint8_t)(bitpos + 7); - } while (byte & 0x80); - - *dest = result; - return true; -} - -bool checkreturn pb_skip_varint(pb_istream_t *stream) -{ - uint8_t byte; - do - { - if (!pb_read(stream, &byte, 1)) - return false; - } while (byte & 0x80); - return true; -} - -bool checkreturn pb_skip_string(pb_istream_t *stream) -{ - uint32_t length; - if (!pb_decode_varint32(stream, &length)) - return false; - - return pb_read(stream, NULL, length); -} - -bool checkreturn pb_decode_tag(pb_istream_t *stream, pb_wire_type_t *wire_type, uint32_t *tag, bool *eof) -{ - uint32_t temp; - *eof = false; - *wire_type = (pb_wire_type_t) 0; - *tag = 0; - - if (!pb_decode_varint32(stream, &temp)) - { - if (stream->bytes_left == 0) - *eof = true; - - return false; - } - - if (temp == 0) - { - *eof = true; /* Special feature: allow 0-terminated messages. */ - return false; - } - - *tag = temp >> 3; - *wire_type = (pb_wire_type_t)(temp & 7); - return true; -} - -bool checkreturn pb_skip_field(pb_istream_t *stream, pb_wire_type_t wire_type) -{ - switch (wire_type) - { - case PB_WT_VARINT: return pb_skip_varint(stream); - case PB_WT_64BIT: return pb_read(stream, NULL, 8); - case PB_WT_STRING: return pb_skip_string(stream); - case PB_WT_32BIT: return pb_read(stream, NULL, 4); - default: PB_RETURN_ERROR(stream, "invalid wire_type"); - } -} - -/* Read a raw value to buffer, for the purpose of passing it to callback as - * a substream. Size is maximum size on call, and actual size on return. - */ -static bool checkreturn read_raw_value(pb_istream_t *stream, pb_wire_type_t wire_type, uint8_t *buf, size_t *size) -{ - size_t max_size = *size; - switch (wire_type) - { - case PB_WT_VARINT: - *size = 0; - do - { - (*size)++; - if (*size > max_size) return false; - if (!pb_read(stream, buf, 1)) return false; - } while (*buf++ & 0x80); - return true; - - case PB_WT_64BIT: - *size = 8; - return pb_read(stream, buf, 8); - - case PB_WT_32BIT: - *size = 4; - return pb_read(stream, buf, 4); - - default: PB_RETURN_ERROR(stream, "invalid wire_type"); - } -} - -/* Decode string length from stream and return a substream with limited length. - * Remember to close the substream using pb_close_string_substream(). - */ -bool checkreturn pb_make_string_substream(pb_istream_t *stream, pb_istream_t *substream) -{ - uint32_t size; - if (!pb_decode_varint32(stream, &size)) - return false; - - *substream = *stream; - if (substream->bytes_left < size) - PB_RETURN_ERROR(stream, "parent stream too short"); - - substream->bytes_left = size; - stream->bytes_left -= size; - return true; -} - -void pb_close_string_substream(pb_istream_t *stream, pb_istream_t *substream) -{ - stream->state = substream->state; - -#ifndef PB_NO_ERRMSG - stream->errmsg = substream->errmsg; -#endif -} - -static void pb_field_init(pb_field_iterator_t *iter, const pb_field_t *fields, void *dest_struct) -{ - iter->start = iter->pos = fields; - iter->field_index = 0; - iter->required_field_index = 0; - iter->pData = (char*)dest_struct + iter->pos->data_offset; - iter->pSize = (char*)iter->pData + iter->pos->size_offset; - iter->dest_struct = dest_struct; -} - -static bool pb_field_next(pb_field_iterator_t *iter) -{ - bool notwrapped = true; - size_t prev_size = iter->pos->data_size; - - if (PB_ATYPE(iter->pos->type) == PB_ATYPE_STATIC && - PB_HTYPE(iter->pos->type) == PB_HTYPE_REPEATED) - { - prev_size *= iter->pos->array_size; - } - else if (PB_ATYPE(iter->pos->type) == PB_ATYPE_POINTER) - { - prev_size = sizeof(void*); - } - - if (iter->pos->tag == 0) - return false; /* Only happens with empty message types */ - - if (PB_HTYPE(iter->pos->type) == PB_HTYPE_REQUIRED) - iter->required_field_index++; - - iter->pos++; - iter->field_index++; - if (iter->pos->tag == 0) - { - iter->pos = iter->start; - iter->field_index = 0; - iter->required_field_index = 0; - iter->pData = iter->dest_struct; - prev_size = 0; - notwrapped = false; - } - - iter->pData = (char*)iter->pData + prev_size + iter->pos->data_offset; - iter->pSize = (char*)iter->pData + iter->pos->size_offset; - return notwrapped; -} - -static bool checkreturn pb_field_find(pb_field_iterator_t *iter, uint32_t tag) -{ - unsigned start = iter->field_index; - - do { - if (iter->pos->tag == tag && - PB_LTYPE(iter->pos->type) != PB_LTYPE_EXTENSION) - { - return true; - } - (void)pb_field_next(iter); - } while (iter->field_index != start); - - return false; -} - -/************************* - * Decode a single field * - *************************/ - -static bool checkreturn decode_static_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iterator_t *iter) -{ - pb_type_t type; - pb_decoder_t func; - - type = iter->pos->type; - func = PB_DECODERS[PB_LTYPE(type)]; - - switch (PB_HTYPE(type)) - { - case PB_HTYPE_REQUIRED: - return func(stream, iter->pos, iter->pData); - - case PB_HTYPE_OPTIONAL: - *(bool*)iter->pSize = true; - return func(stream, iter->pos, iter->pData); - - case PB_HTYPE_REPEATED: - if (wire_type == PB_WT_STRING - && PB_LTYPE(type) <= PB_LTYPE_LAST_PACKABLE) - { - /* Packed array */ - bool status = true; - size_t *size = (size_t*)iter->pSize; - pb_istream_t substream; - if (!pb_make_string_substream(stream, &substream)) - return false; - - while (substream.bytes_left > 0 && *size < iter->pos->array_size) - { - void *pItem = (uint8_t*)iter->pData + iter->pos->data_size * (*size); - if (!func(&substream, iter->pos, pItem)) - { - status = false; - break; - } - (*size)++; - } - pb_close_string_substream(stream, &substream); - - if (substream.bytes_left != 0) - PB_RETURN_ERROR(stream, "array overflow"); - - return status; - } - else - { - /* Repeated field */ - size_t *size = (size_t*)iter->pSize; - void *pItem = (uint8_t*)iter->pData + iter->pos->data_size * (*size); - if (*size >= iter->pos->array_size) - PB_RETURN_ERROR(stream, "array overflow"); - - (*size)++; - return func(stream, iter->pos, pItem); - } - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } -} - -#ifdef PB_ENABLE_MALLOC -/* Allocate storage for the field and store the pointer at iter->pData. - * array_size is the number of entries to reserve in an array. - * Zero size is not allowed, use pb_free() for releasing. - */ -static bool checkreturn allocate_field(pb_istream_t *stream, void *pData, size_t data_size, size_t array_size) -{ - void *ptr = *(void**)pData; - - if (data_size == 0 || array_size == 0) - PB_RETURN_ERROR(stream, "invalid size"); - - /* Check for multiplication overflows. - * This code avoids the costly division if the sizes are small enough. - * Multiplication is safe as long as only half of bits are set - * in either multiplicand. - */ - { - const size_t check_limit = (size_t)1 << (sizeof(size_t) * 4); - if (data_size >= check_limit || array_size >= check_limit) - { - const size_t size_max = (size_t)-1; - if (size_max / array_size < data_size) - { - PB_RETURN_ERROR(stream, "size too large"); - } - } - } - - /* Allocate new or expand previous allocation */ - /* Note: on failure the old pointer will remain in the structure, - * the message must be freed by caller also on error return. */ - ptr = pb_realloc(ptr, array_size * data_size); - if (ptr == NULL) - PB_RETURN_ERROR(stream, "realloc failed"); - - *(void**)pData = ptr; - return true; -} - -/* Clear a newly allocated item in case it contains a pointer, or is a submessage. */ -static void initialize_pointer_field(void *pItem, pb_field_iterator_t *iter) -{ - if (PB_LTYPE(iter->pos->type) == PB_LTYPE_STRING || - PB_LTYPE(iter->pos->type) == PB_LTYPE_BYTES) - { - *(void**)pItem = NULL; - } - else if (PB_LTYPE(iter->pos->type) == PB_LTYPE_SUBMESSAGE) - { - pb_message_set_to_defaults((const pb_field_t *) iter->pos->ptr, pItem); - } -} -#endif - -static bool checkreturn decode_pointer_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iterator_t *iter) -{ -#ifndef PB_ENABLE_MALLOC - UNUSED(wire_type); - UNUSED(iter); - PB_RETURN_ERROR(stream, "no malloc support"); -#else - pb_type_t type; - pb_decoder_t func; - - type = iter->pos->type; - func = PB_DECODERS[PB_LTYPE(type)]; - - switch (PB_HTYPE(type)) - { - case PB_HTYPE_REQUIRED: - case PB_HTYPE_OPTIONAL: - if (PB_LTYPE(type) == PB_LTYPE_SUBMESSAGE && - *(void**)iter->pData != NULL) - { - /* Duplicate field, have to release the old allocation first. */ - pb_release_single_field(iter); - } - - if (PB_LTYPE(type) == PB_LTYPE_STRING || - PB_LTYPE(type) == PB_LTYPE_BYTES) - { - return func(stream, iter->pos, iter->pData); - } - else - { - if (!allocate_field(stream, iter->pData, iter->pos->data_size, 1)) - return false; - - initialize_pointer_field(*(void**)iter->pData, iter); - return func(stream, iter->pos, *(void**)iter->pData); - } - - case PB_HTYPE_REPEATED: - if (wire_type == PB_WT_STRING - && PB_LTYPE(type) <= PB_LTYPE_LAST_PACKABLE) - { - /* Packed array, multiple items come in at once. */ - bool status = true; - size_t *size = (size_t*)iter->pSize; - size_t allocated_size = *size; - void *pItem; - pb_istream_t substream; - - if (!pb_make_string_substream(stream, &substream)) - return false; - - while (substream.bytes_left) - { - if (*size + 1 > allocated_size) - { - /* Allocate more storage. This tries to guess the - * number of remaining entries. Round the division - * upwards. */ - allocated_size += (substream.bytes_left - 1) / iter->pos->data_size + 1; - - if (!allocate_field(&substream, iter->pData, iter->pos->data_size, allocated_size)) - { - status = false; - break; - } - } - - /* Decode the array entry */ - pItem = *(uint8_t**)iter->pData + iter->pos->data_size * (*size); - initialize_pointer_field(pItem, iter); - if (!func(&substream, iter->pos, pItem)) - { - status = false; - break; - } - (*size)++; - } - pb_close_string_substream(stream, &substream); - - return status; - } - else - { - /* Normal repeated field, i.e. only one item at a time. */ - size_t *size = (size_t*)iter->pSize; - void *pItem; - - (*size)++; - if (!allocate_field(stream, iter->pData, iter->pos->data_size, *size)) - return false; - - pItem = *(uint8_t**)iter->pData + iter->pos->data_size * (*size - 1); - initialize_pointer_field(pItem, iter); - return func(stream, iter->pos, pItem); - } - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } -#endif -} - -static bool checkreturn decode_callback_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iterator_t *iter) -{ - pb_callback_t *pCallback = (pb_callback_t*)iter->pData; - -#ifdef PB_OLD_CALLBACK_STYLE - void *arg = pCallback->arg; -#else - void **arg = &(pCallback->arg); -#endif - - if (pCallback->funcs.decode == NULL) - return pb_skip_field(stream, wire_type); - - if (wire_type == PB_WT_STRING) - { - pb_istream_t substream; - - if (!pb_make_string_substream(stream, &substream)) - return false; - - do - { - if (!pCallback->funcs.decode(&substream, iter->pos, arg)) - PB_RETURN_ERROR(stream, "callback failed"); - } while (substream.bytes_left); - - pb_close_string_substream(stream, &substream); - return true; - } - else - { - /* Copy the single scalar value to stack. - * This is required so that we can limit the stream length, - * which in turn allows to use same callback for packed and - * not-packed fields. */ - pb_istream_t substream; - uint8_t buffer[10]; - size_t size = sizeof(buffer); - - if (!read_raw_value(stream, wire_type, buffer, &size)) - return false; - substream = pb_istream_from_buffer(buffer, size); - - return pCallback->funcs.decode(&substream, iter->pos, arg); - } -} - -static bool checkreturn decode_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iterator_t *iter) -{ - switch (PB_ATYPE(iter->pos->type)) - { - case PB_ATYPE_STATIC: - return decode_static_field(stream, wire_type, iter); - - case PB_ATYPE_POINTER: - return decode_pointer_field(stream, wire_type, iter); - - case PB_ATYPE_CALLBACK: - return decode_callback_field(stream, wire_type, iter); - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } -} - -static void iter_from_extension(pb_field_iterator_t *iter, pb_extension_t *extension) -{ - const pb_field_t *field = (const pb_field_t*)extension->type->arg; - - iter->start = field; - iter->pos = field; - iter->field_index = 0; - iter->required_field_index = 0; - iter->dest_struct = extension->dest; - iter->pData = extension->dest; - iter->pSize = &extension->found; -} - -/* Default handler for extension fields. Expects a pb_field_t structure - * in extension->type->arg. */ -static bool checkreturn default_extension_decoder(pb_istream_t *stream, - pb_extension_t *extension, uint32_t tag, pb_wire_type_t wire_type) -{ - const pb_field_t *field = (const pb_field_t*)extension->type->arg; - pb_field_iterator_t iter; - - if (field->tag != tag) - return true; - - iter_from_extension(&iter, extension); - return decode_field(stream, wire_type, &iter); -} - -/* Try to decode an unknown field as an extension field. Tries each extension - * decoder in turn, until one of them handles the field or loop ends. */ -static bool checkreturn decode_extension(pb_istream_t *stream, - uint32_t tag, pb_wire_type_t wire_type, pb_field_iterator_t *iter) -{ - pb_extension_t *extension = *(pb_extension_t* const *)iter->pData; - size_t pos = stream->bytes_left; - - while (extension != NULL && pos == stream->bytes_left) - { - bool status; - if (extension->type->decode) - status = extension->type->decode(stream, extension, tag, wire_type); - else - status = default_extension_decoder(stream, extension, tag, wire_type); - - if (!status) - return false; - - extension = extension->next; - } - - return true; -} - -/* Step through the iterator until an extension field is found or until all - * entries have been checked. There can be only one extension field per - * message. Returns false if no extension field is found. */ -static bool checkreturn find_extension_field(pb_field_iterator_t *iter) -{ - unsigned start = iter->field_index; - - do { - if (PB_LTYPE(iter->pos->type) == PB_LTYPE_EXTENSION) - return true; - (void)pb_field_next(iter); - } while (iter->field_index != start); - - return false; -} - -/* Initialize message fields to default values, recursively */ -static void pb_message_set_to_defaults(const pb_field_t fields[], void *dest_struct) -{ - pb_field_iterator_t iter; - pb_field_init(&iter, fields, dest_struct); - - do - { - pb_type_t type; - type = iter.pos->type; - - /* Avoid crash on empty message types (zero fields) */ - if (iter.pos->tag == 0) - continue; - - if (PB_ATYPE(type) == PB_ATYPE_STATIC) - { - if (PB_HTYPE(type) == PB_HTYPE_OPTIONAL) - { - /* Set has_field to false. Still initialize the optional field - * itself also. */ - *(bool*)iter.pSize = false; - } - else if (PB_HTYPE(type) == PB_HTYPE_REPEATED) - { - /* Set array count to 0, no need to initialize contents. */ - *(size_t*)iter.pSize = 0; - continue; - } - - if (PB_LTYPE(iter.pos->type) == PB_LTYPE_SUBMESSAGE) - { - /* Initialize submessage to defaults */ - pb_message_set_to_defaults((const pb_field_t *) iter.pos->ptr, iter.pData); - } - else if (iter.pos->ptr != NULL) - { - /* Initialize to default value */ - memcpy(iter.pData, iter.pos->ptr, iter.pos->data_size); - } - else - { - /* Initialize to zeros */ - memset(iter.pData, 0, iter.pos->data_size); - } - } - else if (PB_ATYPE(type) == PB_ATYPE_POINTER) - { - /* Initialize the pointer to NULL. */ - *(void**)iter.pData = NULL; - - /* Initialize array count to 0. */ - if (PB_HTYPE(type) == PB_HTYPE_REPEATED) - { - *(size_t*)iter.pSize = 0; - } - } - else if (PB_ATYPE(type) == PB_ATYPE_CALLBACK) - { - /* Don't overwrite callback */ - } - } while (pb_field_next(&iter)); -} - -/********************* - * Decode all fields * - *********************/ - -bool checkreturn pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct) -{ - uint8_t fields_seen[(PB_MAX_REQUIRED_FIELDS + 7) / 8] = {0, 0, 0, 0, 0, 0, 0, 0}; - uint32_t extension_range_start = 0; - pb_field_iterator_t iter; - - pb_field_init(&iter, fields, dest_struct); - - while (stream->bytes_left) - { - uint32_t tag; - pb_wire_type_t wire_type; - bool eof; - - if (!pb_decode_tag(stream, &wire_type, &tag, &eof)) - { - if (eof) - break; - else - return false; - } - - if (!pb_field_find(&iter, tag)) - { - /* No match found, check if it matches an extension. */ - if (tag >= extension_range_start) - { - if (!find_extension_field(&iter)) - extension_range_start = (uint32_t)-1; - else - extension_range_start = iter.pos->tag; - - if (tag >= extension_range_start) - { - size_t pos = stream->bytes_left; - - if (!decode_extension(stream, tag, wire_type, &iter)) - return false; - - if (pos != stream->bytes_left) - { - /* The field was handled */ - continue; - } - } - } - - /* No match found, skip data */ - if (!pb_skip_field(stream, wire_type)) - return false; - continue; - } - - if (PB_HTYPE(iter.pos->type) == PB_HTYPE_REQUIRED - && iter.required_field_index < PB_MAX_REQUIRED_FIELDS) - { - fields_seen[iter.required_field_index >> 3] |= (uint8_t)(1 << (iter.required_field_index & 7)); - } - - if (!decode_field(stream, wire_type, &iter)) - return false; - } - - /* Check that all required fields were present. */ - { - /* First figure out the number of required fields by - * seeking to the end of the field array. Usually we - * are already close to end after decoding. - */ - unsigned req_field_count; - pb_type_t last_type; - unsigned i; - do { - req_field_count = iter.required_field_index; - last_type = iter.pos->type; - } while (pb_field_next(&iter)); - - /* Fixup if last field was also required. */ - if (PB_HTYPE(last_type) == PB_HTYPE_REQUIRED && iter.pos->tag != 0) - req_field_count++; - - /* Check the whole bytes */ - for (i = 0; i < (req_field_count >> 3); i++) - { - if (fields_seen[i] != 0xFF) - PB_RETURN_ERROR(stream, "missing required field"); - } - - /* Check the remaining bits */ - if (fields_seen[req_field_count >> 3] != (0xFF >> (8 - (req_field_count & 7)))) - PB_RETURN_ERROR(stream, "missing required field"); - } - - return true; -} - -bool checkreturn pb_decode(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct) -{ - bool status; - pb_message_set_to_defaults(fields, dest_struct); - status = pb_decode_noinit(stream, fields, dest_struct); - -#ifdef PB_ENABLE_MALLOC - if (!status) - pb_release(fields, dest_struct); -#endif - - return status; -} - -bool pb_decode_delimited(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct) -{ - pb_istream_t substream; - bool status; - - if (!pb_make_string_substream(stream, &substream)) - return false; - - status = pb_decode(&substream, fields, dest_struct); - pb_close_string_substream(stream, &substream); - return status; -} - -#ifdef PB_ENABLE_MALLOC -static void pb_release_single_field(const pb_field_iterator_t *iter) -{ - pb_type_t type; - type = iter->pos->type; - - /* Release anything contained inside an extension or submsg. - * This has to be done even if the submsg itself is statically - * allocated. */ - if (PB_LTYPE(type) == PB_LTYPE_EXTENSION) - { - /* Release fields from all extensions in the linked list */ - pb_extension_t *ext = *(pb_extension_t**)iter->pData; - while (ext != NULL) - { - pb_field_iterator_t ext_iter; - iter_from_extension(&ext_iter, ext); - pb_release_single_field(&ext_iter); - ext = ext->next; - } - } - else if (PB_LTYPE(type) == PB_LTYPE_SUBMESSAGE) - { - /* Release fields in submessage or submsg array */ - void *pItem = iter->pData; - pb_size_t count = 1; - - if (PB_ATYPE(type) == PB_ATYPE_POINTER) - { - pItem = *(void**)iter->pData; - } - - if (PB_HTYPE(type) == PB_HTYPE_REPEATED) - { - count = *(pb_size_t*)iter->pSize; - - if (PB_ATYPE(type) == PB_ATYPE_STATIC && count > iter->pos->array_size) - { - /* Protect against corrupted _count fields */ - count = iter->pos->array_size; - } - } - - if (pItem) - { - while (count--) - { - pb_release((const pb_field_t*)iter->pos->ptr, pItem); - pItem = (uint8_t*)pItem + iter->pos->data_size; - } - } - } - - if (PB_ATYPE(type) == PB_ATYPE_POINTER) - { - if (PB_HTYPE(type) == PB_HTYPE_REPEATED && - (PB_LTYPE(type) == PB_LTYPE_STRING || - PB_LTYPE(type) == PB_LTYPE_BYTES)) - { - /* Release entries in repeated string or bytes array */ - void **pItem = *(void***)iter->pData; - pb_size_t count = *(pb_size_t*)iter->pSize; - while (count--) - { - pb_free(*pItem); - *pItem++ = NULL; - } - } - - if (PB_HTYPE(type) == PB_HTYPE_REPEATED) - { - /* We are going to release the array, so set the size to 0 */ - *(pb_size_t*)iter->pSize = 0; - } - - /* Release main item */ - pb_free(*(void**)iter->pData); - *(void**)iter->pData = NULL; - } -} - -void pb_release(const pb_field_t fields[], void *dest_struct) -{ - pb_field_iterator_t iter; - pb_field_init(&iter, fields, dest_struct); - - if (iter.pos->tag == 0) - return; /* Empty message type */ - - do - { - pb_release_single_field(&iter); - } while (pb_field_next(&iter)); -} -#endif - -/* Field decoders */ - -bool pb_decode_svarint(pb_istream_t *stream, int64_t *dest) -{ - uint64_t value; - if (!pb_decode_varint(stream, &value)) - return false; - - if (value & 1) - *dest = (int64_t)(~(value >> 1)); - else - *dest = (int64_t)(value >> 1); - - return true; -} - -bool pb_decode_fixed32(pb_istream_t *stream, void *dest) -{ - #ifdef __BIG_ENDIAN__ - uint8_t *bytes = (uint8_t*)dest; - uint8_t lebytes[4]; - - if (!pb_read(stream, lebytes, 4)) - return false; - - bytes[0] = lebytes[3]; - bytes[1] = lebytes[2]; - bytes[2] = lebytes[1]; - bytes[3] = lebytes[0]; - return true; - #else - return pb_read(stream, (uint8_t*)dest, 4); - #endif -} - -bool pb_decode_fixed64(pb_istream_t *stream, void *dest) -{ - #ifdef __BIG_ENDIAN__ - uint8_t *bytes = (uint8_t*)dest; - uint8_t lebytes[8]; - - if (!pb_read(stream, lebytes, 8)) - return false; - - bytes[0] = lebytes[7]; - bytes[1] = lebytes[6]; - bytes[2] = lebytes[5]; - bytes[3] = lebytes[4]; - bytes[4] = lebytes[3]; - bytes[5] = lebytes[2]; - bytes[6] = lebytes[1]; - bytes[7] = lebytes[0]; - return true; - #else - return pb_read(stream, (uint8_t*)dest, 8); - #endif -} - -static bool checkreturn pb_dec_varint(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - uint64_t value; - if (!pb_decode_varint(stream, &value)) - return false; - - switch (field->data_size) - { - case 1: *(int8_t*)dest = (int8_t)value; break; - case 2: *(int16_t*)dest = (int16_t)value; break; - case 4: *(int32_t*)dest = (int32_t)value; break; - case 8: *(int64_t*)dest = (int64_t)value; break; - default: PB_RETURN_ERROR(stream, "invalid data_size"); - } - - return true; -} - -static bool checkreturn pb_dec_uvarint(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - uint64_t value; - if (!pb_decode_varint(stream, &value)) - return false; - - switch (field->data_size) - { - case 4: *(uint32_t*)dest = (uint32_t)value; break; - case 8: *(uint64_t*)dest = value; break; - default: PB_RETURN_ERROR(stream, "invalid data_size"); - } - - return true; -} - -static bool checkreturn pb_dec_svarint(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - int64_t value; - if (!pb_decode_svarint(stream, &value)) - return false; - - switch (field->data_size) - { - case 4: *(int32_t*)dest = (int32_t)value; break; - case 8: *(int64_t*)dest = value; break; - default: PB_RETURN_ERROR(stream, "invalid data_size"); - } - - return true; -} - -static bool checkreturn pb_dec_fixed32(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - UNUSED(field); - return pb_decode_fixed32(stream, dest); -} - -static bool checkreturn pb_dec_fixed64(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - UNUSED(field); - return pb_decode_fixed64(stream, dest); -} - -static bool checkreturn pb_dec_bytes(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - uint32_t size; - size_t alloc_size; - pb_bytes_array_t *bdest; - - if (!pb_decode_varint32(stream, &size)) - return false; - - alloc_size = PB_BYTES_ARRAY_T_ALLOCSIZE(size); - if (size > alloc_size) - PB_RETURN_ERROR(stream, "size too large"); - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - { -#ifndef PB_ENABLE_MALLOC - PB_RETURN_ERROR(stream, "no malloc support"); -#else - if (!allocate_field(stream, dest, alloc_size, 1)) - return false; - bdest = *(pb_bytes_array_t**)dest; -#endif - } - else - { - if (alloc_size > field->data_size) - PB_RETURN_ERROR(stream, "bytes overflow"); - bdest = (pb_bytes_array_t*)dest; - } - - bdest->size = size; - - return pb_read(stream, bdest->bytes, size); -} - -static bool checkreturn pb_dec_string(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - uint32_t size; - size_t alloc_size; - bool status; - if (!pb_decode_varint32(stream, &size)) - return false; - - /* Space for null terminator */ - alloc_size = size + 1; - - if (alloc_size < size) - PB_RETURN_ERROR(stream, "size too large"); - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - { -#ifndef PB_ENABLE_MALLOC - PB_RETURN_ERROR(stream, "no malloc support"); -#else - if (!allocate_field(stream, dest, alloc_size, 1)) - return false; - dest = *(void**)dest; -#endif - } - else - { - if (alloc_size > field->data_size) - PB_RETURN_ERROR(stream, "string overflow"); - } - - status = pb_read(stream, (uint8_t*)dest, size); - *((uint8_t*)dest + size) = 0; - return status; -} - -static bool checkreturn pb_dec_submessage(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - bool status; - pb_istream_t substream; - const pb_field_t* submsg_fields = (const pb_field_t*)field->ptr; - - if (!pb_make_string_substream(stream, &substream)) - return false; - - if (field->ptr == NULL) - PB_RETURN_ERROR(stream, "invalid field descriptor"); - - /* New array entries need to be initialized, while required and optional - * submessages have already been initialized in the top-level pb_decode. */ - if (PB_HTYPE(field->type) == PB_HTYPE_REPEATED) - status = pb_decode(&substream, submsg_fields, dest); - else - status = pb_decode_noinit(&substream, submsg_fields, dest); - - pb_close_string_substream(stream, &substream); - return status; -} diff --git a/firmware/protob/pb_decode.c b/firmware/protob/pb_decode.c new file mode 120000 index 000000000..1114e7da0 --- /dev/null +++ b/firmware/protob/pb_decode.c @@ -0,0 +1 @@ +../../vendor/nanopb/pb_decode.c \ No newline at end of file diff --git a/firmware/protob/pb_decode.h b/firmware/protob/pb_decode.h deleted file mode 100644 index 45c0675fc..000000000 --- a/firmware/protob/pb_decode.h +++ /dev/null @@ -1,149 +0,0 @@ -/* pb_decode.h: Functions to decode protocol buffers. Depends on pb_decode.c. - * The main function is pb_decode. You also need an input stream, and the - * field descriptions created by nanopb_generator.py. - */ - -#ifndef _PB_DECODE_H_ -#define _PB_DECODE_H_ - -#include "pb.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Structure for defining custom input streams. You will need to provide - * a callback function to read the bytes from your storage, which can be - * for example a file or a network socket. - * - * The callback must conform to these rules: - * - * 1) Return false on IO errors. This will cause decoding to abort. - * 2) You can use state to store your own data (e.g. buffer pointer), - * and rely on pb_read to verify that no-body reads past bytes_left. - * 3) Your callback may be used with substreams, in which case bytes_left - * is different than from the main stream. Don't use bytes_left to compute - * any pointers. - */ -struct _pb_istream_t -{ -#ifdef PB_BUFFER_ONLY - /* Callback pointer is not used in buffer-only configuration. - * Having an int pointer here allows binary compatibility but - * gives an error if someone tries to assign callback function. - */ - int *callback; -#else - bool (*callback)(pb_istream_t *stream, uint8_t *buf, size_t count); -#endif - - const void *state; /* Free field for use by callback implementation */ - size_t bytes_left; - -#ifndef PB_NO_ERRMSG - const char *errmsg; -#endif -}; - -/*************************** - * Main decoding functions * - ***************************/ - -/* Decode a single protocol buffers message from input stream into a C structure. - * Returns true on success, false on any failure. - * The actual struct pointed to by dest must match the description in fields. - * Callback fields of the destination structure must be initialized by caller. - * All other fields will be initialized by this function. - * - * Example usage: - * MyMessage msg = {}; - * uint8_t buffer[64]; - * pb_istream_t stream; - * - * // ... read some data into buffer ... - * - * stream = pb_istream_from_buffer(buffer, count); - * pb_decode(&stream, MyMessage_fields, &msg); - */ -bool pb_decode(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct); - -/* Same as pb_decode, except does not initialize the destination structure - * to default values. This is slightly faster if you need no default values - * and just do memset(struct, 0, sizeof(struct)) yourself. - * - * This can also be used for 'merging' two messages, i.e. update only the - * fields that exist in the new message. - * - * Note: If this function returns with an error, it will not release any - * dynamically allocated fields. You will need to call pb_release() yourself. - */ -bool pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct); - -/* Same as pb_decode, except expects the stream to start with the message size - * encoded as varint. Corresponds to parseDelimitedFrom() in Google's - * protobuf API. - */ -bool pb_decode_delimited(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct); - -#ifdef PB_ENABLE_MALLOC -/* Release any allocated pointer fields. If you use dynamic allocation, you should - * call this for any successfully decoded message when you are done with it. If - * pb_decode() returns with an error, the message is already released. - */ -void pb_release(const pb_field_t fields[], void *dest_struct); -#endif - - -/************************************** - * Functions for manipulating streams * - **************************************/ - -/* Create an input stream for reading from a memory buffer. - * - * Alternatively, you can use a custom stream that reads directly from e.g. - * a file or a network socket. - */ -pb_istream_t pb_istream_from_buffer(const uint8_t *buf, size_t bufsize); - -/* Function to read from a pb_istream_t. You can use this if you need to - * read some custom header data, or to read data in field callbacks. - */ -bool pb_read(pb_istream_t *stream, uint8_t *buf, size_t count); - - -/************************************************ - * Helper functions for writing field callbacks * - ************************************************/ - -/* Decode the tag for the next field in the stream. Gives the wire type and - * field tag. At end of the message, returns false and sets eof to true. */ -bool pb_decode_tag(pb_istream_t *stream, pb_wire_type_t *wire_type, uint32_t *tag, bool *eof); - -/* Skip the field payload data, given the wire type. */ -bool pb_skip_field(pb_istream_t *stream, pb_wire_type_t wire_type); - -/* Decode an integer in the varint format. This works for bool, enum, int32, - * int64, uint32 and uint64 field types. */ -bool pb_decode_varint(pb_istream_t *stream, uint64_t *dest); - -/* Decode an integer in the zig-zagged svarint format. This works for sint32 - * and sint64. */ -bool pb_decode_svarint(pb_istream_t *stream, int64_t *dest); - -/* Decode a fixed32, sfixed32 or float value. You need to pass a pointer to - * a 4-byte wide C variable. */ -bool pb_decode_fixed32(pb_istream_t *stream, void *dest); - -/* Decode a fixed64, sfixed64 or double value. You need to pass a pointer to - * a 8-byte wide C variable. */ -bool pb_decode_fixed64(pb_istream_t *stream, void *dest); - -/* Make a limited-length substream for reading a PB_WT_STRING field. */ -bool pb_make_string_substream(pb_istream_t *stream, pb_istream_t *substream); -void pb_close_string_substream(pb_istream_t *stream, pb_istream_t *substream); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/firmware/protob/pb_decode.h b/firmware/protob/pb_decode.h new file mode 120000 index 000000000..d25f0ac14 --- /dev/null +++ b/firmware/protob/pb_decode.h @@ -0,0 +1 @@ +../../vendor/nanopb/pb_decode.h \ No newline at end of file diff --git a/firmware/protob/pb_encode.c b/firmware/protob/pb_encode.c deleted file mode 100644 index dc5a27349..000000000 --- a/firmware/protob/pb_encode.c +++ /dev/null @@ -1,667 +0,0 @@ -/* pb_encode.c -- encode a protobuf using minimal resources - * - * 2011 Petteri Aimonen - */ - -#include "pb.h" -#include "pb_encode.h" - -/* Use the GCC warn_unused_result attribute to check that all return values - * are propagated correctly. On other compilers and gcc before 3.4.0 just - * ignore the annotation. - */ -#if !defined(__GNUC__) || ( __GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 4) - #define checkreturn -#else - #define checkreturn __attribute__((warn_unused_result)) -#endif - -/************************************** - * Declarations internal to this file * - **************************************/ -typedef bool (*pb_encoder_t)(pb_ostream_t *stream, const pb_field_t *field, const void *src) checkreturn; - -static bool checkreturn buf_write(pb_ostream_t *stream, const uint8_t *buf, size_t count); -static bool checkreturn encode_array(pb_ostream_t *stream, const pb_field_t *field, const void *pData, size_t count, pb_encoder_t func); -static bool checkreturn encode_field(pb_ostream_t *stream, const pb_field_t *field, const void *pData); -static bool checkreturn default_extension_encoder(pb_ostream_t *stream, const pb_extension_t *extension); -static bool checkreturn encode_extension_field(pb_ostream_t *stream, const pb_field_t *field, const void *pData); -static bool checkreturn pb_enc_varint(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_uvarint(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_svarint(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_fixed32(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_fixed64(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_string(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_submessage(pb_ostream_t *stream, const pb_field_t *field, const void *src); - -/* --- Function pointers to field encoders --- - * Order in the array must match pb_action_t LTYPE numbering. - */ -static const pb_encoder_t PB_ENCODERS[PB_LTYPES_COUNT] = { - &pb_enc_varint, - &pb_enc_uvarint, - &pb_enc_svarint, - &pb_enc_fixed32, - &pb_enc_fixed64, - - &pb_enc_bytes, - &pb_enc_string, - &pb_enc_submessage, - NULL /* extensions */ -}; - -/******************************* - * pb_ostream_t implementation * - *******************************/ - -static bool checkreturn buf_write(pb_ostream_t *stream, const uint8_t *buf, size_t count) -{ - uint8_t *dest = (uint8_t*)stream->state; - stream->state = dest + count; - - while (count--) - *dest++ = *buf++; - - return true; -} - -pb_ostream_t pb_ostream_from_buffer(uint8_t *buf, size_t bufsize) -{ - pb_ostream_t stream; -#ifdef PB_BUFFER_ONLY - stream.callback = (void*)1; /* Just a marker value */ -#else - stream.callback = &buf_write; -#endif - stream.state = buf; - stream.max_size = bufsize; - stream.bytes_written = 0; -#ifndef PB_NO_ERRMSG - stream.errmsg = NULL; -#endif - return stream; -} - -bool checkreturn pb_write(pb_ostream_t *stream, const uint8_t *buf, size_t count) -{ - if (stream->callback != NULL) - { - if (stream->bytes_written + count > stream->max_size) - PB_RETURN_ERROR(stream, "stream full"); - -#ifdef PB_BUFFER_ONLY - if (!buf_write(stream, buf, count)) - PB_RETURN_ERROR(stream, "io error"); -#else - if (!stream->callback(stream, buf, count)) - PB_RETURN_ERROR(stream, "io error"); -#endif - } - - stream->bytes_written += count; - return true; -} - -/************************* - * Encode a single field * - *************************/ - -/* Encode a static array. Handles the size calculations and possible packing. */ -static bool checkreturn encode_array(pb_ostream_t *stream, const pb_field_t *field, - const void *pData, size_t count, pb_encoder_t func) -{ - size_t i; - const void *p; - size_t size; - - if (count == 0) - return true; - - if (PB_ATYPE(field->type) != PB_ATYPE_POINTER && count > field->array_size) - PB_RETURN_ERROR(stream, "array max size exceeded"); - - /* We always pack arrays if the datatype allows it. */ - if (PB_LTYPE(field->type) <= PB_LTYPE_LAST_PACKABLE) - { - if (!pb_encode_tag(stream, PB_WT_STRING, field->tag)) - return false; - - /* Determine the total size of packed array. */ - if (PB_LTYPE(field->type) == PB_LTYPE_FIXED32) - { - size = 4 * count; - } - else if (PB_LTYPE(field->type) == PB_LTYPE_FIXED64) - { - size = 8 * count; - } - else - { - pb_ostream_t sizestream = PB_OSTREAM_SIZING; - p = pData; - for (i = 0; i < count; i++) - { - if (!func(&sizestream, field, p)) - return false; - p = (const char*)p + field->data_size; - } - size = sizestream.bytes_written; - } - - if (!pb_encode_varint(stream, (uint64_t)size)) - return false; - - if (stream->callback == NULL) - return pb_write(stream, NULL, size); /* Just sizing.. */ - - /* Write the data */ - p = pData; - for (i = 0; i < count; i++) - { - if (!func(stream, field, p)) - return false; - p = (const char*)p + field->data_size; - } - } - else - { - p = pData; - for (i = 0; i < count; i++) - { - if (!pb_encode_tag_for_field(stream, field)) - return false; - - /* Normally the data is stored directly in the array entries, but - * for pointer-type string and bytes fields, the array entries are - * actually pointers themselves also. So we have to dereference once - * more to get to the actual data. */ - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER && - (PB_LTYPE(field->type) == PB_LTYPE_STRING || - PB_LTYPE(field->type) == PB_LTYPE_BYTES)) - { - if (!func(stream, field, *(const void* const*)p)) - return false; - } - else - { - if (!func(stream, field, p)) - return false; - } - p = (const char*)p + field->data_size; - } - } - - return true; -} - -/* Encode a field with static or pointer allocation, i.e. one whose data - * is available to the encoder directly. */ -static bool checkreturn encode_basic_field(pb_ostream_t *stream, - const pb_field_t *field, const void *pData) -{ - pb_encoder_t func; - const void *pSize; - bool implicit_has = true; - - func = PB_ENCODERS[PB_LTYPE(field->type)]; - - if (field->size_offset) - pSize = (const char*)pData + field->size_offset; - else - pSize = &implicit_has; - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - { - /* pData is a pointer to the field, which contains pointer to - * the data. If the 2nd pointer is NULL, it is interpreted as if - * the has_field was false. - */ - - pData = *(const void* const*)pData; - implicit_has = (pData != NULL); - } - - switch (PB_HTYPE(field->type)) - { - case PB_HTYPE_REQUIRED: - if (!pData) - PB_RETURN_ERROR(stream, "missing required field"); - if (!pb_encode_tag_for_field(stream, field)) - return false; - if (!func(stream, field, pData)) - return false; - break; - - case PB_HTYPE_OPTIONAL: - if (*(const bool*)pSize) - { - if (!pb_encode_tag_for_field(stream, field)) - return false; - - if (!func(stream, field, pData)) - return false; - } - break; - - case PB_HTYPE_REPEATED: - if (!encode_array(stream, field, pData, *(const size_t*)pSize, func)) - return false; - break; - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } - - return true; -} - -/* Encode a field with callback semantics. This means that a user function is - * called to provide and encode the actual data. */ -static bool checkreturn encode_callback_field(pb_ostream_t *stream, - const pb_field_t *field, const void *pData) -{ - const pb_callback_t *callback = (const pb_callback_t*)pData; - -#ifdef PB_OLD_CALLBACK_STYLE - const void *arg = callback->arg; -#else - void * const *arg = &(callback->arg); -#endif - - if (callback->funcs.encode != NULL) - { - if (!callback->funcs.encode(stream, field, arg)) - PB_RETURN_ERROR(stream, "callback error"); - } - return true; -} - -/* Encode a single field of any callback or static type. */ -static bool checkreturn encode_field(pb_ostream_t *stream, - const pb_field_t *field, const void *pData) -{ - switch (PB_ATYPE(field->type)) - { - case PB_ATYPE_STATIC: - case PB_ATYPE_POINTER: - return encode_basic_field(stream, field, pData); - - case PB_ATYPE_CALLBACK: - return encode_callback_field(stream, field, pData); - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } -} - -/* Default handler for extension fields. Expects to have a pb_field_t - * pointer in the extension->type->arg field. */ -static bool checkreturn default_extension_encoder(pb_ostream_t *stream, - const pb_extension_t *extension) -{ - const pb_field_t *field = (const pb_field_t*)extension->type->arg; - return encode_field(stream, field, extension->dest); -} - -/* Walk through all the registered extensions and give them a chance - * to encode themselves. */ -static bool checkreturn encode_extension_field(pb_ostream_t *stream, - const pb_field_t *field, const void *pData) -{ - const pb_extension_t *extension = *(const pb_extension_t* const *)pData; - UNUSED(field); - - while (extension) - { - bool status; - if (extension->type->encode) - status = extension->type->encode(stream, extension); - else - status = default_extension_encoder(stream, extension); - - if (!status) - return false; - - extension = extension->next; - } - - return true; -} - -/********************* - * Encode all fields * - *********************/ - -bool checkreturn pb_encode(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct) -{ - const pb_field_t *field = fields; - const void *pData = src_struct; - size_t prev_size = 0; - - while (field->tag != 0) - { - pData = (const char*)pData + prev_size + field->data_offset; - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - prev_size = sizeof(const void*); - else - prev_size = field->data_size; - - /* Special case for static arrays */ - if (PB_ATYPE(field->type) == PB_ATYPE_STATIC && - PB_HTYPE(field->type) == PB_HTYPE_REPEATED) - { - prev_size *= field->array_size; - } - - if (PB_LTYPE(field->type) == PB_LTYPE_EXTENSION) - { - /* Special case for the extension field placeholder */ - if (!encode_extension_field(stream, field, pData)) - return false; - } - else - { - /* Regular field */ - if (!encode_field(stream, field, pData)) - return false; - } - - field++; - } - - return true; -} - -bool pb_encode_delimited(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct) -{ - return pb_encode_submessage(stream, fields, src_struct); -} - -bool pb_get_encoded_size(size_t *size, const pb_field_t fields[], const void *src_struct) -{ - pb_ostream_t stream = PB_OSTREAM_SIZING; - - if (!pb_encode(&stream, fields, src_struct)) - return false; - - *size = stream.bytes_written; - return true; -} - -/******************** - * Helper functions * - ********************/ -bool checkreturn pb_encode_varint(pb_ostream_t *stream, uint64_t value) -{ - uint8_t buffer[10]; - size_t i = 0; - - if (value == 0) - return pb_write(stream, (uint8_t*)&value, 1); - - while (value) - { - buffer[i] = (uint8_t)((value & 0x7F) | 0x80); - value >>= 7; - i++; - } - buffer[i-1] &= 0x7F; /* Unset top bit on last byte */ - - return pb_write(stream, buffer, i); -} - -bool checkreturn pb_encode_svarint(pb_ostream_t *stream, int64_t value) -{ - uint64_t zigzagged; - if (value < 0) - zigzagged = ~((uint64_t)value << 1); - else - zigzagged = (uint64_t)value << 1; - - return pb_encode_varint(stream, zigzagged); -} - -bool checkreturn pb_encode_fixed32(pb_ostream_t *stream, const void *value) -{ - #ifdef __BIG_ENDIAN__ - const uint8_t *bytes = value; - uint8_t lebytes[4]; - lebytes[0] = bytes[3]; - lebytes[1] = bytes[2]; - lebytes[2] = bytes[1]; - lebytes[3] = bytes[0]; - return pb_write(stream, lebytes, 4); - #else - return pb_write(stream, (const uint8_t*)value, 4); - #endif -} - -bool checkreturn pb_encode_fixed64(pb_ostream_t *stream, const void *value) -{ - #ifdef __BIG_ENDIAN__ - const uint8_t *bytes = value; - uint8_t lebytes[8]; - lebytes[0] = bytes[7]; - lebytes[1] = bytes[6]; - lebytes[2] = bytes[5]; - lebytes[3] = bytes[4]; - lebytes[4] = bytes[3]; - lebytes[5] = bytes[2]; - lebytes[6] = bytes[1]; - lebytes[7] = bytes[0]; - return pb_write(stream, lebytes, 8); - #else - return pb_write(stream, (const uint8_t*)value, 8); - #endif -} - -bool checkreturn pb_encode_tag(pb_ostream_t *stream, pb_wire_type_t wiretype, uint32_t field_number) -{ - uint64_t tag = ((uint64_t)field_number << 3) | wiretype; - return pb_encode_varint(stream, tag); -} - -bool checkreturn pb_encode_tag_for_field(pb_ostream_t *stream, const pb_field_t *field) -{ - pb_wire_type_t wiretype; - switch (PB_LTYPE(field->type)) - { - case PB_LTYPE_VARINT: - case PB_LTYPE_UVARINT: - case PB_LTYPE_SVARINT: - wiretype = PB_WT_VARINT; - break; - - case PB_LTYPE_FIXED32: - wiretype = PB_WT_32BIT; - break; - - case PB_LTYPE_FIXED64: - wiretype = PB_WT_64BIT; - break; - - case PB_LTYPE_BYTES: - case PB_LTYPE_STRING: - case PB_LTYPE_SUBMESSAGE: - wiretype = PB_WT_STRING; - break; - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } - - return pb_encode_tag(stream, wiretype, field->tag); -} - -bool checkreturn pb_encode_string(pb_ostream_t *stream, const uint8_t *buffer, size_t size) -{ - if (!pb_encode_varint(stream, (uint64_t)size)) - return false; - - return pb_write(stream, buffer, size); -} - -bool checkreturn pb_encode_submessage(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct) -{ - /* First calculate the message size using a non-writing substream. */ - pb_ostream_t substream = PB_OSTREAM_SIZING; - size_t size; - bool status; - - if (!pb_encode(&substream, fields, src_struct)) - { -#ifndef PB_NO_ERRMSG - stream->errmsg = substream.errmsg; -#endif - return false; - } - - size = substream.bytes_written; - - if (!pb_encode_varint(stream, (uint64_t)size)) - return false; - - if (stream->callback == NULL) - return pb_write(stream, NULL, size); /* Just sizing */ - - if (stream->bytes_written + size > stream->max_size) - PB_RETURN_ERROR(stream, "stream full"); - - /* Use a substream to verify that a callback doesn't write more than - * what it did the first time. */ - substream.callback = stream->callback; - substream.state = stream->state; - substream.max_size = size; - substream.bytes_written = 0; -#ifndef PB_NO_ERRMSG - substream.errmsg = NULL; -#endif - - status = pb_encode(&substream, fields, src_struct); - - stream->bytes_written += substream.bytes_written; - stream->state = substream.state; -#ifndef PB_NO_ERRMSG - stream->errmsg = substream.errmsg; -#endif - - if (substream.bytes_written != size) - PB_RETURN_ERROR(stream, "submsg size changed"); - - return status; -} - -/* Field encoders */ - -static bool checkreturn pb_enc_varint(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - int64_t value = 0; - - /* Cases 1 and 2 are for compilers that have smaller types for bool - * or enums. */ - switch (field->data_size) - { - case 1: value = *(const int8_t*)src; break; - case 2: value = *(const int16_t*)src; break; - case 4: value = *(const int32_t*)src; break; - case 8: value = *(const int64_t*)src; break; - default: PB_RETURN_ERROR(stream, "invalid data_size"); - } - - return pb_encode_varint(stream, (uint64_t)value); -} - -static bool checkreturn pb_enc_uvarint(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - uint64_t value = 0; - - switch (field->data_size) - { - case 4: value = *(const uint32_t*)src; break; - case 8: value = *(const uint64_t*)src; break; - default: PB_RETURN_ERROR(stream, "invalid data_size"); - } - - return pb_encode_varint(stream, value); -} - -static bool checkreturn pb_enc_svarint(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - int64_t value = 0; - - switch (field->data_size) - { - case 4: value = *(const int32_t*)src; break; - case 8: value = *(const int64_t*)src; break; - default: PB_RETURN_ERROR(stream, "invalid data_size"); - } - - return pb_encode_svarint(stream, value); -} - -static bool checkreturn pb_enc_fixed64(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - UNUSED(field); - return pb_encode_fixed64(stream, src); -} - -static bool checkreturn pb_enc_fixed32(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - UNUSED(field); - return pb_encode_fixed32(stream, src); -} - -static bool checkreturn pb_enc_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - const pb_bytes_array_t *bytes = (const pb_bytes_array_t*)src; - - if (src == NULL) - { - /* Threat null pointer as an empty bytes field */ - return pb_encode_string(stream, NULL, 0); - } - - if (PB_ATYPE(field->type) == PB_ATYPE_STATIC && - PB_BYTES_ARRAY_T_ALLOCSIZE(bytes->size) > field->data_size) - { - PB_RETURN_ERROR(stream, "bytes size exceeded"); - } - - return pb_encode_string(stream, bytes->bytes, bytes->size); -} - -static bool checkreturn pb_enc_string(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - /* strnlen() is not always available, so just use a loop */ - size_t size = 0; - size_t max_size = field->data_size; - const char *p = (const char*)src; - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - max_size = (size_t)-1; - - if (src == NULL) - { - size = 0; /* Threat null pointer as an empty string */ - } - else - { - while (size < max_size && *p != '\0') - { - size++; - p++; - } - } - - return pb_encode_string(stream, (const uint8_t*)src, size); -} - -static bool checkreturn pb_enc_submessage(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - if (field->ptr == NULL) - PB_RETURN_ERROR(stream, "invalid field descriptor"); - - return pb_encode_submessage(stream, (const pb_field_t*)field->ptr, src); -} - diff --git a/firmware/protob/pb_encode.c b/firmware/protob/pb_encode.c new file mode 120000 index 000000000..aebfbfda3 --- /dev/null +++ b/firmware/protob/pb_encode.c @@ -0,0 +1 @@ +../../vendor/nanopb/pb_encode.c \ No newline at end of file diff --git a/firmware/protob/pb_encode.h b/firmware/protob/pb_encode.h deleted file mode 100644 index f82bac8f8..000000000 --- a/firmware/protob/pb_encode.h +++ /dev/null @@ -1,154 +0,0 @@ -/* pb_encode.h: Functions to encode protocol buffers. Depends on pb_encode.c. - * The main function is pb_encode. You also need an output stream, and the - * field descriptions created by nanopb_generator.py. - */ - -#ifndef _PB_ENCODE_H_ -#define _PB_ENCODE_H_ - -#include "pb.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Structure for defining custom output streams. You will need to provide - * a callback function to write the bytes to your storage, which can be - * for example a file or a network socket. - * - * The callback must conform to these rules: - * - * 1) Return false on IO errors. This will cause encoding to abort. - * 2) You can use state to store your own data (e.g. buffer pointer). - * 3) pb_write will update bytes_written after your callback runs. - * 4) Substreams will modify max_size and bytes_written. Don't use them - * to calculate any pointers. - */ -struct _pb_ostream_t -{ -#ifdef PB_BUFFER_ONLY - /* Callback pointer is not used in buffer-only configuration. - * Having an int pointer here allows binary compatibility but - * gives an error if someone tries to assign callback function. - * Also, NULL pointer marks a 'sizing stream' that does not - * write anything. - */ - int *callback; -#else - bool (*callback)(pb_ostream_t *stream, const uint8_t *buf, size_t count); -#endif - void *state; /* Free field for use by callback implementation. */ - size_t max_size; /* Limit number of output bytes written (or use SIZE_MAX). */ - size_t bytes_written; /* Number of bytes written so far. */ - -#ifndef PB_NO_ERRMSG - const char *errmsg; -#endif -}; - -/*************************** - * Main encoding functions * - ***************************/ - -/* Encode a single protocol buffers message from C structure into a stream. - * Returns true on success, false on any failure. - * The actual struct pointed to by src_struct must match the description in fields. - * All required fields in the struct are assumed to have been filled in. - * - * Example usage: - * MyMessage msg = {}; - * uint8_t buffer[64]; - * pb_ostream_t stream; - * - * msg.field1 = 42; - * stream = pb_ostream_from_buffer(buffer, sizeof(buffer)); - * pb_encode(&stream, MyMessage_fields, &msg); - */ -bool pb_encode(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct); - -/* Same as pb_encode, but prepends the length of the message as a varint. - * Corresponds to writeDelimitedTo() in Google's protobuf API. - */ -bool pb_encode_delimited(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct); - -/* Encode the message to get the size of the encoded data, but do not store - * the data. */ -bool pb_get_encoded_size(size_t *size, const pb_field_t fields[], const void *src_struct); - -/************************************** - * Functions for manipulating streams * - **************************************/ - -/* Create an output stream for writing into a memory buffer. - * The number of bytes written can be found in stream.bytes_written after - * encoding the message. - * - * Alternatively, you can use a custom stream that writes directly to e.g. - * a file or a network socket. - */ -pb_ostream_t pb_ostream_from_buffer(uint8_t *buf, size_t bufsize); - -/* Pseudo-stream for measuring the size of a message without actually storing - * the encoded data. - * - * Example usage: - * MyMessage msg = {}; - * pb_ostream_t stream = PB_OSTREAM_SIZING; - * pb_encode(&stream, MyMessage_fields, &msg); - * printf("Message size is %d\n", stream.bytes_written); - */ -#ifndef PB_NO_ERRMSG -#define PB_OSTREAM_SIZING {0,0,0,0,0} -#else -#define PB_OSTREAM_SIZING {0,0,0,0} -#endif - -/* Function to write into a pb_ostream_t stream. You can use this if you need - * to append or prepend some custom headers to the message. - */ -bool pb_write(pb_ostream_t *stream, const uint8_t *buf, size_t count); - - -/************************************************ - * Helper functions for writing field callbacks * - ************************************************/ - -/* Encode field header based on type and field number defined in the field - * structure. Call this from the callback before writing out field contents. */ -bool pb_encode_tag_for_field(pb_ostream_t *stream, const pb_field_t *field); - -/* Encode field header by manually specifing wire type. You need to use this - * if you want to write out packed arrays from a callback field. */ -bool pb_encode_tag(pb_ostream_t *stream, pb_wire_type_t wiretype, uint32_t field_number); - -/* Encode an integer in the varint format. - * This works for bool, enum, int32, int64, uint32 and uint64 field types. */ -bool pb_encode_varint(pb_ostream_t *stream, uint64_t value); - -/* Encode an integer in the zig-zagged svarint format. - * This works for sint32 and sint64. */ -bool pb_encode_svarint(pb_ostream_t *stream, int64_t value); - -/* Encode a string or bytes type field. For strings, pass strlen(s) as size. */ -bool pb_encode_string(pb_ostream_t *stream, const uint8_t *buffer, size_t size); - -/* Encode a fixed32, sfixed32 or float value. - * You need to pass a pointer to a 4-byte wide C variable. */ -bool pb_encode_fixed32(pb_ostream_t *stream, const void *value); - -/* Encode a fixed64, sfixed64 or double value. - * You need to pass a pointer to a 8-byte wide C variable. */ -bool pb_encode_fixed64(pb_ostream_t *stream, const void *value); - -/* Encode a submessage field. - * You need to pass the pb_field_t array and pointer to struct, just like - * with pb_encode(). This internally encodes the submessage twice, first to - * calculate message size and then to actually write it out. - */ -bool pb_encode_submessage(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/firmware/protob/pb_encode.h b/firmware/protob/pb_encode.h new file mode 120000 index 000000000..04b7546e4 --- /dev/null +++ b/firmware/protob/pb_encode.h @@ -0,0 +1 @@ +../../vendor/nanopb/pb_encode.h \ No newline at end of file diff --git a/firmware/protob/storage.pb.c b/firmware/protob/storage.pb.c deleted file mode 100644 index 42e40039d..000000000 --- a/firmware/protob/storage.pb.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.2.9.3 */ - -#include "storage.pb.h" - - - -const pb_field_t Storage_fields[14] = { - PB_FIELD2( 1, UINT32 , REQUIRED, STATIC , FIRST, Storage, version, version, 0), - PB_FIELD2( 2, MESSAGE , OPTIONAL, STATIC , OTHER, Storage, node, version, &HDNodeType_fields), - PB_FIELD2( 3, STRING , OPTIONAL, STATIC , OTHER, Storage, mnemonic, node, 0), - PB_FIELD2( 4, BOOL , OPTIONAL, STATIC , OTHER, Storage, passphrase_protection, mnemonic, 0), - PB_FIELD2( 5, UINT32 , OPTIONAL, STATIC , OTHER, Storage, pin_failed_attempts, passphrase_protection, 0), - PB_FIELD2( 6, STRING , OPTIONAL, STATIC , OTHER, Storage, pin, pin_failed_attempts, 0), - PB_FIELD2( 7, STRING , OPTIONAL, STATIC , OTHER, Storage, language, pin, 0), - PB_FIELD2( 8, STRING , OPTIONAL, STATIC , OTHER, Storage, label, language, 0), - PB_FIELD2( 9, BOOL , OPTIONAL, STATIC , OTHER, Storage, imported, label, 0), - PB_FIELD2( 10, BYTES , OPTIONAL, STATIC , OTHER, Storage, homescreen, imported, 0), - PB_FIELD2( 11, UINT32 , OPTIONAL, STATIC , OTHER, Storage, u2f_counter, homescreen, 0), - PB_FIELD2( 12, BOOL , OPTIONAL, STATIC , OTHER, Storage, needs_backup, u2f_counter, 0), - PB_FIELD2( 13, UINT32 , OPTIONAL, STATIC , OTHER, Storage, flags, needs_backup, 0), - PB_LAST_FIELD -}; - - -/* Check that field information fits in pb_field_t */ -#if !defined(PB_FIELD_32BIT) -/* If you get an error here, it means that you need to define PB_FIELD_32BIT - * compile-time option. You can do that in pb.h or on compiler command line. - * - * The reason you need to do this is that some of your messages contain tag - * numbers or field sizes that are larger than what can fit in 8 or 16 bit - * field descriptors. - */ -STATIC_ASSERT((pb_membersize(Storage, node) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_Storage) -#endif - -#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT) -#error Field descriptor for Storage.homescreen is too large. Define PB_FIELD_16BIT to fix this. -#endif - - diff --git a/firmware/protob/storage.pb.h b/firmware/protob/storage.pb.h deleted file mode 100644 index 047861726..000000000 --- a/firmware/protob/storage.pb.h +++ /dev/null @@ -1,79 +0,0 @@ -/* Automatically generated nanopb header */ -/* Generated by nanopb-0.2.9.3 */ - -#ifndef _PB_STORAGE_PB_H_ -#define _PB_STORAGE_PB_H_ -#include "pb.h" -#include "types.pb.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Enum definitions */ -/* Struct definitions */ -typedef struct { - size_t size; - uint8_t bytes[1024]; -} Storage_homescreen_t; - -typedef struct _Storage { - uint32_t version; - bool has_node; - HDNodeType node; - bool has_mnemonic; - char mnemonic[241]; - bool has_passphrase_protection; - bool passphrase_protection; - bool has_pin_failed_attempts; - uint32_t pin_failed_attempts; - bool has_pin; - char pin[10]; - bool has_language; - char language[17]; - bool has_label; - char label[33]; - bool has_imported; - bool imported; - bool has_homescreen; - Storage_homescreen_t homescreen; - bool has_u2f_counter; - uint32_t u2f_counter; - bool has_needs_backup; - bool needs_backup; - bool has_flags; - uint32_t flags; -} Storage; - -/* Default values for struct fields */ - -/* Initializer values for message structs */ -#define Storage_init_default {0, false, HDNodeType_init_default, false, "", false, 0, false, 0, false, "", false, "", false, "", false, 0, false, {0, {0}}, false, 0, false, 0, false, 0} -#define Storage_init_zero {0, false, HDNodeType_init_zero, false, "", false, 0, false, 0, false, "", false, "", false, "", false, 0, false, {0, {0}}, false, 0, false, 0, false, 0} - -/* Field tags (for use in manual encoding/decoding) */ -#define Storage_version_tag 1 -#define Storage_node_tag 2 -#define Storage_mnemonic_tag 3 -#define Storage_passphrase_protection_tag 4 -#define Storage_pin_failed_attempts_tag 5 -#define Storage_pin_tag 6 -#define Storage_language_tag 7 -#define Storage_label_tag 8 -#define Storage_imported_tag 9 -#define Storage_homescreen_tag 10 -#define Storage_u2f_counter_tag 11 -#define Storage_needs_backup_tag 12 -#define Storage_flags_tag 13 - -/* Struct field encoding specification for nanopb */ -extern const pb_field_t Storage_fields[14]; - -/* Maximum encoded size of messages (where known) */ -#define Storage_size (1373 + HDNodeType_size) - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/firmware/protob/types.pb.c b/firmware/protob/types.pb.c deleted file mode 100644 index 7974a2811..000000000 --- a/firmware/protob/types.pb.c +++ /dev/null @@ -1,213 +0,0 @@ -/* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.2.9.3 */ - -#include "types.pb.h" - -const uint32_t CoinType_address_type_default = 0u; -const uint32_t CoinType_address_type_p2sh_default = 5u; -const uint32_t CoinType_xpub_magic_default = 76067358u; -const uint32_t CoinType_xprv_magic_default = 76066276u; -const uint32_t TxInputType_sequence_default = 4294967295u; -const InputScriptType TxInputType_script_type_default = InputScriptType_SPENDADDRESS; -const uint32_t IdentityType_index_default = 0u; - - -const pb_field_t HDNodeType_fields[7] = { - PB_FIELD2( 1, UINT32 , REQUIRED, STATIC , FIRST, HDNodeType, depth, depth, 0), - PB_FIELD2( 2, UINT32 , REQUIRED, STATIC , OTHER, HDNodeType, fingerprint, depth, 0), - PB_FIELD2( 3, UINT32 , REQUIRED, STATIC , OTHER, HDNodeType, child_num, fingerprint, 0), - PB_FIELD2( 4, BYTES , REQUIRED, STATIC , OTHER, HDNodeType, chain_code, child_num, 0), - PB_FIELD2( 5, BYTES , OPTIONAL, STATIC , OTHER, HDNodeType, private_key, chain_code, 0), - PB_FIELD2( 6, BYTES , OPTIONAL, STATIC , OTHER, HDNodeType, public_key, private_key, 0), - PB_LAST_FIELD -}; - -const pb_field_t HDNodePathType_fields[3] = { - PB_FIELD2( 1, MESSAGE , REQUIRED, STATIC , FIRST, HDNodePathType, node, node, &HDNodeType_fields), - PB_FIELD2( 2, UINT32 , REPEATED, STATIC , OTHER, HDNodePathType, address_n, node, 0), - PB_LAST_FIELD -}; - -const pb_field_t CoinType_fields[11] = { - PB_FIELD2( 1, STRING , OPTIONAL, STATIC , FIRST, CoinType, coin_name, coin_name, 0), - PB_FIELD2( 2, STRING , OPTIONAL, STATIC , OTHER, CoinType, coin_shortcut, coin_name, 0), - PB_FIELD2( 3, UINT32 , OPTIONAL, STATIC , OTHER, CoinType, address_type, coin_shortcut, &CoinType_address_type_default), - PB_FIELD2( 4, UINT64 , OPTIONAL, STATIC , OTHER, CoinType, maxfee_kb, address_type, 0), - PB_FIELD2( 5, UINT32 , OPTIONAL, STATIC , OTHER, CoinType, address_type_p2sh, maxfee_kb, &CoinType_address_type_p2sh_default), - PB_FIELD2( 8, STRING , OPTIONAL, STATIC , OTHER, CoinType, signed_message_header, address_type_p2sh, 0), - PB_FIELD2( 9, UINT32 , OPTIONAL, STATIC , OTHER, CoinType, xpub_magic, signed_message_header, &CoinType_xpub_magic_default), - PB_FIELD2( 10, UINT32 , OPTIONAL, STATIC , OTHER, CoinType, xprv_magic, xpub_magic, &CoinType_xprv_magic_default), - PB_FIELD2( 11, BOOL , OPTIONAL, STATIC , OTHER, CoinType, segwit, xprv_magic, 0), - PB_FIELD2( 12, UINT32 , OPTIONAL, STATIC , OTHER, CoinType, forkid, segwit, 0), - PB_LAST_FIELD -}; - -const pb_field_t MultisigRedeemScriptType_fields[4] = { - PB_FIELD2( 1, MESSAGE , REPEATED, STATIC , FIRST, MultisigRedeemScriptType, pubkeys, pubkeys, &HDNodePathType_fields), - PB_FIELD2( 2, BYTES , REPEATED, STATIC , OTHER, MultisigRedeemScriptType, signatures, pubkeys, 0), - PB_FIELD2( 3, UINT32 , OPTIONAL, STATIC , OTHER, MultisigRedeemScriptType, m, signatures, 0), - PB_LAST_FIELD -}; - -const pb_field_t TxInputType_fields[9] = { - PB_FIELD2( 1, UINT32 , REPEATED, STATIC , FIRST, TxInputType, address_n, address_n, 0), - PB_FIELD2( 2, BYTES , REQUIRED, STATIC , OTHER, TxInputType, prev_hash, address_n, 0), - PB_FIELD2( 3, UINT32 , REQUIRED, STATIC , OTHER, TxInputType, prev_index, prev_hash, 0), - PB_FIELD2( 4, BYTES , OPTIONAL, STATIC , OTHER, TxInputType, script_sig, prev_index, 0), - PB_FIELD2( 5, UINT32 , OPTIONAL, STATIC , OTHER, TxInputType, sequence, script_sig, &TxInputType_sequence_default), - PB_FIELD2( 6, ENUM , OPTIONAL, STATIC , OTHER, TxInputType, script_type, sequence, &TxInputType_script_type_default), - PB_FIELD2( 7, MESSAGE , OPTIONAL, STATIC , OTHER, TxInputType, multisig, script_type, &MultisigRedeemScriptType_fields), - PB_FIELD2( 8, UINT64 , OPTIONAL, STATIC , OTHER, TxInputType, amount, multisig, 0), - PB_LAST_FIELD -}; - -const pb_field_t TxOutputType_fields[7] = { - PB_FIELD2( 1, STRING , OPTIONAL, STATIC , FIRST, TxOutputType, address, address, 0), - PB_FIELD2( 2, UINT32 , REPEATED, STATIC , OTHER, TxOutputType, address_n, address, 0), - PB_FIELD2( 3, UINT64 , REQUIRED, STATIC , OTHER, TxOutputType, amount, address_n, 0), - PB_FIELD2( 4, ENUM , REQUIRED, STATIC , OTHER, TxOutputType, script_type, amount, 0), - PB_FIELD2( 5, MESSAGE , OPTIONAL, STATIC , OTHER, TxOutputType, multisig, script_type, &MultisigRedeemScriptType_fields), - PB_FIELD2( 6, BYTES , OPTIONAL, STATIC , OTHER, TxOutputType, op_return_data, multisig, 0), - PB_LAST_FIELD -}; - -const pb_field_t TxOutputBinType_fields[3] = { - PB_FIELD2( 1, UINT64 , REQUIRED, STATIC , FIRST, TxOutputBinType, amount, amount, 0), - PB_FIELD2( 2, BYTES , REQUIRED, STATIC , OTHER, TxOutputBinType, script_pubkey, amount, 0), - PB_LAST_FIELD -}; - -const pb_field_t TransactionType_fields[10] = { - PB_FIELD2( 1, UINT32 , OPTIONAL, STATIC , FIRST, TransactionType, version, version, 0), - PB_FIELD2( 2, MESSAGE , REPEATED, STATIC , OTHER, TransactionType, inputs, version, &TxInputType_fields), - PB_FIELD2( 3, MESSAGE , REPEATED, STATIC , OTHER, TransactionType, bin_outputs, inputs, &TxOutputBinType_fields), - PB_FIELD2( 4, UINT32 , OPTIONAL, STATIC , OTHER, TransactionType, lock_time, bin_outputs, 0), - PB_FIELD2( 5, MESSAGE , REPEATED, STATIC , OTHER, TransactionType, outputs, lock_time, &TxOutputType_fields), - PB_FIELD2( 6, UINT32 , OPTIONAL, STATIC , OTHER, TransactionType, inputs_cnt, outputs, 0), - PB_FIELD2( 7, UINT32 , OPTIONAL, STATIC , OTHER, TransactionType, outputs_cnt, inputs_cnt, 0), - PB_FIELD2( 8, BYTES , OPTIONAL, STATIC , OTHER, TransactionType, extra_data, outputs_cnt, 0), - PB_FIELD2( 9, UINT32 , OPTIONAL, STATIC , OTHER, TransactionType, extra_data_len, extra_data, 0), - PB_LAST_FIELD -}; - -const pb_field_t TxRequestDetailsType_fields[5] = { - PB_FIELD2( 1, UINT32 , OPTIONAL, STATIC , FIRST, TxRequestDetailsType, request_index, request_index, 0), - PB_FIELD2( 2, BYTES , OPTIONAL, STATIC , OTHER, TxRequestDetailsType, tx_hash, request_index, 0), - PB_FIELD2( 3, UINT32 , OPTIONAL, STATIC , OTHER, TxRequestDetailsType, extra_data_len, tx_hash, 0), - PB_FIELD2( 4, UINT32 , OPTIONAL, STATIC , OTHER, TxRequestDetailsType, extra_data_offset, extra_data_len, 0), - PB_LAST_FIELD -}; - -const pb_field_t TxRequestSerializedType_fields[4] = { - PB_FIELD2( 1, UINT32 , OPTIONAL, STATIC , FIRST, TxRequestSerializedType, signature_index, signature_index, 0), - PB_FIELD2( 2, BYTES , OPTIONAL, STATIC , OTHER, TxRequestSerializedType, signature, signature_index, 0), - PB_FIELD2( 3, BYTES , OPTIONAL, STATIC , OTHER, TxRequestSerializedType, serialized_tx, signature, 0), - PB_LAST_FIELD -}; - -const pb_field_t IdentityType_fields[7] = { - PB_FIELD2( 1, STRING , OPTIONAL, STATIC , FIRST, IdentityType, proto, proto, 0), - PB_FIELD2( 2, STRING , OPTIONAL, STATIC , OTHER, IdentityType, user, proto, 0), - PB_FIELD2( 3, STRING , OPTIONAL, STATIC , OTHER, IdentityType, host, user, 0), - PB_FIELD2( 4, STRING , OPTIONAL, STATIC , OTHER, IdentityType, port, host, 0), - PB_FIELD2( 5, STRING , OPTIONAL, STATIC , OTHER, IdentityType, path, port, 0), - PB_FIELD2( 6, UINT32 , OPTIONAL, STATIC , OTHER, IdentityType, index, path, &IdentityType_index_default), - PB_LAST_FIELD -}; - -typedef struct { - bool wire_in; -} wire_in_struct; - -static const pb_field_t wire_in_field = - PB_FIELD2(50002, BOOL , OPTEXT, STATIC , FIRST, wire_in_struct, wire_in, wire_in, 0); - -const pb_extension_type_t wire_in = { - NULL, - NULL, - &wire_in_field -}; - -typedef struct { - bool wire_out; -} wire_out_struct; - -static const pb_field_t wire_out_field = - PB_FIELD2(50003, BOOL , OPTEXT, STATIC , FIRST, wire_out_struct, wire_out, wire_out, 0); - -const pb_extension_type_t wire_out = { - NULL, - NULL, - &wire_out_field -}; - -typedef struct { - bool wire_debug_in; -} wire_debug_in_struct; - -static const pb_field_t wire_debug_in_field = - PB_FIELD2(50004, BOOL , OPTEXT, STATIC , FIRST, wire_debug_in_struct, wire_debug_in, wire_debug_in, 0); - -const pb_extension_type_t wire_debug_in = { - NULL, - NULL, - &wire_debug_in_field -}; - -typedef struct { - bool wire_debug_out; -} wire_debug_out_struct; - -static const pb_field_t wire_debug_out_field = - PB_FIELD2(50005, BOOL , OPTEXT, STATIC , FIRST, wire_debug_out_struct, wire_debug_out, wire_debug_out, 0); - -const pb_extension_type_t wire_debug_out = { - NULL, - NULL, - &wire_debug_out_field -}; - -typedef struct { - bool wire_tiny; -} wire_tiny_struct; - -static const pb_field_t wire_tiny_field = - PB_FIELD2(50006, BOOL , OPTEXT, STATIC , FIRST, wire_tiny_struct, wire_tiny, wire_tiny, 0); - -const pb_extension_type_t wire_tiny = { - NULL, - NULL, - &wire_tiny_field -}; - -typedef struct { - bool wire_bootloader; -} wire_bootloader_struct; - -static const pb_field_t wire_bootloader_field = - PB_FIELD2(50007, BOOL , OPTEXT, STATIC , FIRST, wire_bootloader_struct, wire_bootloader, wire_bootloader, 0); - -const pb_extension_type_t wire_bootloader = { - NULL, - NULL, - &wire_bootloader_field -}; - - -/* Check that field information fits in pb_field_t */ -#if !defined(PB_FIELD_32BIT) -/* If you get an error here, it means that you need to define PB_FIELD_32BIT - * compile-time option. You can do that in pb.h or on compiler command line. - * - * The reason you need to do this is that some of your messages contain tag - * numbers or field sizes that are larger than what can fit in 8 or 16 bit - * field descriptors. - */ -STATIC_ASSERT((pb_membersize(HDNodePathType, node) < 65536 && pb_membersize(MultisigRedeemScriptType, pubkeys[0]) < 65536 && pb_membersize(TxInputType, multisig) < 65536 && pb_membersize(TxOutputType, multisig) < 65536 && pb_membersize(TransactionType, inputs[0]) < 65536 && pb_membersize(TransactionType, bin_outputs[0]) < 65536 && pb_membersize(TransactionType, outputs[0]) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_HDNodeType_HDNodePathType_CoinType_MultisigRedeemScriptType_TxInputType_TxOutputType_TxOutputBinType_TransactionType_TxRequestDetailsType_TxRequestSerializedType_IdentityType) -#endif - -#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT) -#error Field descriptor for TxRequestSerializedType.serialized_tx is too large. Define PB_FIELD_16BIT to fix this. -#endif - - diff --git a/firmware/protob/types.pb.h b/firmware/protob/types.pb.h deleted file mode 100644 index 9bfd3dd9d..000000000 --- a/firmware/protob/types.pb.h +++ /dev/null @@ -1,422 +0,0 @@ -/* Automatically generated nanopb header */ -/* Generated by nanopb-0.2.9.3 */ - -#ifndef _PB_TYPES_PB_H_ -#define _PB_TYPES_PB_H_ -#include "pb.h" -#ifdef __cplusplus -extern "C" { -#endif - -/* Enum definitions */ -typedef enum _FailureType { - FailureType_Failure_UnexpectedMessage = 1, - FailureType_Failure_ButtonExpected = 2, - FailureType_Failure_DataError = 3, - FailureType_Failure_ActionCancelled = 4, - FailureType_Failure_PinExpected = 5, - FailureType_Failure_PinCancelled = 6, - FailureType_Failure_PinInvalid = 7, - FailureType_Failure_InvalidSignature = 8, - FailureType_Failure_ProcessError = 9, - FailureType_Failure_NotEnoughFunds = 10, - FailureType_Failure_NotInitialized = 11, - FailureType_Failure_FirmwareError = 99 -} FailureType; - -typedef enum _OutputScriptType { - OutputScriptType_PAYTOADDRESS = 0, - OutputScriptType_PAYTOSCRIPTHASH = 1, - OutputScriptType_PAYTOMULTISIG = 2, - OutputScriptType_PAYTOOPRETURN = 3, - OutputScriptType_PAYTOWITNESS = 4, - OutputScriptType_PAYTOP2SHWITNESS = 5 -} OutputScriptType; - -typedef enum _InputScriptType { - InputScriptType_SPENDADDRESS = 0, - InputScriptType_SPENDMULTISIG = 1, - InputScriptType_EXTERNAL = 2, - InputScriptType_SPENDWITNESS = 3, - InputScriptType_SPENDP2SHWITNESS = 4 -} InputScriptType; - -typedef enum _RequestType { - RequestType_TXINPUT = 0, - RequestType_TXOUTPUT = 1, - RequestType_TXMETA = 2, - RequestType_TXFINISHED = 3, - RequestType_TXEXTRADATA = 4 -} RequestType; - -typedef enum _ButtonRequestType { - ButtonRequestType_ButtonRequest_Other = 1, - ButtonRequestType_ButtonRequest_FeeOverThreshold = 2, - ButtonRequestType_ButtonRequest_ConfirmOutput = 3, - ButtonRequestType_ButtonRequest_ResetDevice = 4, - ButtonRequestType_ButtonRequest_ConfirmWord = 5, - ButtonRequestType_ButtonRequest_WipeDevice = 6, - ButtonRequestType_ButtonRequest_ProtectCall = 7, - ButtonRequestType_ButtonRequest_SignTx = 8, - ButtonRequestType_ButtonRequest_FirmwareCheck = 9, - ButtonRequestType_ButtonRequest_Address = 10, - ButtonRequestType_ButtonRequest_PublicKey = 11 -} ButtonRequestType; - -typedef enum _PinMatrixRequestType { - PinMatrixRequestType_PinMatrixRequestType_Current = 1, - PinMatrixRequestType_PinMatrixRequestType_NewFirst = 2, - PinMatrixRequestType_PinMatrixRequestType_NewSecond = 3 -} PinMatrixRequestType; - -typedef enum _RecoveryDeviceType { - RecoveryDeviceType_RecoveryDeviceType_ScrambledWords = 0, - RecoveryDeviceType_RecoveryDeviceType_Matrix = 1 -} RecoveryDeviceType; - -typedef enum _WordRequestType { - WordRequestType_WordRequestType_Plain = 0, - WordRequestType_WordRequestType_Matrix9 = 1, - WordRequestType_WordRequestType_Matrix6 = 2 -} WordRequestType; - -/* Struct definitions */ -typedef struct _CoinType { - bool has_coin_name; - char coin_name[17]; - bool has_coin_shortcut; - char coin_shortcut[9]; - bool has_address_type; - uint32_t address_type; - bool has_maxfee_kb; - uint64_t maxfee_kb; - bool has_address_type_p2sh; - uint32_t address_type_p2sh; - bool has_signed_message_header; - char signed_message_header[32]; - bool has_xpub_magic; - uint32_t xpub_magic; - bool has_xprv_magic; - uint32_t xprv_magic; - bool has_segwit; - bool segwit; - bool has_forkid; - uint32_t forkid; -} CoinType; - -typedef struct { - size_t size; - uint8_t bytes[32]; -} HDNodeType_chain_code_t; - -typedef struct { - size_t size; - uint8_t bytes[32]; -} HDNodeType_private_key_t; - -typedef struct { - size_t size; - uint8_t bytes[33]; -} HDNodeType_public_key_t; - -typedef struct _HDNodeType { - uint32_t depth; - uint32_t fingerprint; - uint32_t child_num; - HDNodeType_chain_code_t chain_code; - bool has_private_key; - HDNodeType_private_key_t private_key; - bool has_public_key; - HDNodeType_public_key_t public_key; -} HDNodeType; - -typedef struct _IdentityType { - bool has_proto; - char proto[9]; - bool has_user; - char user[64]; - bool has_host; - char host[64]; - bool has_port; - char port[6]; - bool has_path; - char path[256]; - bool has_index; - uint32_t index; -} IdentityType; - -typedef struct { - size_t size; - uint8_t bytes[520]; -} TxOutputBinType_script_pubkey_t; - -typedef struct _TxOutputBinType { - uint64_t amount; - TxOutputBinType_script_pubkey_t script_pubkey; -} TxOutputBinType; - -typedef struct { - size_t size; - uint8_t bytes[32]; -} TxRequestDetailsType_tx_hash_t; - -typedef struct _TxRequestDetailsType { - bool has_request_index; - uint32_t request_index; - bool has_tx_hash; - TxRequestDetailsType_tx_hash_t tx_hash; - bool has_extra_data_len; - uint32_t extra_data_len; - bool has_extra_data_offset; - uint32_t extra_data_offset; -} TxRequestDetailsType; - -typedef struct { - size_t size; - uint8_t bytes[73]; -} TxRequestSerializedType_signature_t; - -typedef struct { - size_t size; - uint8_t bytes[2048]; -} TxRequestSerializedType_serialized_tx_t; - -typedef struct _TxRequestSerializedType { - bool has_signature_index; - uint32_t signature_index; - bool has_signature; - TxRequestSerializedType_signature_t signature; - bool has_serialized_tx; - TxRequestSerializedType_serialized_tx_t serialized_tx; -} TxRequestSerializedType; - -typedef struct _HDNodePathType { - HDNodeType node; - size_t address_n_count; - uint32_t address_n[8]; -} HDNodePathType; - -typedef struct { - size_t size; - uint8_t bytes[73]; -} MultisigRedeemScriptType_signatures_t; - -typedef struct _MultisigRedeemScriptType { - size_t pubkeys_count; - HDNodePathType pubkeys[15]; - size_t signatures_count; - MultisigRedeemScriptType_signatures_t signatures[15]; - bool has_m; - uint32_t m; -} MultisigRedeemScriptType; - -typedef struct { - size_t size; - uint8_t bytes[32]; -} TxInputType_prev_hash_t; - -typedef struct { - size_t size; - uint8_t bytes[1650]; -} TxInputType_script_sig_t; - -typedef struct _TxInputType { - size_t address_n_count; - uint32_t address_n[8]; - TxInputType_prev_hash_t prev_hash; - uint32_t prev_index; - bool has_script_sig; - TxInputType_script_sig_t script_sig; - bool has_sequence; - uint32_t sequence; - bool has_script_type; - InputScriptType script_type; - bool has_multisig; - MultisigRedeemScriptType multisig; - bool has_amount; - uint64_t amount; -} TxInputType; - -typedef struct { - size_t size; - uint8_t bytes[80]; -} TxOutputType_op_return_data_t; - -typedef struct _TxOutputType { - bool has_address; - char address[54]; - size_t address_n_count; - uint32_t address_n[8]; - uint64_t amount; - OutputScriptType script_type; - bool has_multisig; - MultisigRedeemScriptType multisig; - bool has_op_return_data; - TxOutputType_op_return_data_t op_return_data; -} TxOutputType; - -typedef struct { - size_t size; - uint8_t bytes[1024]; -} TransactionType_extra_data_t; - -typedef struct _TransactionType { - bool has_version; - uint32_t version; - size_t inputs_count; - TxInputType inputs[1]; - size_t bin_outputs_count; - TxOutputBinType bin_outputs[1]; - bool has_lock_time; - uint32_t lock_time; - size_t outputs_count; - TxOutputType outputs[1]; - bool has_inputs_cnt; - uint32_t inputs_cnt; - bool has_outputs_cnt; - uint32_t outputs_cnt; - bool has_extra_data; - TransactionType_extra_data_t extra_data; - bool has_extra_data_len; - uint32_t extra_data_len; -} TransactionType; - -/* Extensions */ -extern const pb_extension_type_t wire_in; -extern const pb_extension_type_t wire_out; -extern const pb_extension_type_t wire_debug_in; -extern const pb_extension_type_t wire_debug_out; -extern const pb_extension_type_t wire_tiny; -extern const pb_extension_type_t wire_bootloader; - -/* Default values for struct fields */ -extern const uint32_t CoinType_address_type_default; -extern const uint32_t CoinType_address_type_p2sh_default; -extern const uint32_t CoinType_xpub_magic_default; -extern const uint32_t CoinType_xprv_magic_default; -extern const uint32_t TxInputType_sequence_default; -extern const InputScriptType TxInputType_script_type_default; -extern const uint32_t IdentityType_index_default; - -/* Initializer values for message structs */ -#define HDNodeType_init_default {0, 0, 0, {0, {0}}, false, {0, {0}}, false, {0, {0}}} -#define HDNodePathType_init_default {HDNodeType_init_default, 0, {0, 0, 0, 0, 0, 0, 0, 0}} -#define CoinType_init_default {false, "", false, "", false, 0u, false, 0, false, 5u, false, "", false, 76067358u, false, 76066276u, false, 0, false, 0} -#define MultisigRedeemScriptType_init_default {0, {HDNodePathType_init_default, HDNodePathType_init_default, HDNodePathType_init_default, HDNodePathType_init_default, HDNodePathType_init_default, HDNodePathType_init_default, HDNodePathType_init_default, HDNodePathType_init_default, HDNodePathType_init_default, HDNodePathType_init_default, HDNodePathType_init_default, HDNodePathType_init_default, HDNodePathType_init_default, HDNodePathType_init_default, HDNodePathType_init_default}, 0, {{0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}}, false, 0} -#define TxInputType_init_default {0, {0, 0, 0, 0, 0, 0, 0, 0}, {0, {0}}, 0, false, {0, {0}}, false, 4294967295u, false, InputScriptType_SPENDADDRESS, false, MultisigRedeemScriptType_init_default, false, 0} -#define TxOutputType_init_default {false, "", 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, (OutputScriptType)0, false, MultisigRedeemScriptType_init_default, false, {0, {0}}} -#define TxOutputBinType_init_default {0, {0, {0}}} -#define TransactionType_init_default {false, 0, 0, {TxInputType_init_default}, 0, {TxOutputBinType_init_default}, false, 0, 0, {TxOutputType_init_default}, false, 0, false, 0, false, {0, {0}}, false, 0} -#define TxRequestDetailsType_init_default {false, 0, false, {0, {0}}, false, 0, false, 0} -#define TxRequestSerializedType_init_default {false, 0, false, {0, {0}}, false, {0, {0}}} -#define IdentityType_init_default {false, "", false, "", false, "", false, "", false, "", false, 0u} -#define HDNodeType_init_zero {0, 0, 0, {0, {0}}, false, {0, {0}}, false, {0, {0}}} -#define HDNodePathType_init_zero {HDNodeType_init_zero, 0, {0, 0, 0, 0, 0, 0, 0, 0}} -#define CoinType_init_zero {false, "", false, "", false, 0, false, 0, false, 0, false, "", false, 0, false, 0, false, 0, false, 0} -#define MultisigRedeemScriptType_init_zero {0, {HDNodePathType_init_zero, HDNodePathType_init_zero, HDNodePathType_init_zero, HDNodePathType_init_zero, HDNodePathType_init_zero, HDNodePathType_init_zero, HDNodePathType_init_zero, HDNodePathType_init_zero, HDNodePathType_init_zero, HDNodePathType_init_zero, HDNodePathType_init_zero, HDNodePathType_init_zero, HDNodePathType_init_zero, HDNodePathType_init_zero, HDNodePathType_init_zero}, 0, {{0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}}, false, 0} -#define TxInputType_init_zero {0, {0, 0, 0, 0, 0, 0, 0, 0}, {0, {0}}, 0, false, {0, {0}}, false, 0, false, (InputScriptType)0, false, MultisigRedeemScriptType_init_zero, false, 0} -#define TxOutputType_init_zero {false, "", 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, (OutputScriptType)0, false, MultisigRedeemScriptType_init_zero, false, {0, {0}}} -#define TxOutputBinType_init_zero {0, {0, {0}}} -#define TransactionType_init_zero {false, 0, 0, {TxInputType_init_zero}, 0, {TxOutputBinType_init_zero}, false, 0, 0, {TxOutputType_init_zero}, false, 0, false, 0, false, {0, {0}}, false, 0} -#define TxRequestDetailsType_init_zero {false, 0, false, {0, {0}}, false, 0, false, 0} -#define TxRequestSerializedType_init_zero {false, 0, false, {0, {0}}, false, {0, {0}}} -#define IdentityType_init_zero {false, "", false, "", false, "", false, "", false, "", false, 0} - -/* Field tags (for use in manual encoding/decoding) */ -#define CoinType_coin_name_tag 1 -#define CoinType_coin_shortcut_tag 2 -#define CoinType_address_type_tag 3 -#define CoinType_maxfee_kb_tag 4 -#define CoinType_address_type_p2sh_tag 5 -#define CoinType_signed_message_header_tag 8 -#define CoinType_xpub_magic_tag 9 -#define CoinType_xprv_magic_tag 10 -#define CoinType_segwit_tag 11 -#define CoinType_forkid_tag 12 -#define HDNodeType_depth_tag 1 -#define HDNodeType_fingerprint_tag 2 -#define HDNodeType_child_num_tag 3 -#define HDNodeType_chain_code_tag 4 -#define HDNodeType_private_key_tag 5 -#define HDNodeType_public_key_tag 6 -#define IdentityType_proto_tag 1 -#define IdentityType_user_tag 2 -#define IdentityType_host_tag 3 -#define IdentityType_port_tag 4 -#define IdentityType_path_tag 5 -#define IdentityType_index_tag 6 -#define TxOutputBinType_amount_tag 1 -#define TxOutputBinType_script_pubkey_tag 2 -#define TxRequestDetailsType_request_index_tag 1 -#define TxRequestDetailsType_tx_hash_tag 2 -#define TxRequestDetailsType_extra_data_len_tag 3 -#define TxRequestDetailsType_extra_data_offset_tag 4 -#define TxRequestSerializedType_signature_index_tag 1 -#define TxRequestSerializedType_signature_tag 2 -#define TxRequestSerializedType_serialized_tx_tag 3 -#define HDNodePathType_node_tag 1 -#define HDNodePathType_address_n_tag 2 -#define MultisigRedeemScriptType_pubkeys_tag 1 -#define MultisigRedeemScriptType_signatures_tag 2 -#define MultisigRedeemScriptType_m_tag 3 -#define TxInputType_address_n_tag 1 -#define TxInputType_prev_hash_tag 2 -#define TxInputType_prev_index_tag 3 -#define TxInputType_script_sig_tag 4 -#define TxInputType_sequence_tag 5 -#define TxInputType_script_type_tag 6 -#define TxInputType_multisig_tag 7 -#define TxInputType_amount_tag 8 -#define TxOutputType_address_tag 1 -#define TxOutputType_address_n_tag 2 -#define TxOutputType_amount_tag 3 -#define TxOutputType_script_type_tag 4 -#define TxOutputType_multisig_tag 5 -#define TxOutputType_op_return_data_tag 6 -#define TransactionType_version_tag 1 -#define TransactionType_inputs_tag 2 -#define TransactionType_bin_outputs_tag 3 -#define TransactionType_outputs_tag 5 -#define TransactionType_lock_time_tag 4 -#define TransactionType_inputs_cnt_tag 6 -#define TransactionType_outputs_cnt_tag 7 -#define TransactionType_extra_data_tag 8 -#define TransactionType_extra_data_len_tag 9 -#define wire_in_tag 50002 -#define wire_out_tag 50003 -#define wire_debug_in_tag 50004 -#define wire_debug_out_tag 50005 -#define wire_tiny_tag 50006 -#define wire_bootloader_tag 50007 - -/* Struct field encoding specification for nanopb */ -extern const pb_field_t HDNodeType_fields[7]; -extern const pb_field_t HDNodePathType_fields[3]; -extern const pb_field_t CoinType_fields[11]; -extern const pb_field_t MultisigRedeemScriptType_fields[4]; -extern const pb_field_t TxInputType_fields[9]; -extern const pb_field_t TxOutputType_fields[7]; -extern const pb_field_t TxOutputBinType_fields[3]; -extern const pb_field_t TransactionType_fields[10]; -extern const pb_field_t TxRequestDetailsType_fields[5]; -extern const pb_field_t TxRequestSerializedType_fields[4]; -extern const pb_field_t IdentityType_fields[7]; - -/* Maximum encoded size of messages (where known) */ -#define HDNodeType_size 121 -#define HDNodePathType_size 171 -#define CoinType_size 107 -#define MultisigRedeemScriptType_size 3741 -#define TxInputType_size 5508 -#define TxOutputType_size 3947 -#define TxOutputBinType_size 534 -#define TransactionType_size 11055 -#define TxRequestDetailsType_size 52 -#define TxRequestSerializedType_size 2132 -#define IdentityType_size 416 - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif