Remove usage of libc functions

This commit is contained in:
Alex Page 2023-06-21 21:40:58 -04:00
parent a0657d2652
commit 69faa5626e

View file

@ -5,13 +5,13 @@
clippy::too_many_arguments
)]
use std::ffi::{CStr, CString};
use std::{
ffi::{CStr, CString},
ptr,
};
use thiserror::Error;
extern "C" {
fn memcpy(_: *mut libc::c_void, _: *const libc::c_void, _: u64) -> *mut libc::c_void;
fn memset(_: *mut libc::c_void, _: i32, _: u64) -> *mut libc::c_void;
}
type size_t = u64;
type int64_t = i64;
type uint16_t = u16;
@ -626,11 +626,12 @@ unsafe fn divisor_add(src1: *const TDivisor, src2: *const TDivisor, mut dst: *mu
v[i as usize] = residue_mul(v[i as usize], c1[0_i32 as usize]);
i += 1;
}
memcpy(
tmp.as_mut_ptr() as *mut libc::c_void,
f.as_ptr() as *const libc::c_void,
(6_i32 as u64).wrapping_mul(::std::mem::size_of::<uint64_t>() as u64),
);
tmp[0] = f[0];
tmp[1] = f[1];
tmp[2] = f[2];
tmp[3] = f[3];
tmp[4] = f[4];
tmp[5] = f[5];
tmpdeg = 5_i32;
tmpdeg = polynomial_mul(
1_i32,
@ -675,11 +676,9 @@ unsafe fn divisor_add(src1: *const TDivisor, src2: *const TDivisor, mut dst: *mu
udiv.as_mut_ptr(),
);
vdeg -= ddeg;
memcpy(
v.as_mut_ptr() as *mut libc::c_void,
udiv.as_mut_ptr() as *const libc::c_void,
((vdeg + 1_i32) as u64).wrapping_mul(::std::mem::size_of::<uint64_t>() as u64),
);
for i in 0..=vdeg {
v[i as usize] = udiv[i as usize];
}
}
}
vdeg = polynomial_div_monic(
@ -939,20 +938,18 @@ unsafe fn Mix(
let half: size_t = bufSize.wrapping_div(2_i32 as u64);
let mut external_counter = 0_i32;
while external_counter < 4_i32 {
memset(
sha1_input.as_mut_ptr() as *mut libc::c_void,
0_i32,
::std::mem::size_of::<[libc::c_uchar; 64]>() as u64,
for n in &mut sha1_input {
*n = 0;
}
ptr::copy_nonoverlapping(
buffer.offset(half as isize),
sha1_input.as_mut_ptr(),
half as usize,
);
memcpy(
sha1_input.as_mut_ptr() as *mut libc::c_void,
buffer.offset(half as isize) as *const libc::c_void,
half,
);
memcpy(
sha1_input.as_mut_ptr().offset(half as isize) as *mut libc::c_void,
ptr::copy_nonoverlapping(
key as *const libc::c_void,
keySize,
sha1_input.as_mut_ptr().offset(half as isize) as *mut libc::c_void,
keySize as usize,
);
sha1_input[half.wrapping_add(keySize) as usize] = 0x80_i32 as libc::c_uchar;
sha1_input[(::std::mem::size_of::<[libc::c_uchar; 64]>() as u64).wrapping_sub(1_i32 as u64)
@ -995,20 +992,14 @@ unsafe fn Unmix(
let half: size_t = bufSize.wrapping_div(2_i32 as u64);
let mut external_counter = 0_i32;
while external_counter < 4_i32 {
memset(
sha1_input.as_mut_ptr() as *mut libc::c_void,
0_i32,
::std::mem::size_of::<[libc::c_uchar; 64]>() as u64,
);
memcpy(
sha1_input.as_mut_ptr() as *mut libc::c_void,
buffer as *const libc::c_void,
half,
);
memcpy(
sha1_input.as_mut_ptr().offset(half as isize) as *mut libc::c_void,
key as *const libc::c_void,
keySize,
for n in &mut sha1_input {
*n = 0;
}
ptr::copy_nonoverlapping(buffer, sha1_input.as_mut_ptr(), half as usize);
ptr::copy_nonoverlapping(
key,
sha1_input.as_mut_ptr().offset(half as isize),
keySize as usize,
);
sha1_input[half.wrapping_add(keySize) as usize] = 0x80_i32 as libc::c_uchar;
sha1_input[(::std::mem::size_of::<[libc::c_uchar; 64]>() as u64).wrapping_sub(1_i32 as u64)
@ -1132,10 +1123,10 @@ unsafe fn Generate(
ProductIDHigh: 0,
KeySHA1: 0,
};
memcpy(
&mut parsed as *mut C2RustUnnamed_4 as *mut libc::c_void,
ptr::copy_nonoverlapping(
installation_id.as_mut_ptr() as *const libc::c_void,
::std::mem::size_of::<C2RustUnnamed_4>() as u64,
&mut parsed as *mut C2RustUnnamed_4 as *mut libc::c_void,
std::mem::size_of::<C2RustUnnamed_4>(),
);
let productId1: u32 = (parsed.ProductIDLow & ((1_i32 << 17_i32) - 1_i32) as u64) as u32;
let productId2: u32 =
@ -1156,19 +1147,19 @@ unsafe fn Generate(
}
let mut keybuf: [libc::c_uchar; 16] = [0; 16];
let mut hardware_id = parsed.HardwareID;
memcpy(
ptr::copy_nonoverlapping(
&mut hardware_id as *mut u64 as *const libc::c_void,
keybuf.as_mut_ptr() as *mut libc::c_void,
&mut hardware_id as *mut uint64_t as *const libc::c_void,
8_i32 as u64,
8,
);
let mut productIdMixed: uint64_t = (productId1 as uint64_t) << 41_i32
| (productId2 as uint64_t) << 58_i32
| (productId3 as uint64_t) << 17_i32
| productId4 as u64;
memcpy(
keybuf.as_mut_ptr().offset(8_i32 as isize) as *mut libc::c_void,
&mut productIdMixed as *mut uint64_t as *const libc::c_void,
8_i32 as u64,
ptr::copy_nonoverlapping(
&mut productIdMixed as *mut u64 as *const libc::c_void,
keybuf.as_mut_ptr().offset(8) as *mut libc::c_void,
8,
);
let mut d_0: TDivisor = TDivisor {
u: [0; 2],