1use crate::varint::encode_varint;
2
3#[derive(Debug, Eq, PartialEq, Hash, Clone, Copy)]
4pub enum KeyAlgo {
5 Ed25519,
6}
7
8impl KeyAlgo {
9 pub fn verifying_key_len(&self) -> usize {
10 match self {
11 Self::Ed25519 => Ed25519::VERIFYING_KEY_LEN,
12 }
13 }
14
15 pub fn signing_key_len(&self) -> usize {
16 match self {
17 Self::Ed25519 => Ed25519::SIGNING_KEY_LEN,
18 }
19 }
20}
21
22pub(crate) trait StaticSigningAlgo {
26 const VERIFYING_KEY_LEN: usize;
28 const SIGNING_KEY_LEN: usize;
30 const MULTICODEC_VALUE: u16;
31 const MULTICODEC_VALUE_ENCODED: &'static [u8] =
32 encode_varint(Self::MULTICODEC_VALUE).as_slice();
33}
34
35#[derive(Debug, Eq, PartialEq, Hash, Clone, Copy)]
36pub(crate) struct Ed25519;
37
38impl StaticSigningAlgo for Ed25519 {
39 const VERIFYING_KEY_LEN: usize = 32;
40 const SIGNING_KEY_LEN: usize = 32;
41 const MULTICODEC_VALUE: u16 = 0xED;
42}
43
44impl PartialEq<Ed25519> for KeyAlgo {
45 fn eq(&self, _other: &Ed25519) -> bool {
46 *self == KeyAlgo::Ed25519
47 }
48}