confid: Remove unsafe from u2poly
This commit is contained in:
parent
6f4cd8ecf5
commit
4e25f1080e
1 changed files with 33 additions and 32 deletions
|
@ -449,35 +449,35 @@ fn polynomial_xgcd(
|
||||||
*pmult2deg = mult2deg;
|
*pmult2deg = mult2deg;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe fn u2poly(src: *const TDivisor, polyu: *mut u64, polyv: *mut u64) -> i32 {
|
fn u2poly(src: &TDivisor, polyu: &mut [u64], polyv: &mut [u64]) -> i32 {
|
||||||
if (*src).u[1_i32 as usize] != BAD {
|
if src.u[1_i32 as usize] != BAD {
|
||||||
*polyu.offset(0_i32 as isize) = (*src).u[0_i32 as usize];
|
polyu[0_i32 as usize] = src.u[0_i32 as usize];
|
||||||
*polyu.offset(1_i32 as isize) = (*src).u[1_i32 as usize];
|
polyu[1_i32 as usize] = src.u[1_i32 as usize];
|
||||||
*polyu.offset(2_i32 as isize) = 1_i32 as u64;
|
polyu[2_i32 as usize] = 1_i32 as u64;
|
||||||
*polyv.offset(0_i32 as isize) = (*src).v[0_i32 as usize];
|
polyv[0_i32 as usize] = src.v[0_i32 as usize];
|
||||||
*polyv.offset(1_i32 as isize) = (*src).v[1_i32 as usize];
|
polyv[1_i32 as usize] = src.v[1_i32 as usize];
|
||||||
return 2_i32;
|
return 2_i32;
|
||||||
}
|
}
|
||||||
if (*src).u[0_i32 as usize] != BAD {
|
if src.u[0_i32 as usize] != BAD {
|
||||||
*polyu.offset(0_i32 as isize) = (*src).u[0_i32 as usize];
|
polyu[0_i32 as usize] = src.u[0_i32 as usize];
|
||||||
*polyu.offset(1_i32 as isize) = 1_i32 as u64;
|
polyu[1_i32 as usize] = 1_i32 as u64;
|
||||||
*polyv.offset(0_i32 as isize) = (*src).v[0_i32 as usize];
|
polyv[0_i32 as usize] = src.v[0_i32 as usize];
|
||||||
*polyv.offset(1_i32 as isize) = 0_i32 as u64;
|
polyv[1_i32 as usize] = 0_i32 as u64;
|
||||||
return 1_i32;
|
return 1_i32;
|
||||||
}
|
}
|
||||||
*polyu.offset(0_i32 as isize) = 1_i32 as u64;
|
polyu[0_i32 as usize] = 1_i32 as u64;
|
||||||
*polyv.offset(0_i32 as isize) = 0_i32 as u64;
|
polyv[0_i32 as usize] = 0_i32 as u64;
|
||||||
*polyv.offset(1_i32 as isize) = 0_i32 as u64;
|
polyv[1_i32 as usize] = 0_i32 as u64;
|
||||||
0_i32
|
0_i32
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe fn divisor_add(src1: *const TDivisor, src2: *const TDivisor, dst: *mut TDivisor) {
|
unsafe fn divisor_add(src1: &TDivisor, src2: &TDivisor, dst: *mut TDivisor) {
|
||||||
let mut u1: [u64; 3] = [0; 3];
|
let mut u1: [u64; 3] = [0; 3];
|
||||||
let mut u2: [u64; 3] = [0; 3];
|
let mut u2: [u64; 3] = [0; 3];
|
||||||
let mut v1: [u64; 2] = [0; 2];
|
let mut v1: [u64; 2] = [0; 2];
|
||||||
let mut v2: [u64; 2] = [0; 2];
|
let mut v2: [u64; 2] = [0; 2];
|
||||||
let u1deg: i32 = u2poly(src1, u1.as_mut_ptr(), v1.as_mut_ptr());
|
let u1deg: i32 = u2poly(src1, &mut u1, &mut v1);
|
||||||
let u2deg: i32 = u2poly(src2, u2.as_mut_ptr(), v2.as_mut_ptr());
|
let u2deg: i32 = u2poly(src2, &mut u2, &mut v2);
|
||||||
// extended gcd: d1 = gcd(u1, u2) = e1*u1 + e2*u2
|
// extended gcd: d1 = gcd(u1, u2) = e1*u1 + e2*u2
|
||||||
let mut d1deg: i32 = 0;
|
let mut d1deg: i32 = 0;
|
||||||
let mut e1deg: i32 = 0;
|
let mut e1deg: i32 = 0;
|
||||||
|
@ -634,22 +634,20 @@ unsafe fn divisor_add(src1: *const TDivisor, src2: *const TDivisor, dst: *mut TD
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe fn divisor_mul128(
|
unsafe fn divisor_mul128(src: &TDivisor, mut mult_lo: u64, mut mult_hi: u64, dst: &mut TDivisor) {
|
||||||
src: *const TDivisor,
|
|
||||||
mut mult_lo: u64,
|
|
||||||
mut mult_hi: u64,
|
|
||||||
dst: *mut TDivisor,
|
|
||||||
) {
|
|
||||||
if mult_lo == 0_i32 as u64 && mult_hi == 0_i32 as u64 {
|
if mult_lo == 0_i32 as u64 && mult_hi == 0_i32 as u64 {
|
||||||
(*dst).u[0_i32 as usize] = BAD;
|
dst.u[0_i32 as usize] = BAD;
|
||||||
(*dst).u[1_i32 as usize] = BAD;
|
dst.u[1_i32 as usize] = BAD;
|
||||||
(*dst).v[0_i32 as usize] = BAD;
|
dst.v[0_i32 as usize] = BAD;
|
||||||
(*dst).v[1_i32 as usize] = BAD;
|
dst.v[1_i32 as usize] = BAD;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let mut cur: TDivisor = *src;
|
let mut cur: TDivisor = *src;
|
||||||
while mult_lo & 1_i32 as u64 == 0 {
|
while mult_lo & 1_i32 as u64 == 0 {
|
||||||
divisor_add(&cur, &cur, &mut cur);
|
{
|
||||||
|
let tmp = cur;
|
||||||
|
divisor_add(&tmp, &tmp, &mut cur);
|
||||||
|
}
|
||||||
mult_lo >>= 1_i32;
|
mult_lo >>= 1_i32;
|
||||||
if mult_hi & 1_i32 as u64 != 0 {
|
if mult_hi & 1_i32 as u64 != 0 {
|
||||||
mult_lo |= 1_u64 << 63_i32;
|
mult_lo |= 1_u64 << 63_i32;
|
||||||
|
@ -666,9 +664,12 @@ unsafe fn divisor_mul128(
|
||||||
if mult_lo == 0_i32 as u64 && mult_hi == 0_i32 as u64 {
|
if mult_lo == 0_i32 as u64 && mult_hi == 0_i32 as u64 {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
divisor_add(&cur, &cur, &mut cur);
|
{
|
||||||
|
let tmp = cur;
|
||||||
|
divisor_add(&tmp, &tmp, &mut cur);
|
||||||
|
}
|
||||||
if mult_lo & 1_i32 as u64 != 0 {
|
if mult_lo & 1_i32 as u64 != 0 {
|
||||||
divisor_add(dst, &cur, dst);
|
divisor_add(&(dst.clone()), &cur, dst);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1011,7 +1012,7 @@ pub unsafe fn generate(installation_id_str: *const i8, confirmation_id: *mut i8)
|
||||||
return 6_i32;
|
return 6_i32;
|
||||||
}
|
}
|
||||||
divisor_mul128(
|
divisor_mul128(
|
||||||
&d_0,
|
&(d_0.clone()),
|
||||||
0x4e21b9d10f127c1_i64 as u64,
|
0x4e21b9d10f127c1_i64 as u64,
|
||||||
0x40da7c36d44c_i64 as u64,
|
0x40da7c36d44c_i64 as u64,
|
||||||
&mut d_0,
|
&mut d_0,
|
||||||
|
|
Loading…
Add table
Reference in a new issue