signstar_yubihsm2/object/
capability.rs1use std::{collections::HashSet, hash::Hash};
4
5use serde::{Deserialize, Serialize};
6
7#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
9#[serde(rename_all = "kebab-case")]
10pub enum Capability {
11 Sign,
13
14 Exportable,
16
17 Export,
22
23 Import,
28}
29
30impl From<Capability> for yubihsm::Capability {
31 fn from(value: Capability) -> Self {
32 match value {
33 Capability::Sign => yubihsm::Capability::SIGN_EDDSA,
34 Capability::Exportable => yubihsm::Capability::EXPORTABLE_UNDER_WRAP,
35 Capability::Export => yubihsm::Capability::EXPORT_WRAPPED,
36 Capability::Import => yubihsm::Capability::IMPORT_WRAPPED,
37 }
38 }
39}
40
41#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
43pub struct Capabilities(HashSet<Capability>);
44
45impl From<&Capabilities> for yubihsm::Capability {
46 fn from(value: &Capabilities) -> Self {
47 value
48 .0
49 .iter()
50 .map(|cap| yubihsm::Capability::from(*cap))
51 .fold(yubihsm::Capability::empty(), |acc, c| acc | c)
52 }
53}