confid: Remove some unsafe
This commit is contained in:
parent
8c17e3a11a
commit
280e1c7d5f
1 changed files with 23 additions and 71 deletions
|
@ -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]);
|
||||
|
|
Loading…
Add table
Reference in a new issue