reach_visual_key_identity/
lib.rs

1// SPDX-FileCopyrightText: 2023-2025 eaon <eaon@posteo.net>
2// SPDX-License-Identifier: EUPL-1.2
3
4use argon2::*;
5
6use reach_signatures::Digestible;
7
8mod v0 {
9    include!(concat!(env!("OUT_DIR"), "/visual_key_identity_v0.rs"));
10}
11
12pub fn visual_key_identity<D>(digestible: &D, salt: &[u8]) -> Result<String>
13where
14    D: Digestible,
15{
16    let mut identity = [0u8; 16];
17    let params = Params::new(8, 2, 1, Some(16))?;
18    Argon2::new(Algorithm::Argon2id, Version::V0x13, params).hash_password_into(
19        digestible.finalized_digest().as_slice(),
20        salt,
21        &mut identity,
22    )?;
23
24    Ok(identity
25        .iter()
26        .map(|c| v0::EMOJIS_V0[*c as usize])
27        .collect::<Vec<_>>()
28        .join(" "))
29}