ruma_common/identifiers/
crypto_algorithms.rs1use ruma_macros::StringEnum;
4
5use crate::PrivOwnedStr;
6
7#[doc = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/src/doc/string_enum.md"))]
11#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, StringEnum)]
12#[non_exhaustive]
13#[ruma_enum(rename_all = "snake_case")]
14pub enum DeviceKeyAlgorithm {
15    Ed25519,
17
18    Curve25519,
20
21    #[doc(hidden)]
22    _Custom(PrivOwnedStr),
23}
24
25#[doc = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/src/doc/string_enum.md"))]
27#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, StringEnum)]
28#[non_exhaustive]
29#[ruma_enum(rename_all = "snake_case")]
30pub enum SigningKeyAlgorithm {
31    Ed25519,
33
34    #[doc(hidden)]
35    _Custom(PrivOwnedStr),
36}
37
38#[doc = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/src/doc/string_enum.md"))]
40#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, StringEnum)]
41#[non_exhaustive]
42pub enum EventEncryptionAlgorithm {
43    #[ruma_enum(rename = "m.olm.v1.curve25519-aes-sha2")]
45    OlmV1Curve25519AesSha2,
46
47    #[ruma_enum(rename = "m.megolm.v1.aes-sha2")]
49    MegolmV1AesSha2,
50
51    #[doc(hidden)]
52    _Custom(PrivOwnedStr),
53}
54
55#[doc = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/src/doc/string_enum.md"))]
57#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, StringEnum)]
58#[non_exhaustive]
59pub enum KeyDerivationAlgorithm {
60    #[ruma_enum(rename = "m.pbkdf2")]
62    Pbkfd2,
63
64    #[doc(hidden)]
65    _Custom(PrivOwnedStr),
66}
67
68#[doc = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/src/doc/string_enum.md"))]
72#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, StringEnum)]
73#[non_exhaustive]
74#[ruma_enum(rename_all = "snake_case")]
75pub enum OneTimeKeyAlgorithm {
76    SignedCurve25519,
78
79    #[doc(hidden)]
80    _Custom(PrivOwnedStr),
81}
82
83#[cfg(test)]
84mod tests {
85    use super::{DeviceKeyAlgorithm, OneTimeKeyAlgorithm, SigningKeyAlgorithm};
86
87    #[test]
88    fn parse_device_key_algorithm() {
89        assert_eq!(DeviceKeyAlgorithm::from("ed25519"), DeviceKeyAlgorithm::Ed25519);
90        assert_eq!(DeviceKeyAlgorithm::from("curve25519"), DeviceKeyAlgorithm::Curve25519);
91    }
92
93    #[test]
94    fn parse_signing_key_algorithm() {
95        assert_eq!(SigningKeyAlgorithm::from("ed25519"), SigningKeyAlgorithm::Ed25519);
96    }
97
98    #[test]
99    fn event_encryption_algorithm_serde() {
100        use serde_json::json;
101
102        use super::EventEncryptionAlgorithm;
103        use crate::serde::test::serde_json_eq;
104
105        serde_json_eq(EventEncryptionAlgorithm::MegolmV1AesSha2, json!("m.megolm.v1.aes-sha2"));
106        serde_json_eq(
107            EventEncryptionAlgorithm::OlmV1Curve25519AesSha2,
108            json!("m.olm.v1.curve25519-aes-sha2"),
109        );
110        serde_json_eq(EventEncryptionAlgorithm::from("io.ruma.test"), json!("io.ruma.test"));
111    }
112
113    #[test]
114    fn key_derivation_algorithm_serde() {
115        use serde_json::json;
116
117        use super::KeyDerivationAlgorithm;
118        use crate::serde::test::serde_json_eq;
119
120        serde_json_eq(KeyDerivationAlgorithm::Pbkfd2, json!("m.pbkdf2"));
121    }
122
123    #[test]
124    fn parse_one_time_key_algorithm() {
125        assert_eq!(
126            OneTimeKeyAlgorithm::from("signed_curve25519"),
127            OneTimeKeyAlgorithm::SignedCurve25519
128        );
129    }
130}