use crate::impls::inner_types::*;
use core::fmt::Display;
use serde::Serialize;
use serde::de::DeserializeOwned;
use subtle::ConditionallySelectable;
use vsss_rs::*;
pub trait Pairing {
type SecretKeyShare: Share<
Identifier = IdentifierPrimeField<<Self::PublicKey as Group>::Scalar>,
Value = ValuePrimeField<<Self::PublicKey as Group>::Scalar>,
> + core::fmt::Debug
+ DeserializeOwned
+ Default;
type PublicKey: Group + GroupEncoding + Default + Display + ConditionallySelectable;
type PublicKeyShare: Share<
Identifier = IdentifierPrimeField<<Self::PublicKey as Group>::Scalar>,
Value = ValueGroup<Self::PublicKey>,
> + Copy
+ Display
+ core::fmt::Debug
+ ConditionallySelectable
+ Serialize
+ DeserializeOwned
+ Default;
type Signature: Group<Scalar = <Self::PublicKey as Group>::Scalar>
+ GroupEncoding
+ Default
+ Display
+ ConditionallySelectable;
type SignatureShare: Share<
Identifier = IdentifierPrimeField<<Self::Signature as Group>::Scalar>,
Value = ValueGroup<Self::Signature>,
> + Copy
+ Display
+ core::fmt::Debug
+ ConditionallySelectable
+ Serialize
+ DeserializeOwned
+ Default;
type PairingResult: Group + GroupEncoding + Default + Display + ConditionallySelectable;
fn pairing(points: &[(Self::Signature, Self::PublicKey)]) -> Self::PairingResult;
}