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

use hdnode_private_ckd_cached where appropriate

This commit is contained in:
Pavol Rusnak 2015-01-26 20:24:07 +01:00
parent 31385f71f4
commit 5f8a4f6da1
6 changed files with 14 additions and 33 deletions

View File

@ -161,9 +161,6 @@ int cryptoMessageVerify(const uint8_t *message, size_t message_len, const uint8_
return 0; return 0;
} }
// internal from ecdsa.c
int generate_k_random(bignum256 *k);
int cryptoMessageEncrypt(curve_point *pubkey, const uint8_t *msg, size_t msg_size, bool display_only, uint8_t *nonce, size_t *nonce_len, uint8_t *payload, size_t *payload_len, uint8_t *hmac, size_t *hmac_len, const uint8_t *privkey, const uint8_t *address_raw) int cryptoMessageEncrypt(curve_point *pubkey, const uint8_t *msg, size_t msg_size, bool display_only, uint8_t *nonce, size_t *nonce_len, uint8_t *payload, size_t *payload_len, uint8_t *hmac, size_t *hmac_len, const uint8_t *privkey, const uint8_t *address_raw)
{ {
if (privkey && address_raw) { // signing == true if (privkey && address_raw) { // signing == true

View File

@ -100,19 +100,10 @@ const HDNode *fsm_getDerivedNode(uint32_t *address_n, size_t address_n_count)
if (!address_n || address_n_count == 0) { if (!address_n || address_n_count == 0) {
return &node; return &node;
} }
size_t i; if (hdnode_private_ckd_cached(&node, address_n, address_n_count) == 0) {
if (address_n_count > 3) { fsm_sendFailure(FailureType_Failure_Other, "Failed to derive private key");
layoutProgressSwipe("Preparing keys", 0); layoutHome();
} return 0;
for (i = 0; i < address_n_count; i++) {
if (hdnode_private_ckd(&node, address_n[i]) == 0) {
fsm_sendFailure(FailureType_Failure_Other, "Failed to derive private key");
layoutHome();
return 0;
}
if (address_n_count > 3) {
layoutProgress("Preparing keys", 1000 * i / address_n_count);
}
} }
return &node; return &node;
} }

View File

@ -318,13 +318,10 @@ void signing_txack(TransactionType *tx)
} }
if (idx3i == idx1i) { if (idx3i == idx1i) {
memcpy(&node, root, sizeof(HDNode)); memcpy(&node, root, sizeof(HDNode));
uint32_t k; if (hdnode_private_ckd_cached(&node, tx->inputs[0].address_n, tx->inputs[0].address_n_count) == 0) {
for (k = 0; k < tx->inputs[0].address_n_count; k++) { fsm_sendFailure(FailureType_Failure_Other, "Failed to derive private key");
if (hdnode_private_ckd(&node, tx->inputs[0].address_n[k]) == 0) { signing_abort();
fsm_sendFailure(FailureType_Failure_Other, "Failed to derive private key"); return;
signing_abort();
return;
}
} }
if (tx->inputs[0].script_type == InputScriptType_SPENDMULTISIG) { if (tx->inputs[0].script_type == InputScriptType_SPENDMULTISIG) {
if (!tx->inputs[0].has_multisig) { if (!tx->inputs[0].has_multisig) {

View File

@ -66,15 +66,11 @@ int compile_output(const CoinType *coin, const HDNode *root, TxOutputType *in, T
// address_n provided-> change address -> calculate from address_n // address_n provided-> change address -> calculate from address_n
if (in->address_n_count > 0) { if (in->address_n_count > 0) {
HDNode node; HDNode node;
uint32_t k;
memcpy(&node, root, sizeof(HDNode)); memcpy(&node, root, sizeof(HDNode));
layoutProgressUpdate(true); if (hdnode_private_ckd_cached(&node, in->address_n, in->address_n_count) == 0) {
for (k = 0; k < in->address_n_count; k++) { return 0;
if (hdnode_private_ckd(&node, in->address_n[k]) == 0) {
return 0;
}
layoutProgressUpdate(true);
} }
layoutProgressUpdate(true);
ecdsa_get_address_raw(node.public_key, coin->address_type, addr_raw); ecdsa_get_address_raw(node.public_key, coin->address_type, addr_raw);
} else } else
if (in->has_address) { // address provided -> regular output if (in->has_address) { // address provided -> regular output

View File

@ -32,8 +32,8 @@ void memory_protect(void)
return; // already set up correctly - bail out return; // already set up correctly - bail out
} }
flash_unlock_option_bytes(); flash_unlock_option_bytes();
// WRP + RDP // WRP + RDP
flash_program_option_bytes( 0xFFFC0000 + 0xCCFF); flash_program_option_bytes(0xFFFC0000 + 0xCCFF);
flash_lock_option_bytes(); flash_lock_option_bytes();
} }

@ -1 +1 @@
Subproject commit 795579cbacb5e4bd072d7cef2a2638f1d44c2d0d Subproject commit aa1833ba3fd9301dd275c1c34c1ce5dd9ae703be