diff --git a/umskt/src/confid/black_box.rs b/umskt/src/confid/black_box.rs index 294e1e9..e10673b 100644 --- a/umskt/src/confid/black_box.rs +++ b/umskt/src/confid/black_box.rs @@ -323,32 +323,29 @@ fn polynomial_mul( resultprevdeg } -unsafe fn polynomial_div_monic( +fn polynomial_div_monic( adeg: i32, - a: *mut u64, + a: &mut [u64], bdeg: i32, - b: *const u64, - quotient: *mut u64, + b: &[u64], + mut quotient: Option<&mut [u64]>, ) -> i32 { let mut i = adeg - bdeg; while i >= 0_i32 { - let q: u64 = *a.offset((i + bdeg) as isize); - if !quotient.is_null() { - *quotient.offset(i as isize) = q; + let q: u64 = a[(i + bdeg) as usize]; + if let Some(ref mut quotient) = quotient { + quotient[i as usize] = q; } let mut j = 0_i32; while j < bdeg { - *a.offset((i + j) as isize) = residue_sub( - *a.offset((i + j) as isize), - residue_mul(q, *b.offset(j as isize)), - ); + a[(i + j) as usize] = residue_sub(a[(i + j) as usize], residue_mul(q, b[j as usize])); j += 1; } - *a.offset((i + j) as isize) = 0_i32 as u64; + a[(i + j) as usize] = 0_i32 as u64; i -= 1; } i += bdeg; - while i >= 0_i32 && *a.offset(i as isize) == 0_i32 as u64 { + while i >= 0_i32 && a[i as usize] == 0_i32 as u64 { i -= 1; } i @@ -603,43 +600,19 @@ unsafe fn divisor_add(src1: *const TDivisor, src2: *const TDivisor, dst: *mut TD vdeg = polynomial_mul(c2deg, &c2, tmpdeg, &tmp, vdeg, &mut v); if ddeg > 0_i32 { let mut udiv: [u64; 5] = [0; 5]; - polynomial_div_monic( - udeg, - u.as_mut_ptr(), - ddeg, - d.as_mut_ptr() as *const u64, - udiv.as_mut_ptr(), - ); + polynomial_div_monic(udeg, &mut u, ddeg, &d, Some(&mut udiv)); udeg -= ddeg; - polynomial_div_monic( - udeg, - udiv.as_mut_ptr(), - ddeg, - d.as_mut_ptr() as *const u64, - u.as_mut_ptr(), - ); + polynomial_div_monic(udeg, &mut udiv, ddeg, &d, Some(&mut u)); udeg -= ddeg; if vdeg >= 0_i32 { - polynomial_div_monic( - vdeg, - v.as_mut_ptr(), - ddeg, - d.as_mut_ptr() as *const u64, - udiv.as_mut_ptr(), - ); + polynomial_div_monic(vdeg, &mut v, ddeg, &d, Some(&mut udiv)); vdeg -= ddeg; for i in 0..=vdeg { v[i as usize] = udiv[i as usize]; } } } - vdeg = polynomial_div_monic( - vdeg, - v.as_mut_ptr(), - udeg, - u.as_mut_ptr() as *const u64, - std::ptr::null_mut::(), - ); + vdeg = polynomial_div_monic(vdeg, &mut v, udeg, &u, None); while udeg > 2_i32 { // u' = monic((f-v^2)/u), v'=-v mod u' tmpdeg = polynomial_mul(vdeg, &v, vdeg, &v, -1_i32, &mut tmp); @@ -658,13 +631,7 @@ unsafe fn divisor_add(src1: *const TDivisor, src2: *const TDivisor, dst: *mut TD } tmpdeg = i - 1_i32; let mut udiv_0: [u64; 5] = [0; 5]; - polynomial_div_monic( - tmpdeg, - tmp.as_mut_ptr(), - udeg, - u.as_mut_ptr() as *const u64, - udiv_0.as_mut_ptr(), - ); + polynomial_div_monic(tmpdeg, &mut tmp, udeg, &u, Some(&mut udiv_0)); udeg = tmpdeg - udeg; let mult: u64 = residue_inv(udiv_0[udeg as usize]); i = 0_i32; @@ -678,13 +645,7 @@ unsafe fn divisor_add(src1: *const TDivisor, src2: *const TDivisor, dst: *mut TD v[i as usize] = residue_sub(0_i32 as u64, v[i as usize]); i += 1; } - vdeg = polynomial_div_monic( - vdeg, - v.as_mut_ptr(), - udeg, - u.as_mut_ptr() as *const u64, - std::ptr::null_mut::(), - ); + vdeg = polynomial_div_monic(vdeg, &mut v, udeg, &u, None); } if udeg == 2_i32 { (*dst).u[0_i32 as usize] = u[0_i32 as usize];