seedelf_cli/
convert.rs

1use blstrs::Scalar;
2use cryptoxide::ed25519;
3use pallas_crypto::key::ed25519::SecretKey;
4use pallas_primitives::Hash;
5use pallas_wallet::PrivateKey;
6
7pub fn scalar_to_secret_key(scalar: Scalar) -> SecretKey {
8    let scalar_bytes: [u8; 32] = scalar.to_bytes_be();
9    let (_, public) = ed25519::keypair(&scalar_bytes);
10    SecretKey::from(public)
11}
12
13pub fn secret_key_to_private_key(scalar: Scalar) -> PrivateKey {
14    let secret_key: SecretKey = scalar_to_secret_key(scalar);
15    PrivateKey::from(secret_key)
16}
17
18pub fn secret_key_to_public_key(scalar: Scalar) -> String {
19    let one_time_private_key: PrivateKey = secret_key_to_private_key(scalar);
20    let public_key_hash: Hash<28> =
21        pallas_crypto::hash::Hasher::<224>::hash(one_time_private_key.public_key().as_ref());
22    hex::encode(public_key_hash)
23}