1extern crate core;
2
3pub mod ed25519;
4
5#[cfg(feature = "tl-proto")]
6pub mod tl {
7 #[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 #[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}