1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
extern crate bs58;
extern crate tiny_keccak;
use tiny_keccak::Keccak;
const ITERATIONS: usize = 16_384;
pub fn password(master_password: &str, email: &str, service: &str) -> String {
let mut sha3_result = [0u8; 32];
let mut sha3 = Keccak::new_sha3_256();
sha3.update(master_password.as_bytes());
sha3.update(email.as_bytes());
sha3.update(service.as_bytes());
sha3.finalize(&mut sha3_result);
for _ in 0..ITERATIONS {
let mut sha3 = Keccak::new_sha3_256();
sha3.update(&sha3_result);
sha3.finalize(&mut sha3_result);
}
bs58::encode(sha3_result).into_string()
}