#![cfg_attr(docsrs, feature(doc_cfg))]
#[cfg(feature = "signatures")]
mod ed25519_impl;
#[cfg(feature = "signatures")]
pub mod config;
#[cfg(feature = "signatures")]
pub use ed25519_impl::*;
#[cfg(feature = "signatures")]
pub use config::{SignaturePlacement, SigningConfig};
#[cfg(feature = "signatures")]
pub const ED25519_OVERHEAD_BYTES: usize = 64 + 36 + 68;
#[cfg(feature = "signatures")]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SignatureCapacity {
FitsEmbedded,
NeedsDetached,
}
#[cfg(feature = "signatures")]
#[must_use]
pub fn check_signature_capacity(
available_bytes: usize,
key_id_len: usize,
placement: SignaturePlacement,
) -> SignatureCapacity {
match placement {
SignaturePlacement::Detached => SignatureCapacity::NeedsDetached,
SignaturePlacement::Embedded | SignaturePlacement::PreferredEmbedded => {
let needed =
crate::payload_v3::types::V3_CORE_SIZE + key_id_len + ED25519_OVERHEAD_BYTES;
if available_bytes >= needed {
SignatureCapacity::FitsEmbedded
} else {
SignatureCapacity::NeedsDetached
}
}
}
}