1use crate::{sha256, Evaluation, LagrangePolynomial, Polynomial, StandardFormPolynomial};
2use secp::{MaybePoint, MaybeScalar};
3
4pub type SecretShare = Evaluation<MaybeScalar, MaybeScalar>;
6
7pub type PointShare = Evaluation<MaybeScalar, MaybePoint>;
10
11pub type SecretSharingPolynomial = StandardFormPolynomial<MaybeScalar>;
14
15pub type PointSharingPolynomial = StandardFormPolynomial<MaybePoint>;
18
19pub type InterpolatedSecretPolynomial = LagrangePolynomial<MaybeScalar, MaybeScalar>;
21
22pub type InterpolatedPointPolynomial = LagrangePolynomial<MaybeScalar, MaybePoint>;
24
25macro_rules! impl_issue_share {
26 ( $t:ty, $share:ty ) => {
27 impl $t {
28 pub fn issue_share(&self, x: MaybeScalar) -> $share {
30 Evaluation {
31 input: x,
32 output: self.evaluate(x),
33 }
34 }
35 }
36 };
37}
38
39impl_issue_share! { SecretSharingPolynomial, SecretShare }
40impl_issue_share! { PointSharingPolynomial, PointShare }
41impl_issue_share! { InterpolatedSecretPolynomial, SecretShare }
42impl_issue_share! { InterpolatedPointPolynomial, PointShare }
43
44macro_rules! impl_derive_secret {
45 ( $t:ty ) => {
46 impl $t {
47 pub fn derive_secret(&self, x: MaybeScalar) -> [u8; 32] {
50 sha256(&self.evaluate(x).serialize())
51 }
52 }
53 };
54}
55
56impl_derive_secret! { PointSharingPolynomial }
57impl_derive_secret! { InterpolatedPointPolynomial }