miden_objects/account/
auth.rs

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