arkeddsa/src/signature.rs
src/signature.rsRaw
1use ark_ec::twisted_edwards::Affine;
2use ark_ec::twisted_edwards::TECurveConfig;
3use ark_ec::CurveGroup;
4use ark_serialize::CanonicalDeserialize;
5use ark_serialize::CanonicalSerialize;
6
7/// `SignatureComponents` contains the realized parts of a signature
8#[derive(Copy, Clone, Debug, PartialEq, CanonicalSerialize, CanonicalDeserialize)]
9pub struct Signature<C: CurveGroup + Clone> {
10 pub r: C::Affine,
11 pub s: C::ScalarField,
12}
13
14impl<C: CurveGroup + Clone> Signature<C> {
15 /*
16 /// Serializes the signature components to bytes as uncompressed.
17 /// Expect output size to be `size_of(C::BaseField) * 2 + size_of(C::ScalarField)`
18 pub fn to_bytes(&self) -> Vec<u8> {
19 let mut bytes = Vec::new();
20 self.r.serialize_uncompressed(&mut bytes).unwrap();
21 self.s.serialize_uncompressed(&mut bytes).unwrap();
22 bytes
23 }
24
25 /// Checked deserialization of the signature components from bytes.
26 /// Expects input size to be `size_of(C::BaseField) * 2 + size_of(C::ScalarField)`
27 pub fn from_bytes(bytes: &[u8]) -> Result<Self, Box<dyn ark_std::error::Error>> {
28 let point_size = C::Affine::Config::serialized_size(ark_serialize::Compress::No);
29 (bytes.len() == 32 + C::Affine::Config::serialized_size(ark_serialize::Compress::No))
30 .then_some(true)
31 .ok_or(ark_serialize::SerializationError::InvalidData)?;
32
33 let off1 = point_size;
34 let off2 = off1 + 32;
35
36 let r = C::Affine::deserialize_uncompressed(&bytes[00..off1])?;
37 let s = C::ScalarField::deserialize_uncompressed(&bytes[off1..off2])?;
38 Ok(Signature { r, s })
39 }
40 */
41
42 pub fn new(r: C::Affine, s: C::ScalarField) -> Self {
43 Self { r, s }
44 }
45
46 pub fn r(&self) -> &C::Affine {
47 &self.r
48 }
49
50 pub fn s(&self) -> &C::ScalarField {
51 &self.s
52 }
53}