everscale_crypto/
lib.rs

1extern crate core;
2
3pub mod ed25519;
4
5#[cfg(feature = "tl-proto")]
6pub mod tl {
7    /// Public key which is used in protocol
8    #[derive(Debug, Copy, Clone, Eq, PartialEq, tl_proto::TlRead, tl_proto::TlWrite)]
9    #[tl(boxed)]
10    pub enum PublicKey<'tl> {
11        #[tl(id = 0x4813b4c6, size_hint = 32)]
12        Ed25519 { key: &'tl [u8; 32] },
13        #[tl(id = 0x34ba45cb)]
14        Overlay { name: &'tl [u8] },
15        #[tl(id = 0x2dbcadd4, size_hint = 32)]
16        Aes { key: &'tl [u8; 32] },
17        #[tl(id = 0xb61f450a)]
18        Unencoded { data: &'tl [u8] },
19    }
20
21    impl PublicKey<'_> {
22        pub fn as_equivalent_owned(&self) -> PublicKeyOwned {
23            match self {
24                &Self::Ed25519 { key } => PublicKeyOwned::Ed25519 { key: *key },
25                Self::Overlay { name } => PublicKeyOwned::Overlay {
26                    name: name.to_vec(),
27                },
28                &Self::Aes { key } => PublicKeyOwned::Aes { key: *key },
29                Self::Unencoded { data } => PublicKeyOwned::Unencoded {
30                    data: data.to_vec(),
31                },
32            }
33        }
34    }
35
36    /// Public key which is used in protocol. Owned version
37    #[derive(Debug, Clone, Eq, PartialEq, tl_proto::TlRead, tl_proto::TlWrite)]
38    #[tl(boxed)]
39    pub enum PublicKeyOwned {
40        #[tl(id = 0x4813b4c6, size_hint = 32)]
41        Ed25519 { key: [u8; 32] },
42        #[tl(id = 0x34ba45cb)]
43        Overlay { name: Vec<u8> },
44        #[tl(id = 0x2dbcadd4, size_hint = 32)]
45        Aes { key: [u8; 32] },
46        #[tl(id = 0xb61f450a)]
47        Unencoded { data: Vec<u8> },
48    }
49
50    impl PublicKeyOwned {
51        pub fn as_equivalent_ref(&self) -> PublicKey<'_> {
52            match self {
53                Self::Ed25519 { key } => PublicKey::Ed25519 { key },
54                Self::Overlay { name } => PublicKey::Overlay {
55                    name: name.as_slice(),
56                },
57                Self::Aes { key } => PublicKey::Aes { key },
58                Self::Unencoded { data } => PublicKey::Unencoded {
59                    data: data.as_slice(),
60                },
61            }
62        }
63    }
64}