crypto_ext/passphrase/
mod.rs

1use std::time::{SystemTime, UNIX_EPOCH};
2use sha256::digest;
3
4#[cfg(test)]
5mod tests;
6
7/// Generates 256-bit long passphrase
8///
9/// # Examples
10///
11/// ```
12///
13///     use crypto_ext::passphrase::generate_passphrase;
14///
15///     #[test]
16///     fn passphrase() {
17///         let passphrase = generate_passphrase().unwrap();
18///         assert_eq!(passphrase.len(), 64);
19///     }
20///
21/// ```
22pub fn generate_passphrase() -> Result<String, String> {
23    let now = SystemTime::now();
24    let boxed_time_in_nanos = now.duration_since(UNIX_EPOCH);
25    if boxed_time_in_nanos.is_err() {
26        let message = format!("unable to get system time: {}", boxed_time_in_nanos.err().unwrap());
27        return Err(message)
28    }
29    let time_in_nanos = boxed_time_in_nanos.unwrap().as_nanos();
30    let hex_time_in_millis = format!("{time_in_nanos:X}");
31    let sha_timestamp = digest(hex_time_in_millis);
32    Ok(sha_timestamp)
33}