use super::types::AckSubject;
use commonware_cryptography::{certificate, Digest, PublicKey};
pub trait Scheme<P: PublicKey, D: Digest>:
for<'a> certificate::Scheme<Subject<'a, D> = AckSubject<'a, P, D>, PublicKey = P>
{
}
impl<P: PublicKey, D: Digest, S> Scheme<P, D> for S where
S: for<'a> certificate::Scheme<Subject<'a, D> = AckSubject<'a, P, D>, PublicKey = P>
{
}
pub mod bls12381_multisig {
use crate::ordered_broadcast::types::{AckNamespace, AckSubject};
use commonware_cryptography::impl_certificate_bls12381_multisig;
impl_certificate_bls12381_multisig!(AckSubject<'a, P, D>, AckNamespace);
}
pub mod bls12381_threshold {
use crate::ordered_broadcast::types::{AckNamespace, AckSubject};
use commonware_cryptography::impl_certificate_bls12381_threshold;
impl_certificate_bls12381_threshold!(AckSubject<'a, P, D>, AckNamespace);
}
pub mod ed25519 {
use crate::ordered_broadcast::types::{AckNamespace, AckSubject};
use commonware_cryptography::{ed25519, impl_certificate_ed25519};
impl_certificate_ed25519!(AckSubject<'a, ed25519::PublicKey, D>, AckNamespace);
}
pub mod secp256r1 {
use crate::ordered_broadcast::types::{AckNamespace, AckSubject};
use commonware_cryptography::impl_certificate_secp256r1;
impl_certificate_secp256r1!(AckSubject<'a, P, D>, AckNamespace);
}