did_simple/
key_algos.rs

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
22// ---- internal code ----
23
24/// A signing algorithm that is known statically, at compile time.
25pub(crate) trait StaticSigningAlgo {
26	/// The length of the public verifying key.
27	const VERIFYING_KEY_LEN: usize;
28	/// The length of the private signing key.
29	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}