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],
|
u: [u64; 2],
|
||||||
v: [u64; 2],
|
v: [u64; 2],
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
struct C2RustUnnamed {
|
struct C2RustUnnamed {
|
||||||
|
@ -43,7 +44,7 @@ struct C2RustUnnamed4 {
|
||||||
product_id_high: u8,
|
product_id_high: u8,
|
||||||
key_sha1: u16,
|
key_sha1: u16,
|
||||||
}
|
}
|
||||||
static mut F: [u64; 6] = [
|
static F: [u64; 6] = [
|
||||||
0,
|
0,
|
||||||
0x21840136c85381,
|
0x21840136c85381,
|
||||||
0x44197b83892ad0,
|
0x44197b83892ad0,
|
||||||
|
@ -201,7 +202,7 @@ fn residue_sqrt(what: u64) -> u64 {
|
||||||
x
|
x
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe fn find_divisor_v(d: *mut TDivisor) -> i32 {
|
fn find_divisor_v(d: &mut TDivisor) -> i32 {
|
||||||
// u | v^2 - f
|
// u | v^2 - f
|
||||||
// u = u0 + u1*x + x^2
|
// u = u0 + u1*x + x^2
|
||||||
// f%u = f0 + f1*x
|
// 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];
|
f2[i as usize] = F[i as usize];
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
let u0: u64 = (*d).u[0_i32 as usize];
|
let u0: u64 = d.u[0_i32 as usize];
|
||||||
let u1: u64 = (*d).u[1_i32 as usize];
|
let u1: u64 = d.u[1_i32 as usize];
|
||||||
let mut j: i32 = 4_i32;
|
let mut j: i32 = 4_i32;
|
||||||
loop {
|
loop {
|
||||||
let fresh0 = j;
|
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_add(f1, residue_mul(u1, residue_mul(v1, v1))),
|
||||||
residue_inv(residue_add(v1, v1)),
|
residue_inv(residue_add(v1, v1)),
|
||||||
);
|
);
|
||||||
(*d).v[0_i32 as usize] = v0;
|
d.v[0_i32 as usize] = v0;
|
||||||
(*d).v[1_i32 as usize] = v1;
|
d.v[1_i32 as usize] = v1;
|
||||||
1_i32
|
1_i32
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe fn polynomial_mul(
|
fn polynomial_mul(
|
||||||
adeg: i32,
|
adeg: i32,
|
||||||
a: *const u64,
|
a: &[u64],
|
||||||
bdeg: i32,
|
bdeg: i32,
|
||||||
b: *const u64,
|
b: &[u64],
|
||||||
mut resultprevdeg: i32,
|
mut resultprevdeg: i32,
|
||||||
result: *mut u64,
|
result: &mut [u64],
|
||||||
) -> i32 {
|
) -> i32 {
|
||||||
// generic short slow code
|
// generic short slow code
|
||||||
if adeg < 0_i32 || bdeg < 0_i32 {
|
if adeg < 0_i32 || bdeg < 0_i32 {
|
||||||
|
@ -300,7 +301,7 @@ unsafe fn polynomial_mul(
|
||||||
}
|
}
|
||||||
let mut i = resultprevdeg + 1_i32;
|
let mut i = resultprevdeg + 1_i32;
|
||||||
while i <= adeg + bdeg {
|
while i <= adeg + bdeg {
|
||||||
*result.offset(i as isize) = 0_i32 as u64;
|
result[i as usize] = 0_i32 as u64;
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
resultprevdeg = i - 1_i32;
|
resultprevdeg = i - 1_i32;
|
||||||
|
@ -308,15 +309,15 @@ unsafe fn polynomial_mul(
|
||||||
while i <= adeg {
|
while i <= adeg {
|
||||||
let mut j = 0_i32;
|
let mut j = 0_i32;
|
||||||
while j <= bdeg {
|
while j <= bdeg {
|
||||||
*result.offset((i + j) as isize) = residue_add(
|
result[(i + j) as usize] = residue_add(
|
||||||
*result.offset((i + j) as isize),
|
result[(i + j) as usize],
|
||||||
residue_mul(*a.offset(i as isize), *b.offset(j as isize)),
|
residue_mul(a[i as usize], b[j as usize]),
|
||||||
);
|
);
|
||||||
j += 1;
|
j += 1;
|
||||||
}
|
}
|
||||||
i += 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 -= 1;
|
||||||
}
|
}
|
||||||
resultprevdeg
|
resultprevdeg
|
||||||
|
@ -575,14 +576,7 @@ unsafe fn divisor_add(src1: *const TDivisor, src2: *const TDivisor, dst: *mut TD
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
let mut u: [u64; 5] = [0; 5];
|
let mut u: [u64; 5] = [0; 5];
|
||||||
let mut udeg: i32 = polynomial_mul(
|
let mut udeg: i32 = polynomial_mul(u1deg, &u1, u2deg, &u2, -1_i32, &mut u);
|
||||||
u1deg,
|
|
||||||
u1.as_mut_ptr() as *const u64,
|
|
||||||
u2deg,
|
|
||||||
u2.as_mut_ptr() as *const u64,
|
|
||||||
-1_i32,
|
|
||||||
u.as_mut_ptr(),
|
|
||||||
);
|
|
||||||
// u is monic
|
// u is monic
|
||||||
let mut v: [u64; 7] = [0; 7];
|
let mut v: [u64; 7] = [0; 7];
|
||||||
let mut tmp: [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)
|
// 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[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]);
|
v[1_i32 as usize] = residue_sub(v2[1_i32 as usize], v1[1_i32 as usize]);
|
||||||
let mut tmpdeg = polynomial_mul(
|
let mut tmpdeg = polynomial_mul(e1deg, &e1, 1_i32, &v, -1_i32, &mut tmp);
|
||||||
e1deg,
|
let mut vdeg = polynomial_mul(u1deg, &u1, tmpdeg, &tmp, -1_i32, &mut v);
|
||||||
e1.as_mut_ptr() as *const u64,
|
vdeg = polynomial_mul(d1deg, &d1, 1_i32, &v1, vdeg, &mut v);
|
||||||
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(),
|
|
||||||
);
|
|
||||||
i = 0_i32;
|
i = 0_i32;
|
||||||
while i <= vdeg {
|
while i <= vdeg {
|
||||||
v[i as usize] = residue_mul(v[i as usize], c1[0_i32 as usize]);
|
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[4] = F[4];
|
||||||
tmp[5] = F[5];
|
tmp[5] = F[5];
|
||||||
tmpdeg = 5_i32;
|
tmpdeg = 5_i32;
|
||||||
tmpdeg = polynomial_mul(
|
tmpdeg = polynomial_mul(1_i32, &v1, 1_i32, &v2, tmpdeg, &mut tmp);
|
||||||
1_i32,
|
vdeg = polynomial_mul(c2deg, &c2, tmpdeg, &tmp, vdeg, &mut v);
|
||||||
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(),
|
|
||||||
);
|
|
||||||
if ddeg > 0_i32 {
|
if ddeg > 0_i32 {
|
||||||
let mut udiv: [u64; 5] = [0; 5];
|
let mut udiv: [u64; 5] = [0; 5];
|
||||||
polynomial_div_monic(
|
polynomial_div_monic(
|
||||||
|
@ -683,14 +642,7 @@ unsafe fn divisor_add(src1: *const TDivisor, src2: *const TDivisor, dst: *mut TD
|
||||||
);
|
);
|
||||||
while udeg > 2_i32 {
|
while udeg > 2_i32 {
|
||||||
// u' = monic((f-v^2)/u), v'=-v mod u'
|
// u' = monic((f-v^2)/u), v'=-v mod u'
|
||||||
tmpdeg = polynomial_mul(
|
tmpdeg = polynomial_mul(vdeg, &v, vdeg, &v, -1_i32, &mut tmp);
|
||||||
vdeg,
|
|
||||||
v.as_mut_ptr() as *const u64,
|
|
||||||
vdeg,
|
|
||||||
v.as_mut_ptr() as *const u64,
|
|
||||||
-1_i32,
|
|
||||||
tmp.as_mut_ptr(),
|
|
||||||
);
|
|
||||||
i = 0_i32;
|
i = 0_i32;
|
||||||
while i <= tmpdeg && i <= 5_i32 {
|
while i <= tmpdeg && i <= 5_i32 {
|
||||||
tmp[i as usize] = residue_sub(F[i as usize], tmp[i as usize]);
|
tmp[i as usize] = residue_sub(F[i as usize], tmp[i as usize]);
|
||||||
|
|
Loading…
Add table
Reference in a new issue