miden_objects/account/
auth.rs

1// AUTH SECRET KEY
2// ================================================================================================
3
4use miden_crypto::dsa::rpo_falcon512::{self, SecretKey};
5
6use crate::utils::serde::{
7    ByteReader,
8    ByteWriter,
9    Deserializable,
10    DeserializationError,
11    Serializable,
12};
13
14/// Types of secret keys used for signing messages
15#[derive(Clone, Debug)]
16#[repr(u8)]
17pub enum AuthSecretKey {
18    RpoFalcon512(rpo_falcon512::SecretKey) = 0,
19}
20
21impl AuthSecretKey {
22    /// Identifier for the type of authentication key
23    pub fn auth_scheme_id(&self) -> u8 {
24        match self {
25            AuthSecretKey::RpoFalcon512(_) => 0u8,
26        }
27    }
28}
29
30impl Serializable for AuthSecretKey {
31    fn write_into<W: ByteWriter>(&self, target: &mut W) {
32        target.write_u8(self.auth_scheme_id());
33        match self {
34            AuthSecretKey::RpoFalcon512(secret_key) => {
35                secret_key.write_into(target);
36            },
37        }
38    }
39}
40
41impl Deserializable for AuthSecretKey {
42    fn read_from<R: ByteReader>(source: &mut R) -> Result<Self, DeserializationError> {
43        let auth_key_id: u8 = source.read_u8()?;
44        match auth_key_id {
45            // RpoFalcon512
46            0u8 => {
47                let secret_key = SecretKey::read_from(source)?;
48                Ok(AuthSecretKey::RpoFalcon512(secret_key))
49            },
50            val => Err(DeserializationError::InvalidValue(format!("Invalid auth scheme ID {val}"))),
51        }
52    }
53}