signatory/ed25519/
keyring.rs1use super::{SigningKey, VerifyingKey};
4use crate::{Error, KeyHandle, LoadPkcs8, Map, Result};
5
6#[derive(Debug, Default)]
8pub struct KeyRing {
9 keys: Map<VerifyingKey, SigningKey>,
10}
11
12impl KeyRing {
13 pub fn new() -> Self {
15 Self::default()
16 }
17
18 pub fn get(&self, verifying_key: &VerifyingKey) -> Option<&SigningKey> {
21 self.keys.get(verifying_key)
22 }
23
24 pub fn iter(&self) -> impl Iterator<Item = &SigningKey> {
26 self.keys.values()
27 }
28}
29
30impl LoadPkcs8 for KeyRing {
31 fn load_pkcs8(&mut self, private_key: pkcs8::PrivateKeyInfo<'_>) -> Result<KeyHandle> {
32 let signing_key = SigningKey::try_from(private_key)?;
33 let verifying_key = signing_key.verifying_key();
34
35 if self.keys.contains_key(&verifying_key) {
36 return Err(Error::DuplicateKey);
37 }
38
39 self.keys.insert(verifying_key, signing_key);
40 Ok(KeyHandle::Ed25519(verifying_key))
41 }
42}