Remove libc dependency
This commit is contained in:
parent
69faa5626e
commit
7d35fe36fe
3 changed files with 91 additions and 111 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -367,7 +367,6 @@ dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bitreader",
|
"bitreader",
|
||||||
"clap",
|
"clap",
|
||||||
"libc",
|
|
||||||
"openssl",
|
"openssl",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
|
|
|
@ -9,7 +9,6 @@ edition = "2021"
|
||||||
anyhow = "1.0.71"
|
anyhow = "1.0.71"
|
||||||
bitreader = "0.3.7"
|
bitreader = "0.3.7"
|
||||||
clap = { version = "4.3.4", features = ["derive"] }
|
clap = { version = "4.3.4", features = ["derive"] }
|
||||||
libc = "0.2.146"
|
|
||||||
openssl = { git = "https://github.com/anpage/rust-openssl.git" }
|
openssl = { git = "https://github.com/anpage/rust-openssl.git" }
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
thiserror = "1.0.40"
|
thiserror = "1.0.40"
|
||||||
|
|
196
src/confid.rs
196
src/confid.rs
|
@ -6,7 +6,7 @@
|
||||||
)]
|
)]
|
||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
ffi::{CStr, CString},
|
ffi::{c_void, CStr, CString},
|
||||||
ptr,
|
ptr,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ struct C2RustUnnamed_2 {
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
union C2RustUnnamed_3 {
|
union C2RustUnnamed_3 {
|
||||||
buffer: [libc::c_uchar; 14],
|
buffer: [u8; 14],
|
||||||
c2rust_unnamed: C2RustUnnamed_2,
|
c2rust_unnamed: C2RustUnnamed_2,
|
||||||
}
|
}
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
|
@ -57,8 +57,8 @@ union C2RustUnnamed_3 {
|
||||||
struct C2RustUnnamed_4 {
|
struct C2RustUnnamed_4 {
|
||||||
HardwareID: uint64_t,
|
HardwareID: uint64_t,
|
||||||
ProductIDLow: uint64_t,
|
ProductIDLow: uint64_t,
|
||||||
ProductIDHigh: libc::c_uchar,
|
ProductIDHigh: u8,
|
||||||
KeySHA1: libc::c_ushort,
|
KeySHA1: u16,
|
||||||
}
|
}
|
||||||
static mut f: [uint64_t; 6] = [
|
static mut f: [uint64_t; 6] = [
|
||||||
0_i32 as uint64_t,
|
0_i32 as uint64_t,
|
||||||
|
@ -813,7 +813,7 @@ unsafe fn rol(x: u32, shift: i32) -> u32 {
|
||||||
x << shift | x >> (32_i32 - shift)
|
x << shift | x >> (32_i32 - shift)
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe fn sha1_single_block(input: *mut libc::c_uchar, output: *mut libc::c_uchar) {
|
unsafe fn sha1_single_block(input: *mut u8, output: *mut u8) {
|
||||||
let mut a = 0x67452301_i32 as u32;
|
let mut a = 0x67452301_i32 as u32;
|
||||||
let mut b = 0xefcdab89_u32;
|
let mut b = 0xefcdab89_u32;
|
||||||
let mut c = 0x98badcfe_u32;
|
let mut c = 0x98badcfe_u32;
|
||||||
|
@ -905,36 +905,31 @@ unsafe fn sha1_single_block(input: *mut libc::c_uchar, output: *mut libc::c_ucha
|
||||||
c = c.wrapping_add(0x98badcfe_u32);
|
c = c.wrapping_add(0x98badcfe_u32);
|
||||||
d = d.wrapping_add(0x10325476_i32 as u32);
|
d = d.wrapping_add(0x10325476_i32 as u32);
|
||||||
e = e.wrapping_add(0xc3d2e1f0_u32);
|
e = e.wrapping_add(0xc3d2e1f0_u32);
|
||||||
*output.offset(0_i32 as isize) = (a >> 24_i32) as libc::c_uchar;
|
*output.offset(0_i32 as isize) = (a >> 24_i32) as u8;
|
||||||
*output.offset(1_i32 as isize) = (a >> 16_i32) as libc::c_uchar;
|
*output.offset(1_i32 as isize) = (a >> 16_i32) as u8;
|
||||||
*output.offset(2_i32 as isize) = (a >> 8_i32) as libc::c_uchar;
|
*output.offset(2_i32 as isize) = (a >> 8_i32) as u8;
|
||||||
*output.offset(3_i32 as isize) = a as libc::c_uchar;
|
*output.offset(3_i32 as isize) = a as u8;
|
||||||
*output.offset(4_i32 as isize) = (b >> 24_i32) as libc::c_uchar;
|
*output.offset(4_i32 as isize) = (b >> 24_i32) as u8;
|
||||||
*output.offset(5_i32 as isize) = (b >> 16_i32) as libc::c_uchar;
|
*output.offset(5_i32 as isize) = (b >> 16_i32) as u8;
|
||||||
*output.offset(6_i32 as isize) = (b >> 8_i32) as libc::c_uchar;
|
*output.offset(6_i32 as isize) = (b >> 8_i32) as u8;
|
||||||
*output.offset(7_i32 as isize) = b as libc::c_uchar;
|
*output.offset(7_i32 as isize) = b as u8;
|
||||||
*output.offset(8_i32 as isize) = (c >> 24_i32) as libc::c_uchar;
|
*output.offset(8_i32 as isize) = (c >> 24_i32) as u8;
|
||||||
*output.offset(9_i32 as isize) = (c >> 16_i32) as libc::c_uchar;
|
*output.offset(9_i32 as isize) = (c >> 16_i32) as u8;
|
||||||
*output.offset(10_i32 as isize) = (c >> 8_i32) as libc::c_uchar;
|
*output.offset(10_i32 as isize) = (c >> 8_i32) as u8;
|
||||||
*output.offset(11_i32 as isize) = c as libc::c_uchar;
|
*output.offset(11_i32 as isize) = c as u8;
|
||||||
*output.offset(12_i32 as isize) = (d >> 24_i32) as libc::c_uchar;
|
*output.offset(12_i32 as isize) = (d >> 24_i32) as u8;
|
||||||
*output.offset(13_i32 as isize) = (d >> 16_i32) as libc::c_uchar;
|
*output.offset(13_i32 as isize) = (d >> 16_i32) as u8;
|
||||||
*output.offset(14_i32 as isize) = (d >> 8_i32) as libc::c_uchar;
|
*output.offset(14_i32 as isize) = (d >> 8_i32) as u8;
|
||||||
*output.offset(15_i32 as isize) = d as libc::c_uchar;
|
*output.offset(15_i32 as isize) = d as u8;
|
||||||
*output.offset(16_i32 as isize) = (e >> 24_i32) as libc::c_uchar;
|
*output.offset(16_i32 as isize) = (e >> 24_i32) as u8;
|
||||||
*output.offset(17_i32 as isize) = (e >> 16_i32) as libc::c_uchar;
|
*output.offset(17_i32 as isize) = (e >> 16_i32) as u8;
|
||||||
*output.offset(18_i32 as isize) = (e >> 8_i32) as libc::c_uchar;
|
*output.offset(18_i32 as isize) = (e >> 8_i32) as u8;
|
||||||
*output.offset(19_i32 as isize) = e as libc::c_uchar;
|
*output.offset(19_i32 as isize) = e as u8;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe fn Mix(
|
unsafe fn Mix(buffer: *mut u8, bufSize: size_t, key: *const u8, keySize: size_t) {
|
||||||
buffer: *mut libc::c_uchar,
|
let mut sha1_input: [u8; 64] = [0; 64];
|
||||||
bufSize: size_t,
|
let mut sha1_result: [u8; 20] = [0; 20];
|
||||||
key: *const libc::c_uchar,
|
|
||||||
keySize: size_t,
|
|
||||||
) {
|
|
||||||
let mut sha1_input: [libc::c_uchar; 64] = [0; 64];
|
|
||||||
let mut sha1_result: [libc::c_uchar; 20] = [0; 20];
|
|
||||||
let half: size_t = bufSize.wrapping_div(2_i32 as u64);
|
let half: size_t = bufSize.wrapping_div(2_i32 as u64);
|
||||||
let mut external_counter = 0_i32;
|
let mut external_counter = 0_i32;
|
||||||
while external_counter < 4_i32 {
|
while external_counter < 4_i32 {
|
||||||
|
@ -947,18 +942,19 @@ unsafe fn Mix(
|
||||||
half as usize,
|
half as usize,
|
||||||
);
|
);
|
||||||
ptr::copy_nonoverlapping(
|
ptr::copy_nonoverlapping(
|
||||||
key as *const libc::c_void,
|
key as *const c_void,
|
||||||
sha1_input.as_mut_ptr().offset(half as isize) as *mut libc::c_void,
|
sha1_input.as_mut_ptr().offset(half as isize) as *mut c_void,
|
||||||
keySize as usize,
|
keySize as usize,
|
||||||
);
|
);
|
||||||
sha1_input[half.wrapping_add(keySize) as usize] = 0x80_i32 as libc::c_uchar;
|
sha1_input[half.wrapping_add(keySize) as usize] = 0x80_i32 as u8;
|
||||||
sha1_input[(::std::mem::size_of::<[libc::c_uchar; 64]>() as u64).wrapping_sub(1_i32 as u64)
|
sha1_input
|
||||||
as usize] = half.wrapping_add(keySize).wrapping_mul(8_i32 as u64) as libc::c_uchar;
|
[(::std::mem::size_of::<[u8; 64]>() as u64).wrapping_sub(1_i32 as u64) as usize] =
|
||||||
sha1_input[(::std::mem::size_of::<[libc::c_uchar; 64]>() as u64).wrapping_sub(2_i32 as u64)
|
half.wrapping_add(keySize).wrapping_mul(8_i32 as u64) as u8;
|
||||||
as usize] = half
|
sha1_input
|
||||||
.wrapping_add(keySize)
|
[(::std::mem::size_of::<[u8; 64]>() as u64).wrapping_sub(2_i32 as u64) as usize] =
|
||||||
|
half.wrapping_add(keySize)
|
||||||
.wrapping_mul(8_i32 as u64)
|
.wrapping_mul(8_i32 as u64)
|
||||||
.wrapping_div(0x100_i32 as u64) as libc::c_uchar;
|
.wrapping_div(0x100_i32 as u64) as u8;
|
||||||
sha1_single_block(sha1_input.as_mut_ptr(), sha1_result.as_mut_ptr());
|
sha1_single_block(sha1_input.as_mut_ptr(), sha1_result.as_mut_ptr());
|
||||||
let mut i = half & !3_i32 as u64;
|
let mut i = half & !3_i32 as u64;
|
||||||
while i < half {
|
while i < half {
|
||||||
|
@ -970,10 +966,9 @@ unsafe fn Mix(
|
||||||
}
|
}
|
||||||
i = 0_i32 as size_t;
|
i = 0_i32 as size_t;
|
||||||
while i < half {
|
while i < half {
|
||||||
let tmp: libc::c_uchar = *buffer.offset(i.wrapping_add(half) as isize);
|
let tmp: u8 = *buffer.offset(i.wrapping_add(half) as isize);
|
||||||
*buffer.offset(i.wrapping_add(half) as isize) = (*buffer.offset(i as isize) as i32
|
*buffer.offset(i.wrapping_add(half) as isize) =
|
||||||
^ sha1_result[i as usize] as i32)
|
(*buffer.offset(i as isize) as i32 ^ sha1_result[i as usize] as i32) as u8;
|
||||||
as libc::c_uchar;
|
|
||||||
*buffer.offset(i as isize) = tmp;
|
*buffer.offset(i as isize) = tmp;
|
||||||
i = i.wrapping_add(1);
|
i = i.wrapping_add(1);
|
||||||
}
|
}
|
||||||
|
@ -981,14 +976,9 @@ unsafe fn Mix(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe fn Unmix(
|
unsafe fn Unmix(buffer: *mut u8, bufSize: size_t, key: *const u8, keySize: size_t) {
|
||||||
buffer: *mut libc::c_uchar,
|
let mut sha1_input: [u8; 64] = [0; 64];
|
||||||
bufSize: size_t,
|
let mut sha1_result: [u8; 20] = [0; 20];
|
||||||
key: *const libc::c_uchar,
|
|
||||||
keySize: size_t,
|
|
||||||
) {
|
|
||||||
let mut sha1_input: [libc::c_uchar; 64] = [0; 64];
|
|
||||||
let mut sha1_result: [libc::c_uchar; 20] = [0; 20];
|
|
||||||
let half: size_t = bufSize.wrapping_div(2_i32 as u64);
|
let half: size_t = bufSize.wrapping_div(2_i32 as u64);
|
||||||
let mut external_counter = 0_i32;
|
let mut external_counter = 0_i32;
|
||||||
while external_counter < 4_i32 {
|
while external_counter < 4_i32 {
|
||||||
|
@ -1001,14 +991,15 @@ unsafe fn Unmix(
|
||||||
sha1_input.as_mut_ptr().offset(half as isize),
|
sha1_input.as_mut_ptr().offset(half as isize),
|
||||||
keySize as usize,
|
keySize as usize,
|
||||||
);
|
);
|
||||||
sha1_input[half.wrapping_add(keySize) as usize] = 0x80_i32 as libc::c_uchar;
|
sha1_input[half.wrapping_add(keySize) as usize] = 0x80_i32 as u8;
|
||||||
sha1_input[(::std::mem::size_of::<[libc::c_uchar; 64]>() as u64).wrapping_sub(1_i32 as u64)
|
sha1_input
|
||||||
as usize] = half.wrapping_add(keySize).wrapping_mul(8_i32 as u64) as libc::c_uchar;
|
[(::std::mem::size_of::<[u8; 64]>() as u64).wrapping_sub(1_i32 as u64) as usize] =
|
||||||
sha1_input[(::std::mem::size_of::<[libc::c_uchar; 64]>() as u64).wrapping_sub(2_i32 as u64)
|
half.wrapping_add(keySize).wrapping_mul(8_i32 as u64) as u8;
|
||||||
as usize] = half
|
sha1_input
|
||||||
.wrapping_add(keySize)
|
[(::std::mem::size_of::<[u8; 64]>() as u64).wrapping_sub(2_i32 as u64) as usize] =
|
||||||
|
half.wrapping_add(keySize)
|
||||||
.wrapping_mul(8_i32 as u64)
|
.wrapping_mul(8_i32 as u64)
|
||||||
.wrapping_div(0x100_i32 as u64) as libc::c_uchar;
|
.wrapping_div(0x100_i32 as u64) as u8;
|
||||||
sha1_single_block(sha1_input.as_mut_ptr(), sha1_result.as_mut_ptr());
|
sha1_single_block(sha1_input.as_mut_ptr(), sha1_result.as_mut_ptr());
|
||||||
let mut i = half & !3_i32 as u64;
|
let mut i = half & !3_i32 as u64;
|
||||||
while i < half {
|
while i < half {
|
||||||
|
@ -1020,10 +1011,9 @@ unsafe fn Unmix(
|
||||||
}
|
}
|
||||||
i = 0_i32 as size_t;
|
i = 0_i32 as size_t;
|
||||||
while i < half {
|
while i < half {
|
||||||
let tmp: libc::c_uchar = *buffer.offset(i as isize);
|
let tmp: u8 = *buffer.offset(i as isize);
|
||||||
*buffer.offset(i as isize) = (*buffer.offset(i.wrapping_add(half) as isize) as i32
|
*buffer.offset(i as isize) = (*buffer.offset(i.wrapping_add(half) as isize) as i32
|
||||||
^ sha1_result[i as usize] as i32)
|
^ sha1_result[i as usize] as i32) as u8;
|
||||||
as libc::c_uchar;
|
|
||||||
*buffer.offset(i.wrapping_add(half) as isize) = tmp;
|
*buffer.offset(i.wrapping_add(half) as isize) = tmp;
|
||||||
i = i.wrapping_add(1);
|
i = i.wrapping_add(1);
|
||||||
}
|
}
|
||||||
|
@ -1031,13 +1021,10 @@ unsafe fn Unmix(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe fn Generate(
|
unsafe fn Generate(installation_id_str: *const i8, confirmation_id: *mut i8) -> i32 {
|
||||||
installation_id_str: *const libc::c_char,
|
let mut installation_id: [u8; 19] = [0; 19];
|
||||||
confirmation_id: *mut libc::c_char,
|
|
||||||
) -> i32 {
|
|
||||||
let mut installation_id: [libc::c_uchar; 19] = [0; 19];
|
|
||||||
let mut installation_id_len: size_t = 0_i32 as size_t;
|
let mut installation_id_len: size_t = 0_i32 as size_t;
|
||||||
let mut p: *const libc::c_char = installation_id_str;
|
let mut p: *const i8 = installation_id_str;
|
||||||
let mut count: size_t = 0_i32 as size_t;
|
let mut count: size_t = 0_i32 as size_t;
|
||||||
let mut totalCount: size_t = 0_i32 as size_t;
|
let mut totalCount: size_t = 0_i32 as size_t;
|
||||||
let mut check: u32 = 0_i32 as u32;
|
let mut check: u32 = 0_i32 as u32;
|
||||||
|
@ -1073,13 +1060,13 @@ unsafe fn Generate(
|
||||||
if totalCount > 45_i32 as u64 {
|
if totalCount > 45_i32 as u64 {
|
||||||
return 2_i32;
|
return 2_i32;
|
||||||
}
|
}
|
||||||
let mut carry: libc::c_uchar = d as libc::c_uchar;
|
let mut carry: u8 = d as u8;
|
||||||
let mut i = 0_i32 as size_t;
|
let mut i = 0_i32 as size_t;
|
||||||
while i < installation_id_len {
|
while i < installation_id_len {
|
||||||
let x: u32 =
|
let x: u32 =
|
||||||
(installation_id[i as usize] as i32 * 10_i32 + carry as i32) as u32;
|
(installation_id[i as usize] as i32 * 10_i32 + carry as i32) as u32;
|
||||||
installation_id[i as usize] = (x & 0xff_i32 as u32) as libc::c_uchar;
|
installation_id[i as usize] = (x & 0xff_i32 as u32) as u8;
|
||||||
carry = (x >> 8_i32) as libc::c_uchar;
|
carry = (x >> 8_i32) as u8;
|
||||||
i = i.wrapping_add(1);
|
i = i.wrapping_add(1);
|
||||||
}
|
}
|
||||||
if carry != 0 {
|
if carry != 0 {
|
||||||
|
@ -1094,15 +1081,15 @@ unsafe fn Generate(
|
||||||
if totalCount != 41_i32 as u64 && totalCount < 45_i32 as u64 {
|
if totalCount != 41_i32 as u64 && totalCount < 45_i32 as u64 {
|
||||||
return 1_i32;
|
return 1_i32;
|
||||||
}
|
}
|
||||||
while installation_id_len < ::std::mem::size_of::<[libc::c_uchar; 19]>() as u64 {
|
while installation_id_len < ::std::mem::size_of::<[u8; 19]>() as u64 {
|
||||||
installation_id[installation_id_len as usize] = 0_i32 as libc::c_uchar;
|
installation_id[installation_id_len as usize] = 0_i32 as u8;
|
||||||
installation_id_len = installation_id_len.wrapping_add(1);
|
installation_id_len = installation_id_len.wrapping_add(1);
|
||||||
}
|
}
|
||||||
static mut iid_key: [libc::c_uchar; 4] = [
|
static mut iid_key: [u8; 4] = [
|
||||||
0x6a_i32 as libc::c_uchar,
|
0x6a_i32 as u8,
|
||||||
0xc8_i32 as libc::c_uchar,
|
0xc8_i32 as u8,
|
||||||
0x5e_i32 as libc::c_uchar,
|
0x5e_i32 as u8,
|
||||||
0xd4_i32 as libc::c_uchar,
|
0xd4_i32 as u8,
|
||||||
];
|
];
|
||||||
Unmix(
|
Unmix(
|
||||||
installation_id.as_mut_ptr(),
|
installation_id.as_mut_ptr(),
|
||||||
|
@ -1124,8 +1111,8 @@ unsafe fn Generate(
|
||||||
KeySHA1: 0,
|
KeySHA1: 0,
|
||||||
};
|
};
|
||||||
ptr::copy_nonoverlapping(
|
ptr::copy_nonoverlapping(
|
||||||
installation_id.as_mut_ptr() as *const libc::c_void,
|
installation_id.as_mut_ptr() as *const c_void,
|
||||||
&mut parsed as *mut C2RustUnnamed_4 as *mut libc::c_void,
|
&mut parsed as *mut C2RustUnnamed_4 as *mut c_void,
|
||||||
std::mem::size_of::<C2RustUnnamed_4>(),
|
std::mem::size_of::<C2RustUnnamed_4>(),
|
||||||
);
|
);
|
||||||
let productId1: u32 = (parsed.ProductIDLow & ((1_i32 << 17_i32) - 1_i32) as u64) as u32;
|
let productId1: u32 = (parsed.ProductIDLow & ((1_i32 << 17_i32) - 1_i32) as u64) as u32;
|
||||||
|
@ -1145,11 +1132,11 @@ unsafe fn Generate(
|
||||||
{
|
{
|
||||||
return 5_i32;
|
return 5_i32;
|
||||||
}
|
}
|
||||||
let mut keybuf: [libc::c_uchar; 16] = [0; 16];
|
let mut keybuf: [u8; 16] = [0; 16];
|
||||||
let mut hardware_id = parsed.HardwareID;
|
let mut hardware_id = parsed.HardwareID;
|
||||||
ptr::copy_nonoverlapping(
|
ptr::copy_nonoverlapping(
|
||||||
&mut hardware_id as *mut u64 as *const libc::c_void,
|
&mut hardware_id as *mut u64 as *const c_void,
|
||||||
keybuf.as_mut_ptr() as *mut libc::c_void,
|
keybuf.as_mut_ptr() as *mut c_void,
|
||||||
8,
|
8,
|
||||||
);
|
);
|
||||||
let mut productIdMixed: uint64_t = (productId1 as uint64_t) << 41_i32
|
let mut productIdMixed: uint64_t = (productId1 as uint64_t) << 41_i32
|
||||||
|
@ -1157,15 +1144,15 @@ unsafe fn Generate(
|
||||||
| (productId3 as uint64_t) << 17_i32
|
| (productId3 as uint64_t) << 17_i32
|
||||||
| productId4 as u64;
|
| productId4 as u64;
|
||||||
ptr::copy_nonoverlapping(
|
ptr::copy_nonoverlapping(
|
||||||
&mut productIdMixed as *mut u64 as *const libc::c_void,
|
&mut productIdMixed as *mut u64 as *const c_void,
|
||||||
keybuf.as_mut_ptr().offset(8) as *mut libc::c_void,
|
keybuf.as_mut_ptr().offset(8) as *mut c_void,
|
||||||
8,
|
8,
|
||||||
);
|
);
|
||||||
let mut d_0: TDivisor = TDivisor {
|
let mut d_0: TDivisor = TDivisor {
|
||||||
u: [0; 2],
|
u: [0; 2],
|
||||||
v: [0; 2],
|
v: [0; 2],
|
||||||
};
|
};
|
||||||
let mut attempt = 0_i32 as libc::c_uchar;
|
let mut attempt = 0_i32 as u8;
|
||||||
while attempt as i32 <= 0x80_i32 {
|
while attempt as i32 <= 0x80_i32 {
|
||||||
let mut u: C2RustUnnamed_3 = C2RustUnnamed_3 { buffer: [0; 14] };
|
let mut u: C2RustUnnamed_3 = C2RustUnnamed_3 { buffer: [0; 14] };
|
||||||
u.c2rust_unnamed.lo = 0_i32 as uint64_t;
|
u.c2rust_unnamed.lo = 0_i32 as uint64_t;
|
||||||
|
@ -1284,7 +1271,7 @@ unsafe fn Generate(
|
||||||
as uint64_t as uint64_t;
|
as uint64_t as uint64_t;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let mut decimal: [libc::c_uchar; 35] = [0; 35];
|
let mut decimal: [u8; 35] = [0; 35];
|
||||||
let mut i = 0_i32 as size_t;
|
let mut i = 0_i32 as size_t;
|
||||||
while i < 35_i32 as u64 {
|
while i < 35_i32 as u64 {
|
||||||
let c: u32 = (e.c2rust_unnamed_0.encoded[3_i32 as usize]).wrapping_rem(10_i32 as u32);
|
let c: u32 = (e.c2rust_unnamed_0.encoded[3_i32 as usize]).wrapping_rem(10_i32 as u32);
|
||||||
|
@ -1309,42 +1296,37 @@ unsafe fn Generate(
|
||||||
e.c2rust_unnamed_0.encoded[0_i32 as usize] =
|
e.c2rust_unnamed_0.encoded[0_i32 as usize] =
|
||||||
((c3 as uint64_t) << 32_i32 | e.c2rust_unnamed_0.encoded[0_i32 as usize] as u64)
|
((c3 as uint64_t) << 32_i32 | e.c2rust_unnamed_0.encoded[0_i32 as usize] as u64)
|
||||||
.wrapping_div(10_i32 as u64) as uint32_t;
|
.wrapping_div(10_i32 as u64) as uint32_t;
|
||||||
decimal[(34_i32 as u64).wrapping_sub(i) as usize] = c4 as libc::c_uchar;
|
decimal[(34_i32 as u64).wrapping_sub(i) as usize] = c4 as u8;
|
||||||
i = i.wrapping_add(1);
|
i = i.wrapping_add(1);
|
||||||
}
|
}
|
||||||
let mut q: *mut libc::c_char = confirmation_id;
|
let mut q: *mut i8 = confirmation_id;
|
||||||
i = 0_i32 as size_t;
|
i = 0_i32 as size_t;
|
||||||
while i < 7_i32 as u64 {
|
while i < 7_i32 as u64 {
|
||||||
if i != 0 {
|
if i != 0 {
|
||||||
let fresh2 = q;
|
let fresh2 = q;
|
||||||
q = q.offset(1);
|
q = q.offset(1);
|
||||||
*fresh2 = '-' as i32 as libc::c_char;
|
*fresh2 = '-' as i32 as i8;
|
||||||
}
|
}
|
||||||
let p_0: *mut libc::c_uchar = decimal
|
let p_0: *mut u8 = decimal
|
||||||
.as_mut_ptr()
|
.as_mut_ptr()
|
||||||
.offset(i.wrapping_mul(5_i32 as u64) as isize);
|
.offset(i.wrapping_mul(5_i32 as u64) as isize);
|
||||||
*q.offset(0_i32 as isize) =
|
*q.offset(0_i32 as isize) = (*p_0.offset(0_i32 as isize) as i32 + '0' as i32) as i8;
|
||||||
(*p_0.offset(0_i32 as isize) as i32 + '0' as i32) as libc::c_char;
|
*q.offset(1_i32 as isize) = (*p_0.offset(1_i32 as isize) as i32 + '0' as i32) as i8;
|
||||||
*q.offset(1_i32 as isize) =
|
*q.offset(2_i32 as isize) = (*p_0.offset(2_i32 as isize) as i32 + '0' as i32) as i8;
|
||||||
(*p_0.offset(1_i32 as isize) as i32 + '0' as i32) as libc::c_char;
|
*q.offset(3_i32 as isize) = (*p_0.offset(3_i32 as isize) as i32 + '0' as i32) as i8;
|
||||||
*q.offset(2_i32 as isize) =
|
*q.offset(4_i32 as isize) = (*p_0.offset(4_i32 as isize) as i32 + '0' as i32) as i8;
|
||||||
(*p_0.offset(2_i32 as isize) as i32 + '0' as i32) as libc::c_char;
|
|
||||||
*q.offset(3_i32 as isize) =
|
|
||||||
(*p_0.offset(3_i32 as isize) as i32 + '0' as i32) as libc::c_char;
|
|
||||||
*q.offset(4_i32 as isize) =
|
|
||||||
(*p_0.offset(4_i32 as isize) as i32 + '0' as i32) as libc::c_char;
|
|
||||||
*q.offset(5_i32 as isize) = ((*p_0.offset(0_i32 as isize) as i32
|
*q.offset(5_i32 as isize) = ((*p_0.offset(0_i32 as isize) as i32
|
||||||
+ *p_0.offset(1_i32 as isize) as i32 * 2_i32
|
+ *p_0.offset(1_i32 as isize) as i32 * 2_i32
|
||||||
+ *p_0.offset(2_i32 as isize) as i32
|
+ *p_0.offset(2_i32 as isize) as i32
|
||||||
+ *p_0.offset(3_i32 as isize) as i32 * 2_i32
|
+ *p_0.offset(3_i32 as isize) as i32 * 2_i32
|
||||||
+ *p_0.offset(4_i32 as isize) as i32)
|
+ *p_0.offset(4_i32 as isize) as i32)
|
||||||
% 7_i32
|
% 7_i32
|
||||||
+ '0' as i32) as libc::c_char;
|
+ '0' as i32) as i8;
|
||||||
q = q.offset(6_i32 as isize);
|
q = q.offset(6_i32 as isize);
|
||||||
i = i.wrapping_add(1);
|
i = i.wrapping_add(1);
|
||||||
}
|
}
|
||||||
let fresh3 = q.offset(1);
|
let fresh3 = q.offset(1);
|
||||||
*fresh3 = 0_i32 as libc::c_char;
|
*fresh3 = 0_i32 as i8;
|
||||||
0_i32
|
0_i32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1368,7 +1350,7 @@ pub fn generate(installation_id: &str) -> Result<String, ConfirmationIdError> {
|
||||||
unsafe {
|
unsafe {
|
||||||
let inst_id = CString::new(installation_id).unwrap();
|
let inst_id = CString::new(installation_id).unwrap();
|
||||||
let conf_id = [0u8; 49];
|
let conf_id = [0u8; 49];
|
||||||
let result = Generate(inst_id.as_ptr(), conf_id.as_ptr() as *mut libc::c_char);
|
let result = Generate(inst_id.as_ptr(), conf_id.as_ptr() as *mut i8);
|
||||||
match result {
|
match result {
|
||||||
0 => {}
|
0 => {}
|
||||||
1 => return Err(ConfirmationIdError::TooShort),
|
1 => return Err(ConfirmationIdError::TooShort),
|
||||||
|
@ -1379,7 +1361,7 @@ pub fn generate(installation_id: &str) -> Result<String, ConfirmationIdError> {
|
||||||
6 => return Err(ConfirmationIdError::Unlucky),
|
6 => return Err(ConfirmationIdError::Unlucky),
|
||||||
_ => panic!("Unknown error code: {}", result),
|
_ => panic!("Unknown error code: {}", result),
|
||||||
}
|
}
|
||||||
Ok(CStr::from_ptr(conf_id.as_ptr() as *const libc::c_char)
|
Ok(CStr::from_ptr(conf_id.as_ptr() as *const i8)
|
||||||
.to_str()
|
.to_str()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.to_string())
|
.to_string())
|
||||||
|
|
Loading…
Add table
Reference in a new issue