mod header;
pub use header::{Algorithm, Header, Mode, RecipientHeader};
#[cfg(feature = "rust")]
pub mod rust;
#[cfg(feature = "web")]
pub mod web;
use crate::artifacts::VerifyingKey;
use crate::identity::Policy;
use crate::util::*;
use crate::{artifacts::SigningKeyExt, consts::*};
use header::SignatureExt;
use ibs::gg::Verifier;
use serde::{Deserialize, Serialize};
#[derive(Debug)]
pub struct Sealer<'r, R, C> {
header: Header,
rng: &'r mut R,
config: C,
pub_sign_key: SigningKeyExt,
priv_sign_key: Option<SigningKeyExt>,
}
impl<'r, R, C> Sealer<'r, R, C> {
pub fn with_priv_signing_key(mut self, priv_sign_key: SigningKeyExt) -> Self {
self.priv_sign_key = Some(priv_sign_key);
self
}
}
#[derive(Debug)]
pub struct Unsealer<R, C: UnsealerConfig> {
pub version: u16,
pub header: Header,
pub pub_id: Policy,
r: R,
config: C,
verifier: Verifier,
vk: VerifyingKey,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct VerificationResult {
pub public: Policy,
#[serde(skip_serializing_if = "Option::is_none")]
pub private: Option<Policy>,
}
#[doc(hidden)]
pub trait SealerConfig: sealed::SealerConfig {}
#[doc(hidden)]
pub trait UnsealerConfig: sealed::UnsealerConfig {}
pub(crate) mod sealed {
pub trait UnsealerConfig {}
pub trait SealerConfig {}
}
#[cfg(any(feature = "stream", target_arch = "wasm32"))]
impl From<futures::io::Error> for crate::error::Error {
fn from(e: futures::io::Error) -> Self {
Self::FuturesIO(e)
}
}
#[cfg(feature = "stream")]
pub(self) fn stream_mode_checked(
h: &Header,
) -> Result<(u32, (u64, Option<u64>)), crate::error::Error> {
let (segment_size, size_hint) = match h {
Header {
mode:
Mode::Streaming {
segment_size,
size_hint,
},
..
} => (segment_size, size_hint),
_ => return Err(crate::error::Error::ModeNotSupported(h.mode)),
};
if *segment_size > MAX_SYMMETRIC_CHUNK_SIZE {
return Err(crate::error::Error::ConstraintViolation);
}
Ok((*segment_size, *size_hint))
}