Skip to content

Commit

Permalink
tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Dr. Capybara committed Aug 22, 2023
1 parent 69f95e5 commit e1c1e05
Show file tree
Hide file tree
Showing 8 changed files with 89 additions and 51 deletions.
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

34 changes: 18 additions & 16 deletions src/curve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,32 +97,32 @@ pub trait IsPoint {
/// # Usage
///
///
impl Add<CurvePoint> for CurvePoint {
impl Add<&CurvePoint> for CurvePoint {
type Output = CurvePoint;

fn add(self, p2: CurvePoint) -> CurvePoint {
let x1 = Rc::new(&self.x);
let y1 = Rc::new(&self.y);
fn add(self, p2: &CurvePoint) -> CurvePoint {
let x1 = &self.x;
let y1 = &self.y;
let x2 = p2.x.clone();
let y2 = p2.y;
let y2 = &p2.y;

let p = self.p.clone();
let d = self.d.clone();

// (x₁y₂ + y₁x₂)
let x1y2 = (*x1.clone() * y2.clone()) % p.clone();
let y1x2 = (*y1.clone() * x2.clone()) % p.clone();
let x1y2 = (x1.clone() * y2.clone()) % p.clone();
let y1x2 = (y1.clone() * x2.clone()) % p.clone();
let x1y2y1x2_sum = (x1y2 + y1x2) % p.clone();
// 1 / (1 + dx₁x₂y₁y₂)
let one_plus_dx1x2y1y2 = (Integer::from(1)
+ (d.clone() * *x1.clone() * x2.clone() * *y1.clone() * y2.clone()))
+ (d.clone() * x1.clone() * x2.clone() * y1.clone() * y2.clone()))
% p.clone();
let one_plus_dx1x2y1y2inv = mod_inv(&one_plus_dx1x2y1y2, &p);
// (y₁y₂ − x₁x₂)
let y1y2x1x2_difference =
((*y1.clone() * y2.clone()) - (*x1.clone() * x2.clone())) % p.clone();
((y1.clone() * y2.clone()) - (x1.clone() * x2.clone())) % p.clone();
// 1 / (1 − dx₁x₂y₁y₂)
let one_minus_dx1x2y1y2 = (Integer::from(1) - (d * *x1 * x2 * *y1 * y2)) % p.clone();
let one_minus_dx1x2y1y2 = (Integer::from(1) - (d * x1 * x2 * y1 * y2)) % p.clone();
let one_minus_dx1x2y1y2inv = mod_inv(&one_minus_dx1x2y1y2, &p);
// (x₁y₂ + y₁x₂) / (1 + dx₁x₂y₁y₂)
let new_x = ((x1y2y1x2_sum * one_plus_dx1x2y1y2inv) % p.clone() + p.clone()) % p.clone();
Expand All @@ -147,7 +147,8 @@ impl Clone for CurvePoint {
}

impl Generator for CurvePoint {
/// Returns CurvePoint(x, y), where x is provided and y is obtained from curve equation.
/// Returns CurvePoint(x, y), where x is the smallest possible value that satisfies the curve
/// equation, and y is obtained from solving the curve equation with x.
/// Any scalar s * G generates the curve.
/// # Arguments
///
Expand Down Expand Up @@ -209,14 +210,15 @@ impl Mul<Integer> for CurvePoint {

fn mul(self, s: Integer) -> CurvePoint {
let mut r0 = CurvePoint::id_point(self.curve);
let mut r1 = self;
let mut r1 = self.clone();

for i in (0..=s.significant_bits()).rev() {
if s.get_bit(i) {
r0 = r0 + r1.clone();
r1 = r1.clone() + r1.clone();
r0 = r0 + &r1;
r1 = r1.clone() + &r1;
} else {
r1 = r0.clone() + r1;
r0 = r0.clone() + r0.clone();
r1 = r0.clone() + &r1;
r0 = r0.clone() + &r0;
}
}
r0 // r0 = P * s
Expand Down
10 changes: 5 additions & 5 deletions src/model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -404,10 +404,10 @@ pub mod operations {
/// use capycrypt::model::operations;
/// use capycrypt::sha3::aux_functions::byte_utils::get_random_bytes;
/// use std::borrow::BorrowMut;
///
///
/// let mut message = Box::new(get_random_bytes(5242880).to_owned());
/// let pw = get_random_bytes(32);
///
///
/// const SELECTED_CURVE: Curves = Curves::E448;
/// let key_obj = operations::gen_keypair(&mut pw.clone(), "test".to_string(), 256);
/// let x = key_obj.pub_x;
Expand Down Expand Up @@ -453,10 +453,10 @@ pub mod operations {
/// use capycrypt::model::operations;
/// use capycrypt::sha3::aux_functions::byte_utils::get_random_bytes;
/// use std::borrow::BorrowMut;
///
///
/// let mut message = Box::new(get_random_bytes(5242880).to_owned());
/// let pw = get_random_bytes(32);
///
///
/// const SELECTED_CURVE: Curves = Curves::E448;
/// let key_obj = operations::gen_keypair(&mut pw.clone(), "test".to_string(), 256);
/// let x = key_obj.pub_x;
Expand All @@ -476,7 +476,7 @@ pub mod operations {
) -> bool {
let mut u = CurvePoint::generator(SELECTED_CURVE, false) * sig.z.clone();
let hv = pub_key * (bytes_to_big(sig.h.clone()));
u = u + hv;
u = u + &hv;
let h_p = kmac_xof(&mut big_to_bytes(u.x), message.borrow_mut(), 512, "T", d);
h_p == sig.h
}
Expand Down
12 changes: 6 additions & 6 deletions tests/e222_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ mod e222_tests {

use capycrypt::curve::Curves;
const SELECTED_CURVE: Curves = Curves::E222;

#[test]
#[test]
// 0 * G = 𝒪
fn test_zero_times_g() {
let mut point = CurvePoint::generator(SELECTED_CURVE, false);
Expand Down Expand Up @@ -43,7 +43,7 @@ mod e222_tests {
fn test_g_plus_neg_g() {
let g = CurvePoint::generator(SELECTED_CURVE, false);
assert!(
g.clone() + -g == CurvePoint::id_point(SELECTED_CURVE),
g.clone() + &-g == CurvePoint::id_point(SELECTED_CURVE),
"points are not equal, check mul and add functions"
)
}
Expand All @@ -54,7 +54,7 @@ mod e222_tests {
let s = big::from(2);
let two_g = CurvePoint::generator(SELECTED_CURVE, false) * (s);
let mut sum_g = CurvePoint::generator(SELECTED_CURVE, false);
sum_g = sum_g.clone() + sum_g.clone();
sum_g = sum_g.clone() + &sum_g;
assert!(
&sum_g == &two_g,
"points are not equal, check mul and add functions"
Expand Down Expand Up @@ -112,7 +112,7 @@ mod e222_tests {
let k1g = CurvePoint::generator(SELECTED_CURVE, false) * (k + 1);

let mut kgg = CurvePoint::generator(SELECTED_CURVE, false) * (k_2);
kgg = kgg + CurvePoint::generator(SELECTED_CURVE, false);
kgg = kgg + &CurvePoint::generator(SELECTED_CURVE, false);
assert!(&k1g == &kgg)
}

Expand All @@ -135,7 +135,7 @@ mod e222_tests {
let mut r1 = g.clone() * (k_2);
// (t*G)
let r2 = g * (t_2);
r1 = r1 + r2;
r1 = r1 + &r2;
assert!(&r1 == &r0)
}

Expand Down
8 changes: 4 additions & 4 deletions tests/e382_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ mod e382_tests {
fn test_g_plus_neg_g() {
let g = CurvePoint::generator(SELECTED_CURVE, false);
assert!(
g.clone() + -g == CurvePoint::id_point(SELECTED_CURVE),
g.clone() + &-g == CurvePoint::id_point(SELECTED_CURVE),
"points are not equal, check mul and add functions"
)
}
Expand All @@ -54,7 +54,7 @@ mod e382_tests {
let s = big::from(2);
let two_g = CurvePoint::generator(SELECTED_CURVE, false) * (s);
let mut sum_g = CurvePoint::generator(SELECTED_CURVE, false);
sum_g = sum_g.clone() + sum_g.clone();
sum_g = sum_g.clone() + &sum_g;
assert!(
&sum_g == &two_g,
"points are not equal, check mul and add functions"
Expand Down Expand Up @@ -112,7 +112,7 @@ mod e382_tests {
let k1g = CurvePoint::generator(SELECTED_CURVE, false) * (k + 1);

let mut kgg = CurvePoint::generator(SELECTED_CURVE, false) * (k_2);
kgg = kgg + CurvePoint::generator(SELECTED_CURVE, false);
kgg = kgg + &CurvePoint::generator(SELECTED_CURVE, false);
assert!(&k1g == &kgg)
}

Expand All @@ -135,7 +135,7 @@ mod e382_tests {
let mut r1 = g.clone() * (k_2);
// (t*G)
let r2 = g * (t_2);
r1 = r1 + r2;
r1 = r1 + &r2;
assert!(&r1 == &r0)
}

Expand Down
43 changes: 29 additions & 14 deletions tests/e448_tests.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#[cfg(test)]
mod e448_tests {
use std::time::Instant;

use capycrypt::{
curve::{CurvePoint, Generator, IdPoint},
sha3::aux_functions::byte_utils::get_random_big,
Expand All @@ -11,6 +13,17 @@ mod e448_tests {
use capycrypt::curve::Curves;
const SELECTED_CURVE: Curves = Curves::E448;

#[test]
fn test_timing_side_channel() {
for i in 0..200 {
let point = CurvePoint::generator(SELECTED_CURVE, false);
let s = big::from(1) << i;
let now = Instant::now();
let _result = point * s;
println!("{} needed {} micro seconds", i, now.elapsed().as_micros());
}
}

#[test]
// 0 * G = 𝒪
fn test_zero_times_g() {
Expand All @@ -31,8 +44,7 @@ mod e448_tests {
let s = big::from(1);
let g = CurvePoint::generator(SELECTED_CURVE, false);
point = point * (s);
// println!("point x: {}", point.x);
// println!("point y: {}", point.y);

assert!(
&g == &point,
"points are not equal, check mul and add functions"
Expand All @@ -44,7 +56,7 @@ mod e448_tests {
fn test_g_plus_neg_g() {
let g = CurvePoint::generator(SELECTED_CURVE, false);
assert!(
g.clone() + -g == CurvePoint::id_point(SELECTED_CURVE),
g.clone() + &-g == CurvePoint::id_point(SELECTED_CURVE),
"points are not equal, check mul and add functions"
)
}
Expand All @@ -55,7 +67,7 @@ mod e448_tests {
let s = big::from(2);
let two_g = CurvePoint::generator(SELECTED_CURVE, false) * (s);
let mut sum_g = CurvePoint::generator(SELECTED_CURVE, false);
sum_g = sum_g.clone() + sum_g.clone();
sum_g = sum_g.clone() + &sum_g;
assert!(
&sum_g == &two_g,
"points are not equal, check mul and add functions"
Expand Down Expand Up @@ -92,12 +104,13 @@ mod e448_tests {
#[test]
// k*G = (k mod r)*G
fn k_g_equals_k_mod_r_times_g() {
let g = CurvePoint::generator(SELECTED_CURVE, false);
let mut rng = thread_rng();
let k_u128: u64 = rng.gen();
let k = big::from(k_u128);
let same_k = k.clone();
let g = CurvePoint::generator(SELECTED_CURVE, false) * (k);
let r = CurvePoint::generator(SELECTED_CURVE, false).r;
let g = g * (k);
let r = g.clone().r;
let k_mod_r = same_k % r;
let mut k_mod_r_timesg = CurvePoint::generator(SELECTED_CURVE, false);
k_mod_r_timesg = k_mod_r_timesg * (k_mod_r);
Expand All @@ -112,13 +125,14 @@ mod e448_tests {
let k1g = CurvePoint::generator(SELECTED_CURVE, false) * (k + 1);

let mut kgg = CurvePoint::generator(SELECTED_CURVE, false) * (k_2);
kgg = kgg + CurvePoint::generator(SELECTED_CURVE, false);
kgg = kgg + &CurvePoint::generator(SELECTED_CURVE, false);
assert!(&k1g == &kgg)
}

#[test]
//(k + t)*G = (k*G) + (t*G)
fn k_t() {
let g = CurvePoint::generator(SELECTED_CURVE, false);
let mut rng = thread_rng();
let rnd: u64 = rng.gen();

Expand All @@ -129,18 +143,19 @@ mod e448_tests {
let t_2 = t.clone();

// (k + t)*G
let r0 = CurvePoint::generator(SELECTED_CURVE, false) * (k + t);
let r0 = g.clone() * (k + t);
// (k*G)
let mut r1 = CurvePoint::generator(SELECTED_CURVE, false) * (k_2);
let mut r1 = g.clone() * (k_2);
// (t*G)
let r2 = CurvePoint::generator(SELECTED_CURVE, false) * (t_2);
r1 = r1 + r2;
let r2 = g * (t_2);
r1 = r1 + &r2;
assert!(&r1 == &r0)
}

#[test]
//k*(t*P) = t*(k*G) = (k*t mod r)*G
fn test_ktp() {
let g = CurvePoint::generator(SELECTED_CURVE, false);
let r = CurvePoint::generator(SELECTED_CURVE, false).r;
let k = get_random_big(256);
let k_2 = k.clone();
Expand All @@ -150,9 +165,9 @@ mod e448_tests {
let t_2 = t.clone();
let t_3 = t.clone();

let ktp = CurvePoint::generator(SELECTED_CURVE, false) * (t) * (k);
let tkg = CurvePoint::generator(SELECTED_CURVE, false) * (k_2) * (t_2);
let k_t_mod_r_g = CurvePoint::generator(SELECTED_CURVE, false) * ((k_3 * t_3) % r);
let ktp = g.clone() * (t) * (k);
let tkg = g.clone() * (k_2) * (t_2);
let k_t_mod_r_g = g * ((k_3 * t_3) % r);

assert!(&ktp == &tkg && &k_t_mod_r_g == &tkg && &k_t_mod_r_g == &ktp)
}
Expand Down
9 changes: 5 additions & 4 deletions tests/e521_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ mod e521_tests {
let s = big::from(1);
let g = CurvePoint::generator(SELECTED_CURVE, false);
point = point * (s);

assert!(
&g == &point,
"points are not equal, check mul and add functions"
Expand All @@ -42,7 +43,7 @@ mod e521_tests {
fn test_g_plus_neg_g() {
let g = CurvePoint::generator(SELECTED_CURVE, false);
assert!(
g.clone() + -g == CurvePoint::id_point(SELECTED_CURVE),
g.clone() + &-g == CurvePoint::id_point(SELECTED_CURVE),
"points are not equal, check mul and add functions"
)
}
Expand All @@ -53,7 +54,7 @@ mod e521_tests {
let s = big::from(2);
let two_g = CurvePoint::generator(SELECTED_CURVE, false) * (s);
let mut sum_g = CurvePoint::generator(SELECTED_CURVE, false);
sum_g = sum_g.clone() + sum_g.clone();
sum_g = sum_g.clone() + &sum_g;
assert!(
&sum_g == &two_g,
"points are not equal, check mul and add functions"
Expand Down Expand Up @@ -111,7 +112,7 @@ mod e521_tests {
let k1g = CurvePoint::generator(SELECTED_CURVE, false) * (k + 1);

let mut kgg = CurvePoint::generator(SELECTED_CURVE, false) * (k_2);
kgg = kgg + CurvePoint::generator(SELECTED_CURVE, false);
kgg = kgg + &CurvePoint::generator(SELECTED_CURVE, false);
assert!(&k1g == &kgg)
}

Expand All @@ -134,7 +135,7 @@ mod e521_tests {
let mut r1 = g.clone() * (k_2);
// (t*G)
let r2 = g * (t_2);
r1 = r1 + r2;
r1 = r1 + &r2;
assert!(&r1 == &r0)
}

Expand Down
Loading

0 comments on commit e1c1e05

Please sign in to comment.