#![allow(macro_expanded_macro_exports_accessed_by_absolute_paths)]
#![deny(unsafe_code)]
#![cfg_attr(not(feature = "std"), no_std)]
#[cfg(not(feature = "std"))]
extern crate alloc;
#[cfg(not(feature = "std"))]
use alloc::vec::Vec;
pub(crate) mod frame;
pub(crate) mod version;
pub mod asn1;
pub mod constants;
pub mod core;
pub mod error;
pub mod flags;
pub mod helpers;
pub mod matrix;
pub mod oids;
pub mod prelude;
#[cfg(feature = "std")]
pub mod runtime;
#[cfg(any(test, feature = "testing"))]
pub mod trace;
pub mod utils;
#[cfg(feature = "instrument")]
pub mod instrumentation;
#[cfg(feature = "builder")]
pub mod builder;
#[cfg(feature = "colony")]
pub mod colony;
#[cfg(feature = "compress")]
pub mod compress;
#[cfg(feature = "crypto")]
pub mod crypto;
#[cfg(feature = "doc")]
pub mod doc;
pub mod macros;
#[cfg(feature = "policy")]
pub mod policy;
#[cfg(feature = "random")]
pub mod random;
#[cfg(feature = "router")]
pub mod router;
#[cfg(feature = "standards")]
pub mod standards;
#[cfg(feature = "transport")]
pub mod transport;
#[cfg(feature = "rayon")]
pub use rayon;
#[cfg(feature = "zeroize")]
pub use zeroize;
pub use asn1::*;
pub use cms;
pub use der;
pub use paste;
pub use pkcs12;
pub use spki;
pub use x509_cert as x509;
#[cfg(feature = "hex")]
pub use hex_literal::hex;
#[cfg(all(feature = "std", not(feature = "tokio")))]
pub use std::sync::mpsc;
#[cfg(feature = "time")]
pub use time;
#[cfg(feature = "tokio")]
pub use tokio::sync::mpsc;
pub use utils::{decode, encode};
#[cfg(feature = "derive")]
pub use tightbeam_derive::{Beamable, Errorizable, Flaggable};
extern crate self as tightbeam;
pub use crate::core::*;
pub use crate::error::TightBeamError;
#[cfg(any(test, feature = "testing"))]
pub mod testing;
#[cfg(feature = "builder")]
tightbeam_derive::generate_builders!();
pub type ZeroizingBytes = zeroize::Zeroizing<Vec<u8>>;
pub type ZeroizingArray<const N: usize> = zeroize::Zeroizing<[u8; N]>;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn frame_size_calc() -> Result<(), Box<dyn std::error::Error>> {
use crate::asn1::*;
use crate::cms::cert::IssuerAndSerialNumber;
use crate::cms::compressed_data::CompressedData;
use crate::cms::content_info::CmsVersion;
use crate::cms::enveloped_data::EncryptedContentInfo;
use crate::cms::signed_data::{EncapsulatedContentInfo, SignerIdentifier, SignerInfo};
use crate::der::{Decode, Encode};
use crate::oids::*;
use crate::pkcs12::digest_info::DigestInfo;
use crate::spki::AlgorithmIdentifier;
use crate::x509::name::Name;
use crate::x509::serial_number::SerialNumber;
let matrix_size: u8 = 16;
let matrix = Asn1Matrix { n: matrix_size, data: vec![0; (matrix_size as usize) * (matrix_size as usize)] };
let metadata = Metadata {
id: vec![0; 16], order: 0,
compactness: Some(CompressedData {
version: CmsVersion::V0,
compression_alg: AlgorithmIdentifier { oid: COMPRESSION_ZLIB, parameters: None },
encap_content_info: EncapsulatedContentInfo {
econtent_type: DATA,
econtent: Some(der::Any::from_der(&der::asn1::OctetString::new(vec![0; 10])?.to_der()?)?),
},
}),
integrity: Some(DigestInfo {
algorithm: AlgorithmIdentifier { oid: HASH_SHA3_256, parameters: None },
digest: der::asn1::OctetString::new(vec![0; 32])?,
}),
confidentiality: Some(EncryptedContentInfo {
content_type: DATA,
content_enc_alg: AlgorithmIdentifier { oid: COMPRESSION_ZLIB, parameters: None },
encrypted_content: Some(der::asn1::OctetString::new(vec![0; 50])?),
}),
priority: Some(MessagePriority::Normal),
lifetime: Some(3600),
previous_frame: Some(DigestInfo {
algorithm: AlgorithmIdentifier { oid: HASH_SHA3_256, parameters: None },
digest: der::asn1::OctetString::new(vec![0; 32])?,
}),
matrix: Some(matrix),
};
const _: () = {
const VERSION: Version = Version::V3;
const HAS_MATRIX: bool = true; [(); 1][!Frame::const_validate_version_fields(VERSION, HAS_MATRIX) as usize];
};
let frame = Frame {
version: Version::V3,
metadata,
message: vec![], integrity: Some(DigestInfo {
algorithm: AlgorithmIdentifier { oid: HASH_SHA3_256, parameters: None },
digest: der::asn1::OctetString::new(vec![0; 32])?,
}),
nonrepudiation: Some(SignerInfo {
version: CmsVersion::V1,
sid: SignerIdentifier::IssuerAndSerialNumber(IssuerAndSerialNumber {
issuer: Name::default(),
serial_number: SerialNumber::new(&[0; 8])?,
}),
digest_alg: AlgorithmIdentifier { oid: HASH_SHA3_256, parameters: None },
signed_attrs: None,
signature_algorithm: AlgorithmIdentifier { oid: SIGNER_ECDSA_WITH_SHA3_256, parameters: None },
signature: der::asn1::OctetString::new(vec![0; 64])?,
unsigned_attrs: None,
}),
};
let der_bytes = der::Encode::to_der(&frame)?;
println!("DER-encoded frame size: {} bytes", der_bytes.len());
assert!(!der_bytes.is_empty());
Ok(())
}
}