kyber_rs/group/edwards25519/
suite.rs1use core::fmt::{Display, Formatter};
2use core::ops::{Deref, DerefMut};
3
4use serde::Deserialize;
5use serde::Serialize;
6use sha2::Sha256;
7
8use crate::cipher::Stream;
9use crate::group::edwards25519::curve::Curve;
10use crate::group::edwards25519::scalar::Scalar;
11use crate::group::Group;
12use crate::group::HashFactory;
13use crate::share::vss::suite::Suite;
14use crate::sign::dss;
15use crate::util;
16use crate::util::key::Generator;
17use crate::util::key::KeyError;
18use crate::util::key::Suite as KeySuite;
19use crate::{xof, Random, XOFFactory};
20
21use super::Point;
22
23#[derive(Clone, Copy, Debug, Default, Serialize, Deserialize)]
26pub struct SuiteEd25519 {
27 curve: Curve,
30}
31
32impl SuiteEd25519 {
33 pub fn new_blake3_sha256_ed25519() -> SuiteEd25519 {
37 SuiteEd25519::default()
38 }
39
40 }
63
64impl Deref for SuiteEd25519 {
65 type Target = Curve;
66
67 fn deref(&self) -> &Self::Target {
68 &self.curve
69 }
70}
71
72impl DerefMut for SuiteEd25519 {
73 fn deref_mut(&mut self) -> &mut Self::Target {
74 &mut self.curve
75 }
76}
77
78impl Generator<Scalar> for SuiteEd25519 {
79 fn new_key<S: crate::cipher::Stream>(
80 &self,
81 stream: &mut S,
82 ) -> Result<Option<Scalar>, KeyError> {
83 self.curve.new_key(stream)
84 }
85}
86
87impl Display for SuiteEd25519 {
88 fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
89 write!(f, "{}", self.curve)
90 }
91}
92
93impl Group for SuiteEd25519 {
94 type POINT = Point;
95
96 fn scalar(&self) -> Scalar {
97 self.curve.scalar()
98 }
99
100 fn scalar_len(&self) -> usize {
101 self.curve.scalar_len()
102 }
103
104 fn point(&self) -> Point {
105 self.curve.point()
106 }
107
108 fn point_len(&self) -> usize {
109 self.curve.point_len()
110 }
111
112 fn is_prime_order(&self) -> Option<bool> {
113 self.curve.is_prime_order()
114 }
115}
116
117impl Random for SuiteEd25519 {
118 fn random_stream(&self) -> Box<dyn Stream> {
120 Box::<util::random::random_stream::RandStream>::default()
125 }
126}
127
128impl XOFFactory for SuiteEd25519 {
129 fn xof(&self, key: Option<&[u8]>) -> Box<dyn crate::XOF> {
131 Box::new(xof::blake3::Xof::new(key))
132 }
133}
134
135impl HashFactory for SuiteEd25519 {
136 type T = Sha256;
137}
138
139impl Suite for SuiteEd25519 {}
140impl dss::Suite for SuiteEd25519 {}
141impl KeySuite for SuiteEd25519 {}