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