lit_node_core/traits/encoding/
decaf377.rs1use super::{BeBytes, CompressedBytes, LeBytes};
2use lit_rust_crypto::{decaf377, ff::PrimeField, group::GroupEncoding};
3
4impl CompressedBytes for decaf377::Element {
8 fn to_compressed(&self) -> Vec<u8> {
9 self.to_bytes().to_vec()
10 }
11
12 fn from_compressed(bytes: &[u8]) -> Option<Self> {
13 let mut repr = <decaf377::Element as GroupEncoding>::Repr::default();
14 if bytes.len() != repr.len() {
15 return None;
16 }
17 repr.copy_from_slice(bytes);
18 Option::from(Self::from_bytes(&repr))
19 }
20}
21
22impl BeBytes for decaf377::Fr {
23 fn to_be_bytes(&self) -> Vec<u8> {
24 let mut bytes = self.to_bytes();
25 bytes.reverse();
26 bytes.to_vec()
27 }
28
29 fn from_be_bytes(bytes: &[u8]) -> Option<Self> {
30 let mut bytes = bytes.to_vec();
31 bytes.reverse();
32 let mut repr = <decaf377::Fr as PrimeField>::Repr::default();
33 repr.copy_from_slice(bytes.as_slice());
34 Option::from(Self::from_repr(repr))
35 }
36}
37
38impl LeBytes for decaf377::Fr {
39 fn to_le_bytes(&self) -> Vec<u8> {
40 self.to_bytes().to_vec()
41 }
42
43 fn from_le_bytes(bytes: &[u8]) -> Option<Self> {
44 let mut repr = <decaf377::Fr as PrimeField>::Repr::default();
45 repr.copy_from_slice(bytes);
46 Option::from(Self::from_repr(repr))
47 }
48}
49
50impl CompressedBytes for decaf377::Fr {
51 fn to_compressed(&self) -> Vec<u8> {
52 self.to_bytes().to_vec()
53 }
54
55 fn from_compressed(bytes: &[u8]) -> Option<Self> {
56 let mut repr = <decaf377::Fr as PrimeField>::Repr::default();
57 repr.copy_from_slice(bytes);
58 Option::from(Self::from_repr(repr))
59 }
60}