From a776efe56b52495ec47d62248d897d9f47362b0e Mon Sep 17 00:00:00 2001 From: coderofstuff <114628839+coderofstuff@users.noreply.github.com> Date: Tue, 16 May 2023 21:33:16 -0600 Subject: [PATCH 1/3] Implement passing change path type and index This allows for full HDWallet style clients. It guarantees that the change will always go into an address that the user has access to. Not necessarily always where the first UTXO came from. --- fuzzing/fuzz_tx_parser.cc | 3 +- src/handler/sign_tx.c | 2 +- src/transaction/deserialize.c | 29 ++++++-- src/transaction/deserialize.h | 6 +- src/transaction/serialize.c | 7 +- src/transaction/serialize.h | 4 +- src/transaction/tx_validate.c | 5 +- tests/application_client/kaspa_transaction.py | 8 ++- tests/test_sign_cmd.py | 69 +++++++++++++++++++ unit-tests/test_tx_parser.c | 22 ++++-- 10 files changed, 136 insertions(+), 19 deletions(-) diff --git a/fuzzing/fuzz_tx_parser.cc b/fuzzing/fuzz_tx_parser.cc index c51bb0c..1dfb53e 100644 --- a/fuzzing/fuzz_tx_parser.cc +++ b/fuzzing/fuzz_tx_parser.cc @@ -14,13 +14,14 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { buffer_t buf = {.ptr = data, .size = size, .offset = 0}; transaction_t tx; parser_status_e status; + uint32_t bip32_path[5]; char version[3] = {0}; char tx_input_len[3] = {0}; char tx_output_len[3] = {0}; memset(&tx, 0, sizeof(tx)); - status = transaction_deserialize(&buf, &tx); + status = transaction_deserialize(&buf, &tx, bip32_path); if (status == PARSING_OK) { format_u64(version, sizeof(version), tx.version); diff --git a/src/handler/sign_tx.c b/src/handler/sign_tx.c index 45f57c5..3348392 100644 --- a/src/handler/sign_tx.c +++ b/src/handler/sign_tx.c @@ -38,7 +38,7 @@ int handler_sign_tx(buffer_t *cdata, uint8_t type, bool more) { G_context.req_type = CONFIRM_TRANSACTION; G_context.state = STATE_NONE; - parser_status_e status = transaction_deserialize(cdata, &G_context.tx_info.transaction); + parser_status_e status = transaction_deserialize(cdata, &G_context.tx_info.transaction, G_context.bip32_path); PRINTF("Header Parsing status: %d.\n", status); diff --git a/src/transaction/deserialize.c b/src/transaction/deserialize.c index 74b47d0..4cc3706 100644 --- a/src/transaction/deserialize.c +++ b/src/transaction/deserialize.c @@ -74,13 +74,17 @@ parser_status_e transaction_input_deserialize(buffer_t *buf, transaction_input_t return buf->size - buf->offset == 0 ? PARSING_OK : INPUT_PARSING_ERROR; } -parser_status_e transaction_deserialize(buffer_t *buf, transaction_t *tx) { +parser_status_e transaction_deserialize(buffer_t *buf, transaction_t *tx, uint32_t* bip32_path) { + uint8_t n_output = 0; + uint8_t n_input = 0; + uint8_t change_address_type = 0; + uint32_t change_address_index = 0; + // Version, 2 bytes if (!buffer_read_u16(buf, &tx->version, BE)) { return VERSION_PARSING_ERROR; } - uint8_t n_output = 0; if (!buffer_read_u8(buf, &n_output)) { return OUTPUTS_LENGTH_PARSING_ERROR; } @@ -91,8 +95,7 @@ parser_status_e transaction_deserialize(buffer_t *buf, transaction_t *tx) { if (tx->tx_output_len < 1 || tx->tx_output_len > 2) { return OUTPUTS_LENGTH_PARSING_ERROR; } - - uint8_t n_input = 0; + if (!buffer_read_u8(buf, &n_input)) { return INPUTS_LENGTH_PARSING_ERROR; } @@ -104,5 +107,23 @@ parser_status_e transaction_deserialize(buffer_t *buf, transaction_t *tx) { return INPUTS_LENGTH_PARSING_ERROR; } + if (!buffer_read_u8(buf, &change_address_type)) { + return HEADER_PARSING_ERROR; + } + + if (change_address_type != 0 && change_address_type != 1) { + return HEADER_PARSING_ERROR; + } + + if (!buffer_read_u32(buf, &change_address_index, BE)) { + return HEADER_PARSING_ERROR; + } + + bip32_path[0] = 0x8000002C; + bip32_path[1] = 0x8001b207; + bip32_path[2] = 0x80000000; + bip32_path[3] = (uint32_t)(change_address_type); + bip32_path[4] = change_address_index; + return buf->size - buf->offset == 0 ? PARSING_OK : HEADER_PARSING_ERROR; } diff --git a/src/transaction/deserialize.h b/src/transaction/deserialize.h index 2dde780..adab637 100644 --- a/src/transaction/deserialize.h +++ b/src/transaction/deserialize.h @@ -10,11 +10,13 @@ * Pointer to buffer with serialized transaction. * @param[out] tx * Pointer to transaction structure. - * + * @param[out] bip32_path + * Pointer to bip32_path array where change address info will be set + * * @return PARSING_OK if success, error status otherwise. * */ -parser_status_e transaction_deserialize(buffer_t *buf, transaction_t *tx); +parser_status_e transaction_deserialize(buffer_t *buf, transaction_t *tx, uint32_t* bip32_path); parser_status_e transaction_output_deserialize(buffer_t *buf, transaction_output_t *txout); diff --git a/src/transaction/serialize.c b/src/transaction/serialize.c index 87a1723..f911726 100644 --- a/src/transaction/serialize.c +++ b/src/transaction/serialize.c @@ -7,7 +7,7 @@ #include "../common/write.h" #include "../common/varint.h" -int transaction_serialize(const transaction_t *tx, uint8_t *out, size_t out_len) { +int transaction_serialize(const transaction_t *tx, uint32_t* path, uint8_t *out, size_t out_len) { size_t offset = 0; if (out_len < 4) { @@ -19,6 +19,11 @@ int transaction_serialize(const transaction_t *tx, uint8_t *out, size_t out_len) out[offset++] = tx->tx_output_len; out[offset++] = tx->tx_input_len; + out[offset++] = (uint8_t) path[3]; + + write_u32_be(out, offset, path[4]); + offset += 4; + return (int) offset; } diff --git a/src/transaction/serialize.h b/src/transaction/serialize.h index 698ac0c..9893fba 100644 --- a/src/transaction/serialize.h +++ b/src/transaction/serialize.h @@ -11,6 +11,8 @@ * * @param[in] tx * Pointer to input transaction structure. + * @param[in] bip32_path + * Pointer to bip32_path array where change address data will be read * @param[out] out * Pointer to output byte buffer. * @param[in] out_len @@ -19,7 +21,7 @@ * @return number of bytes written if success, -1 otherwise. * */ -int transaction_serialize(const transaction_t *tx, uint8_t *out, size_t out_len); +int transaction_serialize(const transaction_t *tx, uint32_t* path, uint8_t *out, size_t out_len); /** * Serialize transaction output in byte buffer. diff --git a/src/transaction/tx_validate.c b/src/transaction/tx_validate.c index 72aeb18..88bb2a2 100644 --- a/src/transaction/tx_validate.c +++ b/src/transaction/tx_validate.c @@ -18,7 +18,6 @@ bool tx_validate_parsed_transaction(transaction_t* tx) { // Change address will always be output[1] if it exists if (tx->tx_output_len == 2) { transaction_output_t change_output = tx->tx_outputs[1]; - transaction_input_t first_utxo = tx->tx_inputs[0]; if (change_output.script_public_key[0] != 0x20) { // Change address can only be SCHNORR address and it's not @@ -31,11 +30,11 @@ bool tx_validate_parsed_transaction(transaction_t* tx) { // was validated when we deserialized the data. memmove(change_address_pubkey, change_output.script_public_key + 1, 32); + // Forcing these values. path[3] and path[4] + // would've been set by transaction_deserialize G_context.bip32_path[0] = 0x8000002C; G_context.bip32_path[1] = 0x8001b207; G_context.bip32_path[2] = 0x80000000; - G_context.bip32_path[3] = (uint32_t)(first_utxo.address_type); - G_context.bip32_path[4] = first_utxo.address_index; G_context.bip32_path_len = 5; diff --git a/tests/application_client/kaspa_transaction.py b/tests/application_client/kaspa_transaction.py index 733d924..07a5fa0 100644 --- a/tests/application_client/kaspa_transaction.py +++ b/tests/application_client/kaspa_transaction.py @@ -81,10 +81,14 @@ def __init__(self, version: int, inputs: list[TransactionInput], outputs: list[TransactionOutput], + change_address_type: int = 0, + change_address_index: int = 0, do_check: bool = True) -> None: self.version: int = version self.inputs: list[TransactionInput] = inputs self.outputs: list[TransactionOutput] = outputs + self.change_address_type: int = change_address_type + self.change_address_index: int = change_address_index if do_check: if not 0 <= self.version <= 1: @@ -94,7 +98,9 @@ def serialize_first_chunk(self) -> bytes: return b"".join([ self.version.to_bytes(2, byteorder="big"), len(self.outputs).to_bytes(1, byteorder="big"), - len(self.inputs).to_bytes(1, byteorder="big") + len(self.inputs).to_bytes(1, byteorder="big"), + self.change_address_type.to_bytes(1, byteorder="big"), + self.change_address_index.to_bytes(4, byteorder="big"), ]) def serialize(self) -> bytes: diff --git a/tests/test_sign_cmd.py b/tests/test_sign_cmd.py index 0e3d9fd..2b7dae3 100644 --- a/tests/test_sign_cmd.py +++ b/tests/test_sign_cmd.py @@ -66,6 +66,75 @@ def test_sign_tx_simple(firmware, backend, navigator, test_name): assert transaction.get_sighash(0) == sighash assert check_signature_validity(public_key, der_sig, sighash, transaction) +def test_sign_tx_simple_change_idx1(firmware, backend, navigator, test_name): + # Use the app interface instead of raw interface + client = KaspaCommandSender(backend) + # The path used for this entire test + path: str = "m/44'/111111'/0'/0/0" + + # First we need to get the public key of the device in order to build the transaction + rapdu = client.get_public_key(path=path) + _, public_key, _, _ = unpack_get_public_key_response(rapdu.data) + + change_path: str = "m/44'/111111'/0'/1/1" + + # First we need to get the public key of the device in order to build the transaction + change_rapdu = client.get_public_key(path=change_path) + _, change_public_key, _, _ = unpack_get_public_key_response(change_rapdu.data) + + valid_change_script_public_key = b"".join([ + 0x20.to_bytes(1, 'big'), + change_public_key[1:33], + 0xac.to_bytes(1, 'big')]).hex() + + # Create the transaction that will be sent to the device for signing + transaction = Transaction( + version=0, + change_address_index=1, + change_address_type=1, + inputs=[ + TransactionInput( + value=1100000, + tx_id="40b022362f1a303518e2b49f86f87a317c87b514ca0f3d08ad2e7cf49d08cc70", + address_type=0, + address_index=0, + index=0, + public_key=public_key[1:33] + ) + ], + outputs=[ + TransactionOutput( + value=1090000, + script_public_key=valid_change_script_public_key + ) + ] + ) + + # Send the sign device instruction. + # As it requires on-screen validation, the function is asynchronous. + # It will yield the result when the navigation is done + with client.sign_tx(transaction=transaction): + # Validate the on-screen request by performing the navigation appropriate for this device + if firmware.device.startswith("nano"): + navigator.navigate_until_text_and_compare(NavInsID.RIGHT_CLICK, + [NavInsID.BOTH_CLICK], + "Approve", + ROOT_SCREENSHOT_PATH, + test_name) + else: + navigator.navigate_until_text_and_compare(NavInsID.USE_CASE_REVIEW_TAP, + [NavInsID.USE_CASE_REVIEW_CONFIRM, + NavInsID.USE_CASE_STATUS_DISMISS], + "Hold to sign", + ROOT_SCREENSHOT_PATH, + test_name) + + # The device as yielded the result, parse it and ensure that the signature is correct + response = client.get_async_response().data + _, _, _, der_sig, _, sighash = unpack_sign_tx_response(response) + assert transaction.get_sighash(0) == sighash + assert check_signature_validity(public_key, der_sig, sighash, transaction) + def test_sign_tx_with_change(firmware, backend, navigator, test_name): # Use the app interface instead of raw interface client = KaspaCommandSender(backend) diff --git a/unit-tests/test_tx_parser.c b/unit-tests/test_tx_parser.c index db34921..6a5b061 100644 --- a/unit-tests/test_tx_parser.c +++ b/unit-tests/test_tx_parser.c @@ -17,22 +17,26 @@ static void test_tx_serialization(void **state) { transaction_t tx; tx.tx_output_len = 2; tx.tx_input_len = 3; + + uint32_t path[5] = {0}; // clang-format off uint8_t raw_tx[] = { // header - 0x00, 0x01, 0x02, 0x03 + 0x00, 0x01, 0x02, 0x03, + 0x01, + 0x04, 0x05, 0x06, 0xFF }; buffer_t buf = {.ptr = raw_tx, .size = sizeof(raw_tx), .offset = 0}; - parser_status_e status = transaction_deserialize(&buf, &tx); + parser_status_e status = transaction_deserialize(&buf, &tx, path); assert_int_equal(status, PARSING_OK); assert_int_equal(tx.version, 1); uint8_t output[350]; - int length = transaction_serialize(&tx, output, sizeof(output)); + int length = transaction_serialize(&tx, path, output, sizeof(output)); assert_int_equal(length, sizeof(raw_tx)); assert_memory_equal(raw_tx, output, sizeof(raw_tx)); } @@ -42,7 +46,9 @@ static int run_test_tx_serialize(uint8_t* raw_tx, size_t raw_tx_len) { buffer_t buf = {.ptr = raw_tx, .size = raw_tx_len, .offset = 0}; - return transaction_deserialize(&buf, &tx); + uint32_t path[5] = {0}; + + return transaction_deserialize(&buf, &tx, path); } static void test_tx_deserialization_fail(void **state) { @@ -72,11 +78,16 @@ static void test_tx_deserialization_fail(void **state) { 0x00, 0x01, 0x02, 0x00 }; + uint8_t invalid_change_type[] = { + 0x00, 0x01, 0x02, 0x03, 0x02 + }; + assert_int_equal(run_test_tx_serialize(invalid_version, sizeof(invalid_version)), VERSION_PARSING_ERROR); assert_int_equal(run_test_tx_serialize(missing_outlen, sizeof(missing_outlen)), OUTPUTS_LENGTH_PARSING_ERROR); assert_int_equal(run_test_tx_serialize(invalid_outlen, sizeof(invalid_outlen)), OUTPUTS_LENGTH_PARSING_ERROR); assert_int_equal(run_test_tx_serialize(missing_inlen, sizeof(missing_inlen)), INPUTS_LENGTH_PARSING_ERROR); assert_int_equal(run_test_tx_serialize(invalid_inlen, sizeof(invalid_inlen)), INPUTS_LENGTH_PARSING_ERROR); + assert_int_equal(run_test_tx_serialize(invalid_change_type, sizeof(invalid_change_type)), HEADER_PARSING_ERROR); } static void test_tx_input_serialization(void **state) { @@ -309,8 +320,9 @@ static void test_serialization_fail(void **state) { transaction_input_t txin; uint8_t buffer[1] = {0}; + uint32_t path[5] = {0}; - assert_int_equal(transaction_serialize(&tx, buffer, sizeof(buffer)), -1); + assert_int_equal(transaction_serialize(&tx, path, buffer, sizeof(buffer)), -1); assert_int_equal(transaction_output_serialize(&txout, buffer, sizeof(buffer)), -1); assert_int_equal(transaction_input_serialize(&txin, buffer, sizeof(buffer)), -1); } From 64065023097709c259ea5dfacffae14a24de69d7 Mon Sep 17 00:00:00 2001 From: coderofstuff <114628839+coderofstuff@users.noreply.github.com> Date: Tue, 16 May 2023 22:43:01 -0600 Subject: [PATCH 2/3] Fix golden images --- .../test_sign_tx_simple_change_idx1/00000.png | Bin 0 -> 379 bytes .../test_sign_tx_simple_change_idx1/00001.png | Bin 0 -> 501 bytes .../test_sign_tx_simple_change_idx1/00002.png | Bin 0 -> 495 bytes .../test_sign_tx_simple_change_idx1/00003.png | Bin 0 -> 492 bytes .../test_sign_tx_simple_change_idx1/00004.png | Bin 0 -> 483 bytes .../test_sign_tx_simple_change_idx1/00005.png | Bin 0 -> 339 bytes .../test_sign_tx_simple_change_idx1/00006.png | Bin 0 -> 320 bytes .../test_sign_tx_simple_change_idx1/00007.png | Bin 0 -> 341 bytes .../test_sign_tx_simple_change_idx1/00008.png | Bin 0 -> 391 bytes .../test_sign_tx_simple_change_idx1/00000.png | Bin 0 -> 419 bytes .../test_sign_tx_simple_change_idx1/00001.png | Bin 0 -> 941 bytes .../test_sign_tx_simple_change_idx1/00002.png | Bin 0 -> 547 bytes .../test_sign_tx_simple_change_idx1/00003.png | Bin 0 -> 397 bytes .../test_sign_tx_simple_change_idx1/00004.png | Bin 0 -> 368 bytes .../test_sign_tx_simple_change_idx1/00005.png | Bin 0 -> 364 bytes .../test_sign_tx_simple_change_idx1/00006.png | Bin 0 -> 450 bytes .../test_sign_tx_simple_change_idx1/00000.png | Bin 0 -> 419 bytes .../test_sign_tx_simple_change_idx1/00001.png | Bin 0 -> 941 bytes .../test_sign_tx_simple_change_idx1/00002.png | Bin 0 -> 547 bytes .../test_sign_tx_simple_change_idx1/00003.png | Bin 0 -> 397 bytes .../test_sign_tx_simple_change_idx1/00004.png | Bin 0 -> 368 bytes .../test_sign_tx_simple_change_idx1/00005.png | Bin 0 -> 364 bytes .../test_sign_tx_simple_change_idx1/00006.png | Bin 0 -> 450 bytes .../test_sign_tx_simple_change_idx1/00000.png | Bin 0 -> 9778 bytes .../test_sign_tx_simple_change_idx1/00001.png | Bin 0 -> 15241 bytes .../test_sign_tx_simple_change_idx1/00002.png | Bin 0 -> 10486 bytes .../test_sign_tx_simple_change_idx1/00003.png | Bin 0 -> 5086 bytes .../test_sign_tx_simple_change_idx1/00004.png | Bin 0 -> 10213 bytes 28 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/snapshots/nanos/test_sign_tx_simple_change_idx1/00000.png create mode 100644 tests/snapshots/nanos/test_sign_tx_simple_change_idx1/00001.png create mode 100644 tests/snapshots/nanos/test_sign_tx_simple_change_idx1/00002.png create mode 100644 tests/snapshots/nanos/test_sign_tx_simple_change_idx1/00003.png create mode 100644 tests/snapshots/nanos/test_sign_tx_simple_change_idx1/00004.png create mode 100644 tests/snapshots/nanos/test_sign_tx_simple_change_idx1/00005.png create mode 100644 tests/snapshots/nanos/test_sign_tx_simple_change_idx1/00006.png create mode 100644 tests/snapshots/nanos/test_sign_tx_simple_change_idx1/00007.png create mode 100644 tests/snapshots/nanos/test_sign_tx_simple_change_idx1/00008.png create mode 100644 tests/snapshots/nanosp/test_sign_tx_simple_change_idx1/00000.png create mode 100644 tests/snapshots/nanosp/test_sign_tx_simple_change_idx1/00001.png create mode 100644 tests/snapshots/nanosp/test_sign_tx_simple_change_idx1/00002.png create mode 100644 tests/snapshots/nanosp/test_sign_tx_simple_change_idx1/00003.png create mode 100644 tests/snapshots/nanosp/test_sign_tx_simple_change_idx1/00004.png create mode 100644 tests/snapshots/nanosp/test_sign_tx_simple_change_idx1/00005.png create mode 100644 tests/snapshots/nanosp/test_sign_tx_simple_change_idx1/00006.png create mode 100644 tests/snapshots/nanox/test_sign_tx_simple_change_idx1/00000.png create mode 100644 tests/snapshots/nanox/test_sign_tx_simple_change_idx1/00001.png create mode 100644 tests/snapshots/nanox/test_sign_tx_simple_change_idx1/00002.png create mode 100644 tests/snapshots/nanox/test_sign_tx_simple_change_idx1/00003.png create mode 100644 tests/snapshots/nanox/test_sign_tx_simple_change_idx1/00004.png create mode 100644 tests/snapshots/nanox/test_sign_tx_simple_change_idx1/00005.png create mode 100644 tests/snapshots/nanox/test_sign_tx_simple_change_idx1/00006.png create mode 100644 tests/snapshots/stax/test_sign_tx_simple_change_idx1/00000.png create mode 100644 tests/snapshots/stax/test_sign_tx_simple_change_idx1/00001.png create mode 100644 tests/snapshots/stax/test_sign_tx_simple_change_idx1/00002.png create mode 100644 tests/snapshots/stax/test_sign_tx_simple_change_idx1/00003.png create mode 100644 tests/snapshots/stax/test_sign_tx_simple_change_idx1/00004.png diff --git a/tests/snapshots/nanos/test_sign_tx_simple_change_idx1/00000.png b/tests/snapshots/nanos/test_sign_tx_simple_change_idx1/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..88429892f93b7b0e9cd223636a3660d85014331c GIT binary patch literal 379 zcmV->0fhdEP);X?a z0de~=yk>HjK6hmD2E_AklvVW+oNFx&=(6=+WpaQd|YZbwnuFqAP4RRg%|`$U)uhLCPG8^ zOXBrf4-Ln{Pe6(Ev6_h8n-1$B=jL#K4c%4%TOC>to9$P zF%dgE8H}05I{Q2zkoZNMPtXGc_6Q+KL1delFhs7OTvvBPvzM^72e}|27+iKDU+jm0 zVw{ZromodV&kA{f-&7SL8n0G}7%NPGo<52GP|SxQr;8`@=IOYiDXrZuURVVH00013 Zhz}pEasT%;G7VI59_ib=bCSFJG`K`{I+Kv5J$Q6zF6u}en($=T0C7~F1I z`!I~})X@O|&I7)FvzHNgl5XSPNB!A3*&oi0k1dytLSH#rJDKqz+hrNoVzi*f&jXFb zOi`yg=ha4DL~;tk0AI4Lcm|)el$ezElAnSWZXaSS%sl90n6N2{)Lp*GcK|LUDUh$& z!db}I&^XA($jEd6Sq7R$Oh?@u)pqb7!iGPbR^FYaKI#Pk0H#-zSCphr_7EQB0BgXH zwEi;@OkLLBO!?qWDhu7o$T|F`j?turwu5o0+kV~N4$?Ig>%i)OyG!$Z;0wNA5EaXp z5UhW&5NjWr462nypcKP=@#HF5ZCg@_ciAO(S1WCMidCUgDD_VifGe7OK99=iY|(}a zeegGi1W|tq^5t!J1duq@oMF3t;4I-f4=~+kn8~wkh0Nu402fuX%wzk2C#Xq=Bb}R1 z6GStG(#RR$5gLcZND&@(lbW-QCWvMVr4wqXmL-kjQM^n0#fI!VaoJoV_5boSe_E!T rx2w1@HNO@4|B5I~$^k`D6#thOcIkKw)gg4a00000NkvXXu0mjf0sZG= literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_sign_tx_simple_change_idx1/00002.png b/tests/snapshots/nanos/test_sign_tx_simple_change_idx1/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..4fbea575b2359a73d5be8162d748e34328a00297 GIT binary patch literal 495 zcmVbmfHBvq&fpzP6_v<%5#m$O!0SWEDw(JF7&K0WRT8PQd=u{geBFZNW3tFs z44G5BG%+$F9YD+|)UfGD%~5!R{UJ>Jf%h0$o}H#XssI3h%N9k~#DRxxf~_1N3H(U* z_XIs*5f4z|)pFf5p~|f?}-_Q=O5wvAW57j0h=e*&Z)= z;;GeyQJ1_;J&Rb2z;O_JL2Ags6y&a26-SwwzDocKxiL&iDNAkdTRD_ zJN&U7EYTzcpdi8f$o1-GNl^BzQXeOrzI6(+)QhdjA(Aobgkupa$T`RRzSrDTtw@L_ l2fva`Xh;Vn5{bn3;sv}>$g9CASPlRH002ovPDHLkV1l1=@%vX* zmp&P5%mQ8xl-!t^fb5g(rxO$K?JB(p7wcLU^kpL z@@qx27IAw?4l{9QcqTx&!J)~PqiT&x2jE}AX+HFLB+9eP)U93sh^X5m?{{KHWt*^7 z0xW^IjQ*ZvLLJecOypoCQH55r{(CsvlANGrLYFO7!OhpbdaFY$s0uL}N2P|(aH}x+ zwS$7?=Hoy>qV;{{@71|fAT2C2(y>RUIq5iK&B8os8 zkdX}&abL0(uU2ozwIbS%?8rXlRo~y}r&c=~z?xt{0ubkWe9P|Te*=&JJf@=Emi`iO zRS4yZ?}WvxwfFb}0Pg@YGl7h$&TW`g?X8M9wpmz0H)yqmT^gI-t5&kVg$n1NB!e1e i2`aty2SE@7x8Mii@RhWNcTSH00000t0CjY_cBX=^zO>!ovuU0baO-8aMO&FmQhRR{C{AuaF8Xa zmTSB8Bk(LiIkh1h>ew4j88gA_&sv;I5OCuZZpxJ>$Cy-a7P%-&T4c~T2OuxNDTPyR zWh=#@I1{RS)*^$(Eda#=vTMY0)T~iw0sBo@iHA7JNihr$x%>YDSq{)A4OI{GKHV<> znzrY8|F#IO4(~4}VsIrpU@KO^cfJ{>~L^%|N~<@H3{+jbsP@NC--LOprjcgSiJhFHm&awAl|d9%CUCw)H-sxA z&C2_?UF;1;F$-gK7J8Po6 z#Sov~1h@e3sf#sQ|8&(=7PzMhJ&=8BT-T?v>dW74-!boT5BSGieGe$A#1oP_2!h~a Z_yLfLP`z;Z3k?7O002ovPDHLkV1ml0+gtzu literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_sign_tx_simple_change_idx1/00005.png b/tests/snapshots/nanos/test_sign_tx_simple_change_idx1/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..ddddd35919d140070ad738c47f61de6c8c32e10e GIT binary patch literal 339 zcmV-Z0j&OsP)X{n4}RPgb+gfx!=5Zuri1GWf{=2`+KFjj>>d0S!YD?qyNmnl38vu}<*8HTeL6{J+3 z4FWhI&zyKgp|817P0Q%|>NDQ}81Det z&Qv>{+x{HdxWVj$`kBxRlFgjjm$zv?$8Ph@`9Gjg_BikVAFspHQnaPIrM(O-?33!K l_VzesC?SLpLI?o>JOG9954aq|4WR%4002ovPDHLkV1g{_pFjWr literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_sign_tx_simple_change_idx1/00006.png b/tests/snapshots/nanos/test_sign_tx_simple_change_idx1/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..b8a4cf443952460c665498d3298d22926a23b659 GIT binary patch literal 320 zcmV-G0l)rrk$C`6l5LW1r$9sm_HyZl6m00017mE;|Og6HF-nzBv#-t9*(59Q;^`U3s5pU@W;@AHyjKJVeINAwJs9+jK8=zMo`wbC|H=sRxVN1$eDZi_i zx4~cu5_wxG+Yry2qARt#sf<#$}=)VJ~ zBlvESR-Jq3=$jydfC?r!$iuAw9oGJ!U-M%YMJ+y&Ch%TCM^JUq5BGkf8O_{y`#mQ} nq4{V^xv44i3V1v$0C_ea3_go|-rj`700000NkvXXu0mjfd&QW1 literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_sign_tx_simple_change_idx1/00008.png b/tests/snapshots/nanos/test_sign_tx_simple_change_idx1/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..277becc9d6c5880393d698b4d865acdcf92d3c39 GIT binary patch literal 391 zcmV;20eJq2P)>|?)hCp6TgqE|?Xfp{HZbk~=IF92u&v2djYiAKL=>Ho1*V79C z0D$X+?YP}W!gw4>ZsQ0y=oGk4DfhYhkd4b!F)65k?T{(}56XFMD(-5?=6Esj<(Ew< zF;D^AKKuNa)#9I2UBrTeR?0PYaRV0p4fE=-fq8AYoq l$}GtFK^FW!;W&D$(iko|UTF@u&Yag{)@)mN`1iGamjW z?-@|#I%DcL`R;-Wx1m8iV&w2DI!Y>*e7y)ffN(0IS^hR>UWBs}p1R_IuO&=RwhCUX{fYF*|8$ z-}7I$&Jfhf0$I4MAmWJn3INi&qfcFT$NR000000000U?jMqbF~2?)b|e4* N002ovPDHLkV1ho3w>JO) literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_sign_tx_simple_change_idx1/00001.png b/tests/snapshots/nanosp/test_sign_tx_simple_change_idx1/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..81ff98e2d44f206dc0ca7668cd66da96597ef3ed GIT binary patch literal 941 zcmV;e15*5nP)byNtm#Gvl)aUGmQ%0yt`0P7D@&LPSph++PT}ARU>1XOKPG_=sO3?It(lR_sXd?_ z*i<{Atp@#~>f5%id0`?G^C`PRQ4~c{5I%JOStbPieC@J)5d2mScPHbX!#o?x zLn7{#>&JpU2T-G#5%d78RMS9Wti38N(;5`F->gw0?6?(FQM}e#e}IyK~e; z>Pr>K175gn;#77*5Ezco6~NZ1^N)tUoA9Y7-hRWBot?}PNL zdU&PF;bRM(#amgP!p0sTeGsdIBbOcM<`}9jr#uDj09=6;C7tb2Z8ekosz85Fqpd7C zOZ&qE8j!FU-o(i8#?bt5%--d8yBy%4bTGZou=?(bfaUiS7S%8j&-7R<5HY7mdQAMhAv_Coo z(Zz0+ScNH)De8|rORp(OW zadED(6PDE8j1@yok^=K@g{lu$;rvtnD{CT(KpT*nfrfZr9<8ci?svrF`e<62JYS4qH@09IeFC|1HyelKvzI>JrT%U z%C>=4R^HJX$C!l{@@A^E@RG*ZchwttzJ-!X#=RLY1X*AGMNt$*Q6%seCnV6QCsLY? P00000NkvXXu0mjfHT=4w literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_sign_tx_simple_change_idx1/00002.png b/tests/snapshots/nanosp/test_sign_tx_simple_change_idx1/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..ef35add83bcf22e20f70e68487198dc055c454bb GIT binary patch literal 547 zcmV+;0^I$HP)9zp?0001d4Ew(C`yPMgjL))1 z=<;nC#}t|Os1VvuqeA{wMnAUJHqE^L`8cLxI^XFM9n=Y^k=R#o9EBRP6v^ZZP)eB=pV=x?2pp6dbvfoB>G(04bIL008`wS%&tPfbq{uaw4B(sk^G^O>v5ZtM$X;O*OY% zsV;u1S`jL0Yj^+4INs{+1vLuE>JLY|BQtJ>LuNB>+^WIbzeb@XWa9KZW9r=@90;wwtbMVULmYR*gqOXL_(J3pr%KJ5t}GnS&nymV^{vKT#5w`}W7N0rL0{}HpW zI*}p^StFmsYbQ11^-6t3qj@XH1(+5(ny%((HE<^CJim)6mTiULyn>v#_x^sgbgcp0h!H9g4h?C7Yt-`d>%op;HUNo{qJe2<>| zep$;Lt2C)tFY%IF=4;N`)j8{5SzTTFCNu7jyTe!SEwfe2wgt{z=FV?_sO);#xtr#{ zG@Y2bf;VO;%PpB#qu|B)>n=y#$x4X)#Of2}{yKYI&u-c|dEUhC9JyONKQ$c_`5b@5?Ot=* z&%5FYrk0G4FY?XhX4Qo literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_sign_tx_simple_change_idx1/00004.png b/tests/snapshots/nanosp/test_sign_tx_simple_change_idx1/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..48d98b408c9cf64d9b605b426fcc8b9ab745b50b GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-&ba4!+nDh2VVBcW{9@oIA zQuTZPC+(SDw?K)D&yklg`0nSaipIKC^DG=VfVvKp^j{Uu2)z2oT`^4?>7w!d~2T zDqo=aLh0!qwpFjTu}N=PaD->$#5Mo_34hCS{F(5DT|W_MQOwl!f4X9`_jX?8|6JT> zw)gAWt;+jE)Xk1oEVi+gPrCPNzrp^$kB$mFE(2qoXE&S#R3?`o37V z-?WA5^?vU29vGxtnt!Zg)))1~Y}yxF!yei05&8%UFJ!R2lKDZs%Q5%OM}C8ZJzf1= J);T3K0RZ6nq_Y43 literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_sign_tx_simple_change_idx1/00005.png b/tests/snapshots/nanosp/test_sign_tx_simple_change_idx1/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YX3?9VUBa#nzxVl&J0z5Lr<4V)DqONsWl=Ty8FAe>SI#|1cp;{v3) z?{3qtcrCyg*$*Di0rRB0dnEW<0h1KF%RT@A0Dc{Cv{AN5uTJ*MNOYpQ#c()M=kP;4!j_s*Jnp1+}fA?kgIRF`8K?;Zk!g#(3q`V|CAb1J>lvrgWVMZhBAcIWtV;?HkZ7+M=c-3`@Q0ZCd1&)*}WP4A<7pOkVh8qNLok-OZx za6gZU_V+^OFcbg)u-i+&zjc8xw3Xr#yc@5gDPJgZ|dJ=w7gEReGsoh_01&kiTrLsJuN3NqD s^=DD5is%-E1I=Ib0{{R30DyP+0bfcHJaLX%RR91007*qoM6N<$g2}_mdjJ3c literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_sign_tx_simple_change_idx1/00000.png b/tests/snapshots/nanox/test_sign_tx_simple_change_idx1/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..df51419d9880ff10f1f24cebe779f11ff7ce27e0 GIT binary patch literal 419 zcmV;U0bKrxP)D$(iko|UTF@u&Yag{)@)mN`1iGamjW z?-@|#I%DcL`R;-Wx1m8iV&w2DI!Y>*e7y)ffN(0IS^hR>UWBs}p1R_IuO&=RwhCUX{fYF*|8$ z-}7I$&Jfhf0$I4MAmWJn3INi&qfcFT$NR000000000U?jMqbF~2?)b|e4* N002ovPDHLkV1ho3w>JO) literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_sign_tx_simple_change_idx1/00001.png b/tests/snapshots/nanox/test_sign_tx_simple_change_idx1/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..81ff98e2d44f206dc0ca7668cd66da96597ef3ed GIT binary patch literal 941 zcmV;e15*5nP)byNtm#Gvl)aUGmQ%0yt`0P7D@&LPSph++PT}ARU>1XOKPG_=sO3?It(lR_sXd?_ z*i<{Atp@#~>f5%id0`?G^C`PRQ4~c{5I%JOStbPieC@J)5d2mScPHbX!#o?x zLn7{#>&JpU2T-G#5%d78RMS9Wti38N(;5`F->gw0?6?(FQM}e#e}IyK~e; z>Pr>K175gn;#77*5Ezco6~NZ1^N)tUoA9Y7-hRWBot?}PNL zdU&PF;bRM(#amgP!p0sTeGsdIBbOcM<`}9jr#uDj09=6;C7tb2Z8ekosz85Fqpd7C zOZ&qE8j!FU-o(i8#?bt5%--d8yBy%4bTGZou=?(bfaUiS7S%8j&-7R<5HY7mdQAMhAv_Coo z(Zz0+ScNH)De8|rORp(OW zadED(6PDE8j1@yok^=K@g{lu$;rvtnD{CT(KpT*nfrfZr9<8ci?svrF`e<62JYS4qH@09IeFC|1HyelKvzI>JrT%U z%C>=4R^HJX$C!l{@@A^E@RG*ZchwttzJ-!X#=RLY1X*AGMNt$*Q6%seCnV6QCsLY? P00000NkvXXu0mjfHT=4w literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_sign_tx_simple_change_idx1/00002.png b/tests/snapshots/nanox/test_sign_tx_simple_change_idx1/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..ef35add83bcf22e20f70e68487198dc055c454bb GIT binary patch literal 547 zcmV+;0^I$HP)9zp?0001d4Ew(C`yPMgjL))1 z=<;nC#}t|Os1VvuqeA{wMnAUJHqE^L`8cLxI^XFM9n=Y^k=R#o9EBRP6v^ZZP)eB=pV=x?2pp6dbvfoB>G(04bIL008`wS%&tPfbq{uaw4B(sk^G^O>v5ZtM$X;O*OY% zsV;u1S`jL0Yj^+4INs{+1vLuE>JLY|BQtJ>LuNB>+^WIbzeb@XWa9KZW9r=@90;wwtbMVULmYR*gqOXL_(J3pr%KJ5t}GnS&nymV^{vKT#5w`}W7N0rL0{}HpW zI*}p^StFmsYbQ11^-6t3qj@XH1(+5(ny%((HE<^CJim)6mTiULyn>v#_x^sgbgcp0h!H9g4h?C7Yt-`d>%op;HUNo{qJe2<>| zep$;Lt2C)tFY%IF=4;N`)j8{5SzTTFCNu7jyTe!SEwfe2wgt{z=FV?_sO);#xtr#{ zG@Y2bf;VO;%PpB#qu|B)>n=y#$x4X)#Of2}{yKYI&u-c|dEUhC9JyONKQ$c_`5b@5?Ot=* z&%5FYrk0G4FY?XhX4Qo literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_sign_tx_simple_change_idx1/00004.png b/tests/snapshots/nanox/test_sign_tx_simple_change_idx1/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..48d98b408c9cf64d9b605b426fcc8b9ab745b50b GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-&ba4!+nDh2VVBcW{9@oIA zQuTZPC+(SDw?K)D&yklg`0nSaipIKC^DG=VfVvKp^j{Uu2)z2oT`^4?>7w!d~2T zDqo=aLh0!qwpFjTu}N=PaD->$#5Mo_34hCS{F(5DT|W_MQOwl!f4X9`_jX?8|6JT> zw)gAWt;+jE)Xk1oEVi+gPrCPNzrp^$kB$mFE(2qoXE&S#R3?`o37V z-?WA5^?vU29vGxtnt!Zg)))1~Y}yxF!yei05&8%UFJ!R2lKDZs%Q5%OM}C8ZJzf1= J);T3K0RZ6nq_Y43 literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_sign_tx_simple_change_idx1/00005.png b/tests/snapshots/nanox/test_sign_tx_simple_change_idx1/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YX3?9VUBa#nzxVl&J0z5Lr<4V)DqONsWl=Ty8FAe>SI#|1cp;{v3) z?{3qtcrCyg*$*Di0rRB0dnEW<0h1KF%RT@A0Dc{Cv{AN5uTJ*MNOYpQ#c()M=kP;4!j_s*Jnp1+}fA?kgIRF`8K?;Zk!g#(3q`V|CAb1J>lvrgWVMZhBAcIWtV;?HkZ7+M=c-3`@Q0ZCd1&)*}WP4A<7pOkVh8qNLok-OZx za6gZU_V+^OFcbg)u-i+&zjc8xw3Xr#yc@5gDPJgZ|dJ=w7gEReGsoh_01&kiTrLsJuN3NqD s^=DD5is%-E1I=Ib0{{R30DyP+0bfcHJaLX%RR91007*qoM6N<$g2}_mdjJ3c literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_sign_tx_simple_change_idx1/00000.png b/tests/snapshots/stax/test_sign_tx_simple_change_idx1/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..259a4e973a5561f830e2ddec80cdf06ccb5b0081 GIT binary patch literal 9778 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 HbBX^Sdc4XY literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_sign_tx_simple_change_idx1/00001.png b/tests/snapshots/stax/test_sign_tx_simple_change_idx1/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..64791b3be7818a2f3273697d032cce685c022562 GIT binary patch literal 15241 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 QiY<$wp2@wMyDrcFFEwN2qW}N^ literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_sign_tx_simple_change_idx1/00002.png b/tests/snapshots/stax/test_sign_tx_simple_change_idx1/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..10d784e8728f7db9e92fbc6d1c79a97f0bb7e97a GIT binary patch literal 10486 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 literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_sign_tx_simple_change_idx1/00003.png b/tests/snapshots/stax/test_sign_tx_simple_change_idx1/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..7a05bf7b31c3fca94a4a464ad8709d1c20600e36 GIT binary patch literal 5086 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 literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_sign_tx_simple_change_idx1/00004.png b/tests/snapshots/stax/test_sign_tx_simple_change_idx1/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..7e6aefd27af71f2d041844d643e611baf34213f1 GIT binary patch literal 10213 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 Date: Tue, 16 May 2023 22:56:25 -0600 Subject: [PATCH 3/3] C Lint fixes --- src/handler/sign_tx.c | 3 ++- src/transaction/deserialize.c | 4 ++-- src/transaction/deserialize.h | 4 ++-- src/transaction/serialize.c | 2 +- src/transaction/serialize.h | 2 +- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/handler/sign_tx.c b/src/handler/sign_tx.c index 3348392..31d2457 100644 --- a/src/handler/sign_tx.c +++ b/src/handler/sign_tx.c @@ -38,7 +38,8 @@ int handler_sign_tx(buffer_t *cdata, uint8_t type, bool more) { G_context.req_type = CONFIRM_TRANSACTION; G_context.state = STATE_NONE; - parser_status_e status = transaction_deserialize(cdata, &G_context.tx_info.transaction, G_context.bip32_path); + parser_status_e status = + transaction_deserialize(cdata, &G_context.tx_info.transaction, G_context.bip32_path); PRINTF("Header Parsing status: %d.\n", status); diff --git a/src/transaction/deserialize.c b/src/transaction/deserialize.c index 4cc3706..995450a 100644 --- a/src/transaction/deserialize.c +++ b/src/transaction/deserialize.c @@ -74,7 +74,7 @@ parser_status_e transaction_input_deserialize(buffer_t *buf, transaction_input_t return buf->size - buf->offset == 0 ? PARSING_OK : INPUT_PARSING_ERROR; } -parser_status_e transaction_deserialize(buffer_t *buf, transaction_t *tx, uint32_t* bip32_path) { +parser_status_e transaction_deserialize(buffer_t *buf, transaction_t *tx, uint32_t *bip32_path) { uint8_t n_output = 0; uint8_t n_input = 0; uint8_t change_address_type = 0; @@ -95,7 +95,7 @@ parser_status_e transaction_deserialize(buffer_t *buf, transaction_t *tx, uint32 if (tx->tx_output_len < 1 || tx->tx_output_len > 2) { return OUTPUTS_LENGTH_PARSING_ERROR; } - + if (!buffer_read_u8(buf, &n_input)) { return INPUTS_LENGTH_PARSING_ERROR; } diff --git a/src/transaction/deserialize.h b/src/transaction/deserialize.h index adab637..d57a079 100644 --- a/src/transaction/deserialize.h +++ b/src/transaction/deserialize.h @@ -12,11 +12,11 @@ * Pointer to transaction structure. * @param[out] bip32_path * Pointer to bip32_path array where change address info will be set - * + * * @return PARSING_OK if success, error status otherwise. * */ -parser_status_e transaction_deserialize(buffer_t *buf, transaction_t *tx, uint32_t* bip32_path); +parser_status_e transaction_deserialize(buffer_t *buf, transaction_t *tx, uint32_t *bip32_path); parser_status_e transaction_output_deserialize(buffer_t *buf, transaction_output_t *txout); diff --git a/src/transaction/serialize.c b/src/transaction/serialize.c index f911726..6bdf494 100644 --- a/src/transaction/serialize.c +++ b/src/transaction/serialize.c @@ -7,7 +7,7 @@ #include "../common/write.h" #include "../common/varint.h" -int transaction_serialize(const transaction_t *tx, uint32_t* path, uint8_t *out, size_t out_len) { +int transaction_serialize(const transaction_t *tx, uint32_t *path, uint8_t *out, size_t out_len) { size_t offset = 0; if (out_len < 4) { diff --git a/src/transaction/serialize.h b/src/transaction/serialize.h index 9893fba..6c1ec24 100644 --- a/src/transaction/serialize.h +++ b/src/transaction/serialize.h @@ -21,7 +21,7 @@ * @return number of bytes written if success, -1 otherwise. * */ -int transaction_serialize(const transaction_t *tx, uint32_t* path, uint8_t *out, size_t out_len); +int transaction_serialize(const transaction_t *tx, uint32_t *path, uint8_t *out, size_t out_len); /** * Serialize transaction output in byte buffer.