mirror of
https://github.com/trussed-dev/piv-authenticator.git
synced 2026-06-20 04:16:15 -07:00
Generalize AsymetricKeyReference
This commit is contained in:
+3
-3
@@ -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) => {
|
||||
|
||||
@@ -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
@@ -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,
|
||||
);
|
||||
|
||||
@@ -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),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user