use super::ed25519_impl::{SigningKey, VerifyingKey};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SignaturePlacement {
Embedded,
Detached,
PreferredEmbedded,
}
pub struct SigningConfig {
signing_key: SigningKey,
placement: SignaturePlacement,
}
impl std::fmt::Debug for SigningConfig {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("SigningConfig")
.field("key_id", &hex::encode(self.signing_key.key_id()))
.field("placement", &self.placement)
.finish_non_exhaustive()
}
}
impl SigningConfig {
#[must_use]
pub fn new(signing_key: SigningKey, placement: SignaturePlacement) -> Self {
Self {
signing_key,
placement,
}
}
#[must_use]
pub fn with_key(signing_key: SigningKey) -> Self {
Self {
signing_key,
placement: SignaturePlacement::PreferredEmbedded,
}
}
#[must_use]
pub fn signing_key(&self) -> &SigningKey {
&self.signing_key
}
#[must_use]
pub fn key_id(&self) -> &[u8] {
self.signing_key.key_id()
}
#[must_use]
pub fn verifying_key(&self) -> VerifyingKey {
self.signing_key.verifying_key()
}
#[must_use]
pub fn placement(&self) -> SignaturePlacement {
self.placement
}
#[must_use]
pub fn with_placement(mut self, placement: SignaturePlacement) -> Self {
self.placement = placement;
self
}
#[must_use]
pub fn check_capacity(&self, available_bytes: usize) -> super::SignatureCapacity {
super::check_signature_capacity(available_bytes, self.key_id().len(), self.placement)
}
}