Skip to content

Commit

Permalink
more hearbeats
Browse files Browse the repository at this point in the history
  • Loading branch information
ftheirs committed Mar 18, 2024
1 parent 907e1cd commit e9da4a1
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 56 deletions.
20 changes: 13 additions & 7 deletions app/rust/src/zip32.rs
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,8 @@ pub fn ff1aes_list_with_startingindex_default(
let mut ff1 = BinaryFF1::new(&cipher, 11, &[], &mut scratch).unwrap();
let mut d: [u8; 11];

crate::heart_beat();

let size = 4;

for c in 0..size {
Expand Down Expand Up @@ -522,9 +524,12 @@ pub fn derive_zip32_child_fromseedandpath(seed: &[u8; 32], path: &[u32], child_c
let mut ask = Fr::from_bytes_wide(&prf_expand(tmp[..32].try_into().unwrap(), &[0x00]));

let mut nsk = Fr::from_bytes_wide(&prf_expand(tmp[..32].try_into().unwrap(), &[0x01]));
crate::heart_beat();

let mut expkey: [u8; 96];
expkey = expandedspendingkey_zip32(&tmp[..32].try_into().unwrap()); //96
crate::heart_beat();

//master divkey
let mut divkey = [0u8; 32];
divkey.copy_from_slice(&diversifier_key_zip32(&tmp[..32].try_into().unwrap())); //32
Expand All @@ -548,6 +553,7 @@ pub fn derive_zip32_child_fromseedandpath(seed: &[u8; 32], path: &[u32], child_c
tmp = bolos::blake2b_expand_vec_four(&tmp[32..], &[0x12], &fvk, &divkey, &le_i);
}

crate::heart_beat();
let ask_cur = Fr::from_bytes_wide(&prf_expand(&tmp[..32], &[0x13]));
let nsk_cur = Fr::from_bytes_wide(&prf_expand(&tmp[..32], &[0x14]));

Expand All @@ -562,7 +568,7 @@ pub fn derive_zip32_child_fromseedandpath(seed: &[u8; 32], path: &[u32], child_c
// Get ak from ask
let mut ak = [0u8; 32];
bolos::sdk_jubjub_scalarmult_spending_base(&mut ak, &ask.to_bytes());

crate::heart_beat();

// Get nk from nsk = k[64..96]
let nk_tmp = PROVING_KEY_BASE.multiply_bits(&nsk.to_bytes());
Expand Down Expand Up @@ -680,17 +686,16 @@ pub extern "C" fn get_default_diversifier_without_start_index(
while !found {
ff1aes_list_with_startingindex_default(&dk[0..32].try_into().unwrap(),
&mut start, &mut div_list);
for i in 0..DIV_DEFAULT_LIST_LEN
{
for i in 0..DIV_DEFAULT_LIST_LEN {
if !found && is_valid_diversifier(
&div_list[i*DIV_SIZE..(i+1)*DIV_SIZE].try_into().unwrap())
{
&div_list[i*DIV_SIZE..(i+1)*DIV_SIZE].try_into().unwrap()) {
found = true;
div.copy_from_slice(&div_list[i*DIV_SIZE..(i+1)*DIV_SIZE]);
}
}
}
crate::heart_beat();
}
}

#[no_mangle]
pub extern "C" fn zip32_master(
Expand Down Expand Up @@ -846,7 +851,7 @@ pub extern "C" fn get_pkd_from_seed(
let div = unsafe {&mut *diversifier_ptr};

let mut div_list = [0u8;DIV_SIZE*DIV_DEFAULT_LIST_LEN];

crate::heart_beat();
let dk_ak_nk = derive_zip32_child_fromseedandpath(&seed,
&[FIRSTVALUE,
COIN_TYPE, pos],
Expand All @@ -866,6 +871,7 @@ pub extern "C" fn get_pkd_from_seed(
div.copy_from_slice(&div_list[i*DIV_SIZE..(i+1)*DIV_SIZE]);
}
}
crate::heart_beat();
}
let ivk = aknk_to_ivk(&dk_ak_nk[32..64].try_into().unwrap(),
&dk_ak_nk[64..96].try_into().unwrap());
Expand Down
98 changes: 49 additions & 49 deletions app/src/crypto.c
Original file line number Diff line number Diff line change
Expand Up @@ -188,28 +188,28 @@ zxerr_t crypto_fillAddress_secp256k1(uint8_t *buffer, uint16_t buffer_len,
}

zxerr_t crypto_fillSaplingSeed(uint8_t *sk) {
zemu_log_stack("crypto_fillSaplingSeed");
zemu_log_stack("crypto_fillSaplingSeed");

// Generate randomness using a fixed path related to the device mnemonic
const uint32_t path[HDPATH_LEN_DEFAULT] = {
0x8000002c, 0x80000085, MASK_HARDENED, MASK_HARDENED, MASK_HARDENED,
};
MEMZERO(sk, ED25519_SK_SIZE);
// Generate randomness using a fixed path related to the device mnemonic
const uint32_t path[HDPATH_LEN_DEFAULT] = {
0x8000002c, 0x80000085, MASK_HARDENED, MASK_HARDENED, MASK_HARDENED,
};
MEMZERO(sk, ED25519_SK_SIZE);

zxerr_t error = zxerr_unknown;
zxerr_t error = zxerr_unknown;
io_seproxyhal_io_heartbeat();
CATCH_CXERROR(os_derive_bip32_with_seed_no_throw(HDW_NORMAL, CX_CURVE_Ed25519,
path, HDPATH_LEN_DEFAULT, sk,
NULL, NULL, 0));
CATCH_CXERROR(os_derive_bip32_with_seed_no_throw(HDW_NORMAL, CX_CURVE_Ed25519,
path, HDPATH_LEN_DEFAULT, sk,
NULL, NULL, 0));
io_seproxyhal_io_heartbeat();
error = zxerr_ok;
error = zxerr_ok;

catch_cx_error:
if (error != zxerr_ok) {
MEMZERO(sk, 64);
}
catch_cx_error:
if (error != zxerr_ok) {
MEMZERO(sk, 64);
}

return error;
return error;
}

// handleInitTX step 1/2
Expand Down Expand Up @@ -1588,43 +1588,43 @@ zxerr_t crypto_fillAddress_with_diversifier_sapling(uint8_t *buffer,
// handleGetAddrSapling
zxerr_t crypto_fillAddress_sapling(uint8_t *buffer, uint16_t bufferLen,
uint32_t p, uint16_t *replyLen) {
if (bufferLen < sizeof(tmp_buf_addr_s)) {
return zxerr_unknown;
}
if (bufferLen < sizeof(tmp_buf_addr_s)) {
return zxerr_unknown;
}

zemu_log_stack("crypto_fillAddress_sapling");
tmp_buf_addr_s *const out = (tmp_buf_addr_s *)buffer;
MEMZERO(buffer, bufferLen);
zemu_log_stack("crypto_fillAddress_sapling");
tmp_buf_addr_s *const out = (tmp_buf_addr_s *)buffer;
MEMZERO(buffer, bufferLen);

// the path in zip32 is [FIRST_VALUE, COIN_TYPE, p] where p is u32 and last
// part of hdPath
uint8_t zip32_seed[ZIP32_SEED_SIZE] = {0};
// the path in zip32 is [FIRST_VALUE, COIN_TYPE, p] where p is u32 and last
// part of hdPath
uint8_t zip32_seed[ZIP32_SEED_SIZE] = {0};

// Temporarily get sk from Ed25519
if (crypto_fillSaplingSeed(zip32_seed) != zxerr_ok) {
MEMZERO(zip32_seed, sizeof(zip32_seed));
*replyLen = 0;
return zxerr_unknown;
}
CHECK_APP_CANARY()
// Temporarily get sk from Ed25519
if (crypto_fillSaplingSeed(zip32_seed) != zxerr_ok) {
MEMZERO(zip32_seed, sizeof(zip32_seed));
*replyLen = 0;
return zxerr_unknown;
}
CHECK_APP_CANARY()

get_pkd_from_seed(zip32_seed, p, out->startindex, out->diversifier, out->pkd);
MEMZERO(out + DIV_SIZE, MAX_SIZE_BUF_ADDR - DIV_SIZE);
CHECK_APP_CANARY()
get_pkd_from_seed(zip32_seed, p, out->startindex, out->diversifier, out->pkd);
MEMZERO(out + DIV_SIZE, MAX_SIZE_BUF_ADDR - DIV_SIZE);
CHECK_APP_CANARY()

MEMZERO(zip32_seed, sizeof(zip32_seed));
if (bech32EncodeFromBytes(out->address_bech32,
sizeof_field(tmp_buf_addr_s, address_bech32),
BECH32_HRP, out->address_raw,
sizeof_field(tmp_buf_addr_s, address_raw), 1,
BECH32_ENCODING_BECH32) != zxerr_ok) {
MEMZERO(out, bufferLen);
*replyLen = 0;
return zxerr_unknown;
}
CHECK_APP_CANARY()
MEMZERO(zip32_seed, sizeof(zip32_seed));
if (bech32EncodeFromBytes(out->address_bech32,
sizeof_field(tmp_buf_addr_s, address_bech32),
BECH32_HRP, out->address_raw,
sizeof_field(tmp_buf_addr_s, address_raw), 1,
BECH32_ENCODING_BECH32) != zxerr_ok) {
MEMZERO(out, bufferLen);
*replyLen = 0;
return zxerr_unknown;
}
CHECK_APP_CANARY()

*replyLen = sizeof_field(tmp_buf_addr_s, address_raw) +
strlen((const char *)out->address_bech32);
return zxerr_ok;
*replyLen = sizeof_field(tmp_buf_addr_s, address_raw) +
strlen((const char *)out->address_bech32);
return zxerr_ok;
}

0 comments on commit e9da4a1

Please sign in to comment.