Generalize AsymetricKeyReference

This commit is contained in:
Sosthène Guédon
2022-12-16 11:34:45 +01:00
parent cbf42d2663
commit 6f5a82acf9
4 changed files with 81 additions and 8 deletions
+3 -3
View File
@@ -17,7 +17,7 @@ use crate::state::TouchPolicy;
pub use crate::{
container::{
self as containers, AsymmetricKeyReference, AttestKeyReference, AuthenticateKeyReference,
ChangeReferenceKeyReference, VerifyKeyReference,
ChangeReferenceKeyReference, GenerateKeyReference, VerifyKeyReference,
},
piv_types, Pin, Puk,
};
@@ -60,7 +60,7 @@ pub enum Command<'l> {
GeneralAuthenticate(GeneralAuthenticate),
/// Store a data object / container.
PutData(PutData<'l>),
GenerateAsymmetric(AsymmetricKeyReference),
GenerateAsymmetric(GenerateKeyReference),
/* Yubico commands */
YkExtension(YubicoPivExtension),
@@ -364,7 +364,7 @@ impl<'l, const C: usize> TryFrom<&'l iso7816::Command<C>> for Command<'l> {
}
(0x00, Instruction::GenerateAsymmetricKeyPair, 0x00, p2) => {
Self::GenerateAsymmetric(AsymmetricKeyReference::try_from(p2)?)
Self::GenerateAsymmetric(GenerateKeyReference::try_from(p2)?)
}
// (0x00, 0x01, 0x10, 0x00)
(0x00, Instruction::Unknown(0x01), 0x00, 0x00) => {
+32
View File
@@ -162,6 +162,38 @@ enum_subset! {
DigitalSignature,
KeyManagement,
CardAuthentication,
Retired01,
Retired02,
Retired03,
Retired04,
Retired05,
Retired06,
Retired07,
Retired08,
Retired09,
Retired10,
Retired11,
Retired12,
Retired13,
Retired14,
Retired15,
Retired16,
Retired17,
Retired18,
Retired19,
Retired20,
}
}
enum_subset! {
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum GenerateKeyReference: AsymmetricKeyReference {
// SecureMessaging,
PivAuthentication,
DigitalSignature,
KeyManagement,
CardAuthentication,
}
}
+6 -5
View File
@@ -11,13 +11,14 @@ extern crate log;
delog::generate_macros!();
pub mod commands;
use commands::containers::KeyReference;
use commands::piv_types::Algorithms;
use commands::{AsymmetricKeyReference, GeneralAuthenticate, PutData};
pub use commands::{Command, YubicoPivExtension};
use commands::{GeneralAuthenticate, PutData};
pub mod constants;
pub mod container;
use container::{AttestKeyReference, AuthenticateKeyReference, Container};
use container::{
AttestKeyReference, AuthenticateKeyReference, Container, GenerateKeyReference, KeyReference,
};
pub mod derp;
#[cfg(feature = "apdu-dispatch")]
mod dispatch;
@@ -800,7 +801,7 @@ impl<'a, T: trussed::Client + trussed::client::Ed255> LoadedAuthenticator<'a, T>
pub fn generate_asymmetric_keypair<const R: usize>(
&mut self,
reference: AsymmetricKeyReference,
reference: GenerateKeyReference,
data: &[u8],
mut reply: Reply<'_, R>,
) -> Result {
@@ -865,7 +866,7 @@ impl<'a, T: trussed::Client + trussed::client::Ed255> LoadedAuthenticator<'a, T>
})?;
let secret_key = self.state.persistent.generate_asymmetric_key(
reference,
reference.into(),
parsed_mechanism,
self.trussed,
);
+40
View File
@@ -104,6 +104,26 @@ impl Keys {
AsymmetricKeyReference::DigitalSignature => self.signature.as_ref(),
AsymmetricKeyReference::KeyManagement => self.key_management.as_ref(),
AsymmetricKeyReference::CardAuthentication => self.card_authentication.as_ref(),
AsymmetricKeyReference::Retired01 => self.retired_keys[1].as_ref(),
AsymmetricKeyReference::Retired02 => self.retired_keys[2].as_ref(),
AsymmetricKeyReference::Retired03 => self.retired_keys[3].as_ref(),
AsymmetricKeyReference::Retired04 => self.retired_keys[4].as_ref(),
AsymmetricKeyReference::Retired05 => self.retired_keys[5].as_ref(),
AsymmetricKeyReference::Retired06 => self.retired_keys[6].as_ref(),
AsymmetricKeyReference::Retired07 => self.retired_keys[7].as_ref(),
AsymmetricKeyReference::Retired08 => self.retired_keys[8].as_ref(),
AsymmetricKeyReference::Retired09 => self.retired_keys[9].as_ref(),
AsymmetricKeyReference::Retired10 => self.retired_keys[10].as_ref(),
AsymmetricKeyReference::Retired11 => self.retired_keys[11].as_ref(),
AsymmetricKeyReference::Retired12 => self.retired_keys[12].as_ref(),
AsymmetricKeyReference::Retired13 => self.retired_keys[13].as_ref(),
AsymmetricKeyReference::Retired14 => self.retired_keys[14].as_ref(),
AsymmetricKeyReference::Retired15 => self.retired_keys[15].as_ref(),
AsymmetricKeyReference::Retired16 => self.retired_keys[16].as_ref(),
AsymmetricKeyReference::Retired17 => self.retired_keys[17].as_ref(),
AsymmetricKeyReference::Retired18 => self.retired_keys[18].as_ref(),
AsymmetricKeyReference::Retired19 => self.retired_keys[19].as_ref(),
AsymmetricKeyReference::Retired20 => self.retired_keys[20].as_ref(),
}
}
@@ -119,6 +139,26 @@ impl Keys {
AsymmetricKeyReference::DigitalSignature => self.signature.replace(new),
AsymmetricKeyReference::KeyManagement => self.key_management.replace(new),
AsymmetricKeyReference::CardAuthentication => self.card_authentication.replace(new),
AsymmetricKeyReference::Retired01 => self.retired_keys[1].replace(new),
AsymmetricKeyReference::Retired02 => self.retired_keys[2].replace(new),
AsymmetricKeyReference::Retired03 => self.retired_keys[3].replace(new),
AsymmetricKeyReference::Retired04 => self.retired_keys[4].replace(new),
AsymmetricKeyReference::Retired05 => self.retired_keys[5].replace(new),
AsymmetricKeyReference::Retired06 => self.retired_keys[6].replace(new),
AsymmetricKeyReference::Retired07 => self.retired_keys[7].replace(new),
AsymmetricKeyReference::Retired08 => self.retired_keys[8].replace(new),
AsymmetricKeyReference::Retired09 => self.retired_keys[9].replace(new),
AsymmetricKeyReference::Retired10 => self.retired_keys[10].replace(new),
AsymmetricKeyReference::Retired11 => self.retired_keys[11].replace(new),
AsymmetricKeyReference::Retired12 => self.retired_keys[12].replace(new),
AsymmetricKeyReference::Retired13 => self.retired_keys[13].replace(new),
AsymmetricKeyReference::Retired14 => self.retired_keys[14].replace(new),
AsymmetricKeyReference::Retired15 => self.retired_keys[15].replace(new),
AsymmetricKeyReference::Retired16 => self.retired_keys[16].replace(new),
AsymmetricKeyReference::Retired17 => self.retired_keys[17].replace(new),
AsymmetricKeyReference::Retired18 => self.retired_keys[18].replace(new),
AsymmetricKeyReference::Retired19 => self.retired_keys[19].replace(new),
AsymmetricKeyReference::Retired20 => self.retired_keys[20].replace(new),
}
}
}