1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-22 23:48:12 +00:00

Fix segwit forkid signatures

This commit is contained in:
Jochen Hoenicke 2017-11-07 02:33:53 +01:00 committed by Pavol Rusnak
parent 8da2770051
commit b8bca1c444

View File

@ -733,6 +733,8 @@ static bool signing_sign_segwit_input(TxInputType *txinput) {
resp.has_serialized = true; resp.has_serialized = true;
if (!signing_sign_hash(txinput, node.private_key, node.public_key, hash)) if (!signing_sign_hash(txinput, node.private_key, node.public_key, hash))
return false; return false;
uint8_t sighash = signing_hash_type() & 0xff;
if (txinput->has_multisig) { if (txinput->has_multisig) {
uint32_t r = 1; // skip number of items (filled in later) uint32_t r = 1; // skip number of items (filled in later)
resp.serialized.serialized_tx.bytes[r] = 0; r++; resp.serialized.serialized_tx.bytes[r] = 0; r++;
@ -742,7 +744,7 @@ static bool signing_sign_segwit_input(TxInputType *txinput) {
continue; continue;
} }
nwitnesses++; nwitnesses++;
txinput->multisig.signatures[i].bytes[txinput->multisig.signatures[i].size] = 1; txinput->multisig.signatures[i].bytes[txinput->multisig.signatures[i].size] = sighash;
r += tx_serialize_script(txinput->multisig.signatures[i].size + 1, txinput->multisig.signatures[i].bytes, resp.serialized.serialized_tx.bytes + r); r += tx_serialize_script(txinput->multisig.signatures[i].size + 1, txinput->multisig.signatures[i].bytes, resp.serialized.serialized_tx.bytes + r);
} }
uint32_t script_len = compile_script_multisig(&txinput->multisig, 0); uint32_t script_len = compile_script_multisig(&txinput->multisig, 0);
@ -753,7 +755,7 @@ static bool signing_sign_segwit_input(TxInputType *txinput) {
} else { // single signature } else { // single signature
uint32_t r = 0; uint32_t r = 0;
r += ser_length(2, resp.serialized.serialized_tx.bytes + r); r += ser_length(2, resp.serialized.serialized_tx.bytes + r);
resp.serialized.signature.bytes[resp.serialized.signature.size] = 1; resp.serialized.signature.bytes[resp.serialized.signature.size] = sighash;
r += tx_serialize_script(resp.serialized.signature.size + 1, resp.serialized.signature.bytes, resp.serialized.serialized_tx.bytes + r); r += tx_serialize_script(resp.serialized.signature.size + 1, resp.serialized.signature.bytes, resp.serialized.serialized_tx.bytes + r);
r += tx_serialize_script(33, node.public_key, resp.serialized.serialized_tx.bytes + r); r += tx_serialize_script(33, node.public_key, resp.serialized.serialized_tx.bytes + r);
resp.serialized.serialized_tx.size = r; resp.serialized.serialized_tx.size = r;