foundry_mpc_rs/point/
point.rs1use elliptic_curve::Scalar;
2use elliptic_curve::ScalarPrimitive;
3use serde::{Deserialize, Serialize};
4
5use crate::compat::CSCurve;
6
7#[derive(Debug, Copy, Clone, Serialize, Deserialize, PartialEq, Eq)]
8pub struct Point256 {
9 pub x: [u8; 32],
10 pub y: [u8; 32],
11}
12
13impl Point256 {
14 pub fn x_scalar<C: CSCurve>(&self) -> C::Scalar {
15 let x_scalar_primitive = ScalarPrimitive::<C>::from_slice(&self.x).unwrap();
16 let x_scalar = Scalar::<C>::from(x_scalar_primitive);
17 x_scalar
18 }
19
20 pub fn y_scalar<C: CSCurve>(&self) -> C::Scalar {
21 let y_scalar_primitive = ScalarPrimitive::<C>::from_slice(&self.y).unwrap();
22 let y_scalar = Scalar::<C>::from(y_scalar_primitive);
23 y_scalar
24 }
25}
26
27#[cfg(test)]
28mod tests {
29 use elliptic_curve::CurveArithmetic;
30 use k256::Secp256k1;
31
32 use super::*;
33
34 #[test]
35 fn test_point256() {
36 let mut point = Point256 {
37 x: [0; 32],
38 y: [0; 32],
39 };
40 point.y[31] = 1;
41 let x_scalar = point.x_scalar::<Secp256k1>();
42 assert_eq!(x_scalar, <Secp256k1 as CurveArithmetic>::Scalar::ZERO);
43 let y_scalar = point.y_scalar::<Secp256k1>();
44 assert_eq!(y_scalar, <Secp256k1 as CurveArithmetic>::Scalar::ONE);
45 }
46}