mod compression;
mod fingerprint;
mod key_id;
mod mpi;
mod packet;
mod params;
mod public_key;
mod revocation_key;
mod s2k;
mod secret_key;
mod secret_key_repr;
mod user;
use log::debug;
pub use self::compression::*;
pub use self::fingerprint::*;
pub use self::key_id::*;
pub use self::mpi::*;
pub use self::packet::*;
pub use self::params::*;
pub use self::public_key::*;
pub use self::revocation_key::*;
pub use self::s2k::*;
pub use self::secret_key::*;
pub use self::secret_key_repr::*;
pub use self::user::*;
use crate::crypto::sym::SymmetricKeyAlgorithm;
#[derive(Debug, PartialEq, Eq, Clone)]
pub enum SignatureBytes {
Mpis(Vec<Mpi>),
Native(Vec<u8>),
}
impl SignatureBytes {
pub(crate) fn to_writer<W: std::io::Write>(&self, writer: &mut W) -> crate::errors::Result<()> {
use crate::ser::Serialize;
match &self {
SignatureBytes::Mpis(mpis) => {
for val in mpis {
debug!("writing: {}", hex::encode(val));
val.to_writer(writer)?;
}
}
SignatureBytes::Native(sig) => {
writer.write_all(sig)?;
}
}
Ok(())
}
}
impl<'a> TryFrom<&'a SignatureBytes> for &'a [Mpi] {
type Error = crate::errors::Error;
fn try_from(value: &'a SignatureBytes) -> std::result::Result<Self, Self::Error> {
match value {
SignatureBytes::Mpis(mpis) => Ok(mpis),
SignatureBytes::Native(_) => bail!("Native Sig can't be transformed into Mpis"),
}
}
}
impl<'a> TryFrom<&'a SignatureBytes> for &'a [u8] {
type Error = crate::errors::Error;
fn try_from(value: &'a SignatureBytes) -> std::result::Result<Self, Self::Error> {
match value {
SignatureBytes::Mpis(_) => bail!("Mpi-based Sig can't be transformed into &[u8]"),
SignatureBytes::Native(native) => Ok(native),
}
}
}
impl From<Vec<Mpi>> for SignatureBytes {
fn from(value: Vec<Mpi>) -> Self {
SignatureBytes::Mpis(value)
}
}
impl From<Vec<u8>> for SignatureBytes {
fn from(value: Vec<u8>) -> Self {
SignatureBytes::Native(value)
}
}
#[derive(Debug)]
pub enum EskType {
V3_4,
V6,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum PkeskBytes {
Rsa {
mpi: Mpi,
},
Elgamal {
first: Mpi,
second: Mpi,
},
Ecdh {
public_point: Mpi,
encrypted_session_key: Vec<u8>,
},
X25519 {
ephemeral: [u8; 32],
session_key: Vec<u8>,
sym_alg: Option<SymmetricKeyAlgorithm>,
},
X448 {
ephemeral: [u8; 56],
session_key: Vec<u8>,
sym_alg: Option<SymmetricKeyAlgorithm>,
},
Other,
}