1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-26 17:38:39 +00:00

firmware: don't use hardcoded version_group_id, but use the one from coin definition

This commit is contained in:
Pavol Rusnak 2018-08-06 16:20:27 +02:00
parent dca28f1c44
commit 3de28570e4
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D
3 changed files with 12 additions and 12 deletions

View File

@ -511,13 +511,13 @@ void signing_init(const SignTx *msg, const CoinInfo *_coin, const HDNode *_root)
multisig_fp_mismatch = false; multisig_fp_mismatch = false;
next_nonsegwit_input = 0xffffffff; next_nonsegwit_input = 0xffffffff;
tx_init(&to, inputs_count, outputs_count, version, lock_time, expiry, 0, coin->curve->hasher_sign, overwintered); tx_init(&to, inputs_count, outputs_count, version, lock_time, expiry, 0, coin->curve->hasher_sign, overwintered, coin->version_group_id);
if (coin->decred) { if (coin->decred) {
to.version |= (DECRED_SERIALIZE_FULL << 16); to.version |= (DECRED_SERIALIZE_FULL << 16);
to.is_decred = true; to.is_decred = true;
tx_init(&ti, inputs_count, outputs_count, version, lock_time, expiry, 0, coin->curve->hasher_sign, overwintered); tx_init(&ti, inputs_count, outputs_count, version, lock_time, expiry, 0, coin->curve->hasher_sign, overwintered, coin->version_group_id);
ti.version |= (DECRED_SERIALIZE_NO_WITNESS << 16); ti.version |= (DECRED_SERIALIZE_NO_WITNESS << 16);
ti.is_decred = true; ti.is_decred = true;
} }
@ -1046,7 +1046,7 @@ void signing_txack(TxAck_TransactionType *tx)
signing_abort(); signing_abort();
return; return;
} }
tx_init(&tp, tx->inputs_cnt, tx->outputs_cnt, tx->version, tx->lock_time, tx->expiry, tx->extra_data_len, coin->curve->hasher_sign, overwintered); tx_init(&tp, tx->inputs_cnt, tx->outputs_cnt, tx->version, tx->lock_time, tx->expiry, tx->extra_data_len, coin->curve->hasher_sign, overwintered, coin->version_group_id);
if (coin->decred) { if (coin->decred) {
tp.version |= (DECRED_SERIALIZE_NO_WITNESS << 16); tp.version |= (DECRED_SERIALIZE_NO_WITNESS << 16);
tp.is_decred = true; tp.is_decred = true;
@ -1129,7 +1129,7 @@ void signing_txack(TxAck_TransactionType *tx)
case STAGE_REQUEST_4_INPUT: case STAGE_REQUEST_4_INPUT:
progress = 500 + ((signatures * progress_step + idx2 * progress_meta_step) >> PROGRESS_PRECISION); progress = 500 + ((signatures * progress_step + idx2 * progress_meta_step) >> PROGRESS_PRECISION);
if (idx2 == 0) { if (idx2 == 0) {
tx_init(&ti, inputs_count, outputs_count, version, lock_time, expiry, 0, coin->curve->hasher_sign, overwintered); tx_init(&ti, inputs_count, outputs_count, version, lock_time, expiry, 0, coin->curve->hasher_sign, overwintered, coin->version_group_id);
hasher_Reset(&hasher_check); hasher_Reset(&hasher_check);
} }
// check prevouts and script type // check prevouts and script type
@ -1328,12 +1328,12 @@ void signing_txack(TxAck_TransactionType *tx)
progress = 500 + ((signatures * progress_step + idx2 * progress_meta_step) >> PROGRESS_PRECISION); progress = 500 + ((signatures * progress_step + idx2 * progress_meta_step) >> PROGRESS_PRECISION);
if (idx1 == 0) { if (idx1 == 0) {
// witness // witness
tx_init(&to, inputs_count, outputs_count, version, lock_time, expiry, 0, coin->curve->hasher_sign, overwintered); tx_init(&to, inputs_count, outputs_count, version, lock_time, expiry, 0, coin->curve->hasher_sign, overwintered, coin->version_group_id);
to.is_decred = true; to.is_decred = true;
} }
// witness hash // witness hash
tx_init(&ti, inputs_count, outputs_count, version, lock_time, expiry, 0, coin->curve->hasher_sign, overwintered); tx_init(&ti, inputs_count, outputs_count, version, lock_time, expiry, 0, coin->curve->hasher_sign, overwintered, coin->version_group_id);
ti.version |= (DECRED_SERIALIZE_WITNESS_SIGNING << 16); ti.version |= (DECRED_SERIALIZE_WITNESS_SIGNING << 16);
ti.is_decred = true; ti.is_decred = true;
if (!compile_input_script_sig(&tx->inputs[0])) { if (!compile_input_script_sig(&tx->inputs[0])) {

View File

@ -467,8 +467,7 @@ uint32_t tx_serialize_header(TxStruct *tx, uint8_t *out)
if (tx->overwintered) { if (tx->overwintered) {
uint32_t ver = tx->version | TX_OVERWINTERED; uint32_t ver = tx->version | TX_OVERWINTERED;
memcpy(out, &ver, 4); memcpy(out, &ver, 4);
uint32_t version_group_id = 0x03c48270; memcpy(out + 4, &(tx->version_group_id), 4);
memcpy(out + 4, &version_group_id, 4);
r += 4; r += 4;
} else { } else {
memcpy(out, &(tx->version), 4); memcpy(out, &(tx->version), 4);
@ -486,8 +485,7 @@ uint32_t tx_serialize_header_hash(TxStruct *tx)
if (tx->overwintered) { if (tx->overwintered) {
uint32_t ver = tx->version | TX_OVERWINTERED; uint32_t ver = tx->version | TX_OVERWINTERED;
hasher_Update(&(tx->hasher), (const uint8_t *)&ver, 4); hasher_Update(&(tx->hasher), (const uint8_t *)&ver, 4);
uint32_t version_group_id = 0x03c48270; hasher_Update(&(tx->hasher), (const uint8_t *)&(tx->version_group_id), 4);
hasher_Update(&(tx->hasher), (const uint8_t *)&version_group_id, 4);
r += 4; r += 4;
} else { } else {
hasher_Update(&(tx->hasher), (const uint8_t *)&(tx->version), 4); hasher_Update(&(tx->hasher), (const uint8_t *)&(tx->version), 4);
@ -713,7 +711,7 @@ uint32_t tx_serialize_extra_data_hash(TxStruct *tx, const uint8_t *data, uint32_
return datalen; return datalen;
} }
void tx_init(TxStruct *tx, uint32_t inputs_len, uint32_t outputs_len, uint32_t version, uint32_t lock_time, uint32_t expiry, uint32_t extra_data_len, HasherType hasher_sign, bool overwintered) void tx_init(TxStruct *tx, uint32_t inputs_len, uint32_t outputs_len, uint32_t version, uint32_t lock_time, uint32_t expiry, uint32_t extra_data_len, HasherType hasher_sign, bool overwintered, uint32_t version_group_id)
{ {
tx->inputs_len = inputs_len; tx->inputs_len = inputs_len;
tx->outputs_len = outputs_len; tx->outputs_len = outputs_len;
@ -728,6 +726,7 @@ void tx_init(TxStruct *tx, uint32_t inputs_len, uint32_t outputs_len, uint32_t v
tx->is_segwit = false; tx->is_segwit = false;
tx->is_decred = false; tx->is_decred = false;
tx->overwintered = overwintered; tx->overwintered = overwintered;
tx->version_group_id = version_group_id;
hasher_Init(&(tx->hasher), hasher_sign); hasher_Init(&(tx->hasher), hasher_sign);
} }

View File

@ -35,6 +35,7 @@ typedef struct {
uint32_t outputs_len; uint32_t outputs_len;
uint32_t version; uint32_t version;
uint32_t version_group_id;
uint32_t lock_time; uint32_t lock_time;
uint32_t expiry; uint32_t expiry;
bool is_segwit; bool is_segwit;
@ -71,7 +72,7 @@ uint32_t tx_serialize_input(TxStruct *tx, const TxAck_TransactionType_TxInputTyp
uint32_t tx_serialize_output(TxStruct *tx, const TxAck_TransactionType_TxOutputBinType *output, uint8_t *out); uint32_t tx_serialize_output(TxStruct *tx, const TxAck_TransactionType_TxOutputBinType *output, uint8_t *out);
uint32_t tx_serialize_decred_witness(TxStruct *tx, const TxAck_TransactionType_TxInputType *input, uint8_t *out); uint32_t tx_serialize_decred_witness(TxStruct *tx, const TxAck_TransactionType_TxInputType *input, uint8_t *out);
void tx_init(TxStruct *tx, uint32_t inputs_len, uint32_t outputs_len, uint32_t version, uint32_t lock_time, uint32_t expiry, uint32_t extra_data_len, HasherType hasher_sign, bool overwintered); void tx_init(TxStruct *tx, uint32_t inputs_len, uint32_t outputs_len, uint32_t version, uint32_t lock_time, uint32_t expiry, uint32_t extra_data_len, HasherType hasher_sign, bool overwintered, uint32_t version_group_id);
uint32_t tx_serialize_header_hash(TxStruct *tx); uint32_t tx_serialize_header_hash(TxStruct *tx);
uint32_t tx_serialize_input_hash(TxStruct *tx, const TxAck_TransactionType_TxInputType *input); uint32_t tx_serialize_input_hash(TxStruct *tx, const TxAck_TransactionType_TxInputType *input);
uint32_t tx_serialize_output_hash(TxStruct *tx, const TxAck_TransactionType_TxOutputBinType *output); uint32_t tx_serialize_output_hash(TxStruct *tx, const TxAck_TransactionType_TxOutputBinType *output);