1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#[cfg(feature = "ecdsa")]
#[allow(unused_imports)]
use crate::ecdsa;
#[cfg(feature = "ed25519")]
use crate::ed25519;
#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)]
#[non_exhaustive]
pub enum KeyHandle {
#[cfg(feature = "nistp256")]
#[cfg_attr(docsrs, doc(cfg(feature = "nistp256")))]
EcdsaNistP256(ecdsa::nistp256::VerifyingKey),
#[cfg(feature = "secp256k1")]
#[cfg_attr(docsrs, doc(cfg(feature = "secp256k1")))]
EcdsaSecp256k1(ecdsa::secp256k1::VerifyingKey),
#[cfg(feature = "ed25519")]
#[cfg_attr(docsrs, doc(cfg(feature = "ed25519")))]
Ed25519(ed25519::VerifyingKey),
}
impl KeyHandle {
#[cfg(feature = "nistp256")]
#[cfg_attr(docsrs, doc(cfg(feature = "nistp256")))]
pub fn ecdsa_nistp256(&self) -> Option<ecdsa::nistp256::VerifyingKey> {
match self {
KeyHandle::EcdsaNistP256(pk) => Some(*pk),
#[allow(unreachable_patterns)]
_ => None,
}
}
#[cfg(feature = "secp256k1")]
#[cfg_attr(docsrs, doc(cfg(feature = "secp256k1")))]
pub fn ecdsa_secp256k1(&self) -> Option<ecdsa::secp256k1::VerifyingKey> {
match self {
KeyHandle::EcdsaSecp256k1(pk) => Some(*pk),
#[allow(unreachable_patterns)]
_ => None,
}
}
#[cfg(feature = "ed25519")]
#[cfg_attr(docsrs, doc(cfg(feature = "ed25519")))]
pub fn ed25519(&self) -> Option<ed25519::VerifyingKey> {
match self {
KeyHandle::Ed25519(pk) => Some(*pk),
#[allow(unreachable_patterns)]
_ => None,
}
}
}