Add scan key encryption
This commit is contained in:
parent
e7d2ace04a
commit
58de1c14ba
@ -72,11 +72,6 @@ pub fn setup() {
|
|||||||
wasm_logger::init(wasm_logger::Config::default());
|
wasm_logger::init(wasm_logger::Config::default());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[wasm_bindgen]
|
|
||||||
pub fn test_fn() {
|
|
||||||
log::info!("test");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Should be transfered to annother module
|
// Should be transfered to annother module
|
||||||
pub struct GenerateSPWallet {
|
pub struct GenerateSPWallet {
|
||||||
pub sp_client: SpClient,
|
pub sp_client: SpClient,
|
||||||
@ -135,7 +130,6 @@ pub fn create_user(
|
|||||||
birthday: u32,
|
birthday: u32,
|
||||||
) -> ApiResult<GenerateCreateUserReturn> {
|
) -> ApiResult<GenerateCreateUserReturn> {
|
||||||
let mut output_list: Vec<OutputList> = Vec::new();
|
let mut output_list: Vec<OutputList> = Vec::new();
|
||||||
log::info!("Ok0");
|
|
||||||
//recover
|
//recover
|
||||||
let sp_wallet_recover = generate_sp_wallet(label.clone(), birthday, true)?;
|
let sp_wallet_recover = generate_sp_wallet(label.clone(), birthday, true)?;
|
||||||
output_list.push(sp_wallet_recover.sp_outputs);
|
output_list.push(sp_wallet_recover.sp_outputs);
|
||||||
@ -149,7 +143,6 @@ pub fn create_user(
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
let recover_keys = UserKeys::add_keys_recover(recover_scan_key, recover_spend_key);
|
let recover_keys = UserKeys::add_keys_recover(recover_scan_key, recover_spend_key);
|
||||||
log::info!("Ok1");
|
|
||||||
//revoke
|
//revoke
|
||||||
let sp_wallet_revoke = generate_sp_wallet(label.clone(), birthday, true)?;
|
let sp_wallet_revoke = generate_sp_wallet(label.clone(), birthday, true)?;
|
||||||
output_list.push(sp_wallet_revoke.sp_outputs);
|
output_list.push(sp_wallet_revoke.sp_outputs);
|
||||||
@ -178,7 +171,6 @@ pub fn create_user(
|
|||||||
let main_keys = UserKeys::add_keys_main(main_scan_key, main_spend_key);
|
let main_keys = UserKeys::add_keys_main(main_scan_key, main_spend_key);
|
||||||
|
|
||||||
let user_keys = UserKeys::new(recover_keys, revoke_keys, main_keys);
|
let user_keys = UserKeys::new(recover_keys, revoke_keys, main_keys);
|
||||||
log::info!("Ok2");
|
|
||||||
|
|
||||||
let user = User::new(user_keys, password)?;
|
let user = User::new(user_keys, password)?;
|
||||||
|
|
||||||
@ -186,8 +178,6 @@ pub fn create_user(
|
|||||||
user,
|
user,
|
||||||
output_list_vec: output_list,
|
output_list_vec: output_list,
|
||||||
};
|
};
|
||||||
log::info!("Ok3");
|
|
||||||
|
|
||||||
|
|
||||||
Ok(generate_user)
|
Ok(generate_user)
|
||||||
}
|
}
|
||||||
|
@ -98,10 +98,11 @@ impl UserKeys {
|
|||||||
#[tsify(into_wasm_abi, from_wasm_abi)]
|
#[tsify(into_wasm_abi, from_wasm_abi)]
|
||||||
pub struct User {
|
pub struct User {
|
||||||
recover_data: Vec<u8>,
|
recover_data: Vec<u8>,
|
||||||
revoke_data: Vec<u8>,
|
revoke_data: Option<Vec<u8>>,
|
||||||
sharding: Sharding,
|
sharding: Sharding,
|
||||||
pre_id: String,
|
pre_id: String,
|
||||||
recovered_spend_key: Option<String>,
|
recovered_spend_key: Option<String>,
|
||||||
|
recovered_scan_key: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl User {
|
impl User {
|
||||||
@ -119,14 +120,17 @@ impl User {
|
|||||||
revoke_data.extend_from_slice(revoke_scan_key.as_ref());
|
revoke_data.extend_from_slice(revoke_scan_key.as_ref());
|
||||||
revoke_data.extend_from_slice(revoke_spend_key.as_ref());
|
revoke_data.extend_from_slice(revoke_spend_key.as_ref());
|
||||||
|
|
||||||
// split recover spend key
|
// Take the 2 recover keys
|
||||||
|
let recover_scan_key = user_keys.get_keys(user_keys.recover_keys.clone()).scan_key;
|
||||||
let recover_spend_key = user_keys.get_keys(user_keys.recover_keys.clone()).spend_key;
|
let recover_spend_key = user_keys.get_keys(user_keys.recover_keys.clone()).spend_key;
|
||||||
|
// split recover spend key
|
||||||
let (part1_key, part2_key) = recover_spend_key.as_ref().split_at(SECRET_KEY_SIZE / 2);
|
let (part1_key, part2_key) = recover_spend_key.as_ref().split_at(SECRET_KEY_SIZE / 2);
|
||||||
let mut recover_data = Vec::<u8>::with_capacity(64); // 32 * 2
|
let mut recover_data = Vec::<u8>::with_capacity(180); // 32 * 3 + (12+16)*3
|
||||||
|
|
||||||
// generate 2 tokens of 32B entropy
|
// generate 3 tokens of 32B entropy
|
||||||
let mut entropy_1: [u8; 32] = Aes256Gcm::generate_key(&mut rng).into();
|
let mut entropy_1: [u8; 32] = Aes256Gcm::generate_key(&mut rng).into();
|
||||||
let mut entropy_2: [u8; 32] = Aes256Gcm::generate_key(&mut rng).into();
|
let mut entropy_2: [u8; 32] = Aes256Gcm::generate_key(&mut rng).into();
|
||||||
|
let mut entropy_3: [u8; 32] = Aes256Gcm::generate_key(&mut rng).into();
|
||||||
|
|
||||||
recover_data.extend_from_slice(&entropy_1);
|
recover_data.extend_from_slice(&entropy_1);
|
||||||
recover_data.extend_from_slice(&entropy_2);
|
recover_data.extend_from_slice(&entropy_2);
|
||||||
@ -176,6 +180,24 @@ impl User {
|
|||||||
engine.write_all(&cipher_recover_part1);
|
engine.write_all(&cipher_recover_part1);
|
||||||
let pre_id = sha256::Hash::from_engine(engine);
|
let pre_id = sha256::Hash::from_engine(engine);
|
||||||
|
|
||||||
|
//scan key:
|
||||||
|
let mut engine = sha256::HashEngine::default();
|
||||||
|
engine.write_all(&user_password.as_bytes());
|
||||||
|
engine.write_all(&entropy_3);
|
||||||
|
let hash3 = sha256::Hash::from_engine(engine);
|
||||||
|
|
||||||
|
let scan_key_encryption = Aes256Encryption::import_key(
|
||||||
|
Purpose::Login,
|
||||||
|
recover_scan_key.secret_bytes().to_vec(),
|
||||||
|
hash3.to_byte_array(),
|
||||||
|
Aes256Gcm::generate_nonce(&mut rng).into(),
|
||||||
|
)?;
|
||||||
|
|
||||||
|
// encrypt the scan key
|
||||||
|
let cipher_scan_key = scan_key_encryption.encrypt_with_aes_key()?;
|
||||||
|
|
||||||
|
recover_data.extend_from_slice(&cipher_scan_key);
|
||||||
|
|
||||||
//Create PRDList
|
//Create PRDList
|
||||||
//@todo
|
//@todo
|
||||||
//Send messages PRDList
|
//Send messages PRDList
|
||||||
@ -184,10 +206,11 @@ impl User {
|
|||||||
|
|
||||||
Ok(User {
|
Ok(User {
|
||||||
recover_data,
|
recover_data,
|
||||||
revoke_data,
|
revoke_data: Some(revoke_data),
|
||||||
sharding,
|
sharding,
|
||||||
pre_id: pre_id.to_string(),
|
pre_id: pre_id.to_string(),
|
||||||
recovered_spend_key: None,
|
recovered_spend_key: None,
|
||||||
|
recovered_scan_key: None,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user