diff --git a/umskt/src/confid/black_box.rs b/umskt/src/confid/black_box.rs index 688552d..294e1e9 100644 --- a/umskt/src/confid/black_box.rs +++ b/umskt/src/confid/black_box.rs @@ -6,6 +6,7 @@ struct TDivisor { u: [u64; 2], v: [u64; 2], } + #[derive(Copy, Clone)] #[repr(C)] struct C2RustUnnamed { @@ -43,7 +44,7 @@ struct C2RustUnnamed4 { product_id_high: u8, key_sha1: u16, } -static mut F: [u64; 6] = [ +static F: [u64; 6] = [ 0, 0x21840136c85381, 0x44197b83892ad0, @@ -201,7 +202,7 @@ fn residue_sqrt(what: u64) -> u64 { x } -unsafe fn find_divisor_v(d: *mut TDivisor) -> i32 { +fn find_divisor_v(d: &mut TDivisor) -> i32 { // u | v^2 - f // u = u0 + u1*x + x^2 // f%u = f0 + f1*x @@ -212,8 +213,8 @@ unsafe fn find_divisor_v(d: *mut TDivisor) -> i32 { f2[i as usize] = F[i as usize]; i += 1; } - let u0: u64 = (*d).u[0_i32 as usize]; - let u1: u64 = (*d).u[1_i32 as usize]; + let u0: u64 = d.u[0_i32 as usize]; + let u1: u64 = d.u[1_i32 as usize]; let mut j: i32 = 4_i32; loop { let fresh0 = j; @@ -281,18 +282,18 @@ unsafe fn find_divisor_v(d: *mut TDivisor) -> i32 { residue_add(f1, residue_mul(u1, residue_mul(v1, v1))), residue_inv(residue_add(v1, v1)), ); - (*d).v[0_i32 as usize] = v0; - (*d).v[1_i32 as usize] = v1; + d.v[0_i32 as usize] = v0; + d.v[1_i32 as usize] = v1; 1_i32 } -unsafe fn polynomial_mul( +fn polynomial_mul( adeg: i32, - a: *const u64, + a: &[u64], bdeg: i32, - b: *const u64, + b: &[u64], mut resultprevdeg: i32, - result: *mut u64, + result: &mut [u64], ) -> i32 { // generic short slow code if adeg < 0_i32 || bdeg < 0_i32 { @@ -300,7 +301,7 @@ unsafe fn polynomial_mul( } let mut i = resultprevdeg + 1_i32; while i <= adeg + bdeg { - *result.offset(i as isize) = 0_i32 as u64; + result[i as usize] = 0_i32 as u64; i += 1; } resultprevdeg = i - 1_i32; @@ -308,15 +309,15 @@ unsafe fn polynomial_mul( while i <= adeg { let mut j = 0_i32; while j <= bdeg { - *result.offset((i + j) as isize) = residue_add( - *result.offset((i + j) as isize), - residue_mul(*a.offset(i as isize), *b.offset(j as isize)), + result[(i + j) as usize] = residue_add( + result[(i + j) as usize], + residue_mul(a[i as usize], b[j as usize]), ); j += 1; } i += 1; } - while resultprevdeg >= 0_i32 && *result.offset(resultprevdeg as isize) == 0_i32 as u64 { + while resultprevdeg >= 0_i32 && result[resultprevdeg as usize] == 0_i32 as u64 { resultprevdeg -= 1; } resultprevdeg @@ -575,14 +576,7 @@ unsafe fn divisor_add(src1: *const TDivisor, src2: *const TDivisor, dst: *mut TD i += 1; } let mut u: [u64; 5] = [0; 5]; - let mut udeg: i32 = polynomial_mul( - u1deg, - u1.as_mut_ptr() as *const u64, - u2deg, - u2.as_mut_ptr() as *const u64, - -1_i32, - u.as_mut_ptr(), - ); + let mut udeg: i32 = polynomial_mul(u1deg, &u1, u2deg, &u2, -1_i32, &mut u); // u is monic let mut v: [u64; 7] = [0; 7]; let mut tmp: [u64; 7] = [0; 7]; @@ -590,30 +584,9 @@ unsafe fn divisor_add(src1: *const TDivisor, src2: *const TDivisor, dst: *mut TD // c1*(e1*u1*(v2-v1) + d1*v1) + c2*(v1*v2 + f) v[0_i32 as usize] = residue_sub(v2[0_i32 as usize], v1[0_i32 as usize]); v[1_i32 as usize] = residue_sub(v2[1_i32 as usize], v1[1_i32 as usize]); - let mut tmpdeg = polynomial_mul( - e1deg, - e1.as_mut_ptr() as *const u64, - 1_i32, - v.as_mut_ptr() as *const u64, - -1_i32, - tmp.as_mut_ptr(), - ); - let mut vdeg = polynomial_mul( - u1deg, - u1.as_mut_ptr() as *const u64, - tmpdeg, - tmp.as_mut_ptr() as *const u64, - -1_i32, - v.as_mut_ptr(), - ); - vdeg = polynomial_mul( - d1deg, - d1.as_mut_ptr() as *const u64, - 1_i32, - v1.as_mut_ptr() as *const u64, - vdeg, - v.as_mut_ptr(), - ); + let mut tmpdeg = polynomial_mul(e1deg, &e1, 1_i32, &v, -1_i32, &mut tmp); + let mut vdeg = polynomial_mul(u1deg, &u1, tmpdeg, &tmp, -1_i32, &mut v); + vdeg = polynomial_mul(d1deg, &d1, 1_i32, &v1, vdeg, &mut v); i = 0_i32; while i <= vdeg { v[i as usize] = residue_mul(v[i as usize], c1[0_i32 as usize]); @@ -626,22 +599,8 @@ unsafe fn divisor_add(src1: *const TDivisor, src2: *const TDivisor, dst: *mut TD tmp[4] = F[4]; tmp[5] = F[5]; tmpdeg = 5_i32; - tmpdeg = polynomial_mul( - 1_i32, - v1.as_mut_ptr() as *const u64, - 1_i32, - v2.as_mut_ptr() as *const u64, - tmpdeg, - tmp.as_mut_ptr(), - ); - vdeg = polynomial_mul( - c2deg, - c2.as_mut_ptr() as *const u64, - tmpdeg, - tmp.as_mut_ptr() as *const u64, - vdeg, - v.as_mut_ptr(), - ); + tmpdeg = polynomial_mul(1_i32, &v1, 1_i32, &v2, tmpdeg, &mut tmp); + vdeg = polynomial_mul(c2deg, &c2, tmpdeg, &tmp, vdeg, &mut v); if ddeg > 0_i32 { let mut udiv: [u64; 5] = [0; 5]; polynomial_div_monic( @@ -683,14 +642,7 @@ unsafe fn divisor_add(src1: *const TDivisor, src2: *const TDivisor, dst: *mut TD ); while udeg > 2_i32 { // u' = monic((f-v^2)/u), v'=-v mod u' - tmpdeg = polynomial_mul( - vdeg, - v.as_mut_ptr() as *const u64, - vdeg, - v.as_mut_ptr() as *const u64, - -1_i32, - tmp.as_mut_ptr(), - ); + tmpdeg = polynomial_mul(vdeg, &v, vdeg, &v, -1_i32, &mut tmp); i = 0_i32; while i <= tmpdeg && i <= 5_i32 { tmp[i as usize] = residue_sub(F[i as usize], tmp[i as usize]);