pub struct CertificateChainBuilder<'a> { /* private fields */ }
Expand description
A builder for creating a certificate chain. For tests only.
§Simple example usage for building a fully valid certificate chain
use mithril_common::crypto_helper::ProtocolParameters;
use mithril_common::test_utils::CertificateChainBuilder;
let (certificate_chain, _protocol_genesis_verifier) = CertificateChainBuilder::new()
.with_total_certificates(5)
.with_certificates_per_epoch(2)
.build();
assert_eq!(5, certificate_chain.len());
§More complex example usage for building a fully valid certificate chain
use std::cmp::min;
use mithril_common::crypto_helper::ProtocolParameters;
use mithril_common::test_utils::CertificateChainBuilder;
let (certificate_chain, _protocol_genesis_verifier) = CertificateChainBuilder::new()
.with_total_certificates(5)
.with_certificates_per_epoch(2)
.with_protocol_parameters(ProtocolParameters {
m: 100,
k: 5,
phi_f: 0.65,
})
.with_total_signers_per_epoch_processor(&|epoch| min(1 + *epoch as usize, 10))
.build();
assert_eq!(5, certificate_chain.len());
§Advanced example usage for building an adversarial certificate chain
use mithril_common::entities::Epoch;
use mithril_common::crypto_helper::ProtocolParameters;
use mithril_common::test_utils::CertificateChainBuilder;
let (certificate_chain, _protocol_genesis_verifier) = CertificateChainBuilder::new()
.with_total_certificates(5)
.with_certificates_per_epoch(2)
.with_standard_certificate_processor(&|certificate, context| {
let mut certificate = certificate;
// Alter the epoch of the last certificate
if context.is_last_certificate() {
certificate.epoch = Epoch(123);
}
certificate
})
.build();
assert_eq!(5, certificate_chain.len());
Implementations§
source§impl<'a> CertificateChainBuilder<'a>
impl<'a> CertificateChainBuilder<'a>
sourcepub fn new() -> Self
pub fn new() -> Self
Create a new CertificateChainBuilder instance.
sourcepub fn with_total_certificates(self, total_certificates: u64) -> Self
pub fn with_total_certificates(self, total_certificates: u64) -> Self
Set the total number of certificates to generate.
sourcepub fn with_certificates_per_epoch(self, certificates_per_epoch: u64) -> Self
pub fn with_certificates_per_epoch(self, certificates_per_epoch: u64) -> Self
Set the number of certificates per epoch.
sourcepub fn with_protocol_parameters(
self,
protocol_parameters: ProtocolParameters,
) -> Self
pub fn with_protocol_parameters( self, protocol_parameters: ProtocolParameters, ) -> Self
Set the protocol parameters.
sourcepub fn with_total_signers_per_epoch_processor(
self,
total_signers_per_epoch_processor: &'a dyn Fn(Epoch) -> usize,
) -> Self
pub fn with_total_signers_per_epoch_processor( self, total_signers_per_epoch_processor: &'a dyn Fn(Epoch) -> usize, ) -> Self
Set the total signers per epoch processor.
sourcepub fn with_genesis_certificate_processor(
self,
genesis_certificate_processor: &'a dyn Fn(Certificate, &CertificateChainBuilderContext<'_>, &ProtocolGenesisSigner) -> Certificate,
) -> Self
pub fn with_genesis_certificate_processor( self, genesis_certificate_processor: &'a dyn Fn(Certificate, &CertificateChainBuilderContext<'_>, &ProtocolGenesisSigner) -> Certificate, ) -> Self
Set the genesis certificate processor.
sourcepub fn with_standard_certificate_processor(
self,
standard_certificate_processor: &'a dyn Fn(Certificate, &CertificateChainBuilderContext<'_>) -> Certificate,
) -> Self
pub fn with_standard_certificate_processor( self, standard_certificate_processor: &'a dyn Fn(Certificate, &CertificateChainBuilderContext<'_>) -> Certificate, ) -> Self
Set the standard certificate processor.
sourcepub fn with_certificate_chaining_method(
self,
certificate_chaining_method: CertificateChainingMethod,
) -> Self
pub fn with_certificate_chaining_method( self, certificate_chaining_method: CertificateChainingMethod, ) -> Self
Set the chaining method to use when building the certificate chain.
sourcepub fn build(self) -> (Vec<Certificate>, ProtocolGenesisVerifier)
pub fn build(self) -> (Vec<Certificate>, ProtocolGenesisVerifier)
Build the certificate chain.
Trait Implementations§
Auto Trait Implementations§
impl<'a> Freeze for CertificateChainBuilder<'a>
impl<'a> !RefUnwindSafe for CertificateChainBuilder<'a>
impl<'a> !Send for CertificateChainBuilder<'a>
impl<'a> !Sync for CertificateChainBuilder<'a>
impl<'a> Unpin for CertificateChainBuilder<'a>
impl<'a> !UnwindSafe for CertificateChainBuilder<'a>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Casts the value.
source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Casts the value.
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§impl<Src, Dst> LosslessTryInto<Dst> for Srcwhere
Dst: LosslessTryFrom<Src>,
impl<Src, Dst> LosslessTryInto<Dst> for Srcwhere
Dst: LosslessTryFrom<Src>,
source§fn lossless_try_into(self) -> Option<Dst>
fn lossless_try_into(self) -> Option<Dst>
Performs the conversion.
source§impl<Src, Dst> LossyInto<Dst> for Srcwhere
Dst: LossyFrom<Src>,
impl<Src, Dst> LossyInto<Dst> for Srcwhere
Dst: LossyFrom<Src>,
source§fn lossy_into(self) -> Dst
fn lossy_into(self) -> Dst
Performs the conversion.
source§impl<T> OverflowingAs for T
impl<T> OverflowingAs for T
source§fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
Casts the value.
source§impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
source§fn overflowing_cast_from(src: Src) -> (Dst, bool)
fn overflowing_cast_from(src: Src) -> (Dst, bool)
Casts the value.
§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<T> SaturatingAs for T
impl<T> SaturatingAs for T
source§fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
Casts the value.
source§impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
source§fn saturating_cast_from(src: Src) -> Dst
fn saturating_cast_from(src: Src) -> Dst
Casts the value.
source§impl<T> UnwrappedAs for T
impl<T> UnwrappedAs for T
source§fn unwrapped_as<Dst>(self) -> Dstwhere
T: UnwrappedCast<Dst>,
fn unwrapped_as<Dst>(self) -> Dstwhere
T: UnwrappedCast<Dst>,
Casts the value.
source§impl<Src, Dst> UnwrappedCastFrom<Src> for Dstwhere
Src: UnwrappedCast<Dst>,
impl<Src, Dst> UnwrappedCastFrom<Src> for Dstwhere
Src: UnwrappedCast<Dst>,
source§fn unwrapped_cast_from(src: Src) -> Dst
fn unwrapped_cast_from(src: Src) -> Dst
Casts the value.
§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
source§impl<T> WrappingAs for T
impl<T> WrappingAs for T
source§fn wrapping_as<Dst>(self) -> Dstwhere
T: WrappingCast<Dst>,
fn wrapping_as<Dst>(self) -> Dstwhere
T: WrappingCast<Dst>,
Casts the value.
source§impl<Src, Dst> WrappingCastFrom<Src> for Dstwhere
Src: WrappingCast<Dst>,
impl<Src, Dst> WrappingCastFrom<Src> for Dstwhere
Src: WrappingCast<Dst>,
source§fn wrapping_cast_from(src: Src) -> Dst
fn wrapping_cast_from(src: Src) -> Dst
Casts the value.