confid: Remove more unsafe from generate
This commit is contained in:
parent
3070732ab5
commit
c696803702
2 changed files with 23 additions and 38 deletions
|
@ -1,8 +1,4 @@
|
|||
use std::{
|
||||
ffi::c_void,
|
||||
mem::{size_of, swap},
|
||||
ptr,
|
||||
};
|
||||
use std::mem::{size_of, swap};
|
||||
|
||||
#[derive(Copy, Clone)]
|
||||
#[repr(C)]
|
||||
|
@ -961,21 +957,12 @@ pub unsafe fn generate(installation_id_str: &[u8], confirmation_id: &mut [u8]) -
|
|||
return 5_i32;
|
||||
}
|
||||
let mut keybuf: [u8; 16] = [0; 16];
|
||||
let mut hardware_id = parsed.hardware_id;
|
||||
ptr::copy_nonoverlapping(
|
||||
&mut hardware_id as *mut u64 as *const c_void,
|
||||
keybuf.as_mut_ptr() as *mut c_void,
|
||||
8,
|
||||
);
|
||||
let mut product_id_mixed: u64 = (product_id_1 as u64) << 41_i32
|
||||
keybuf[..8].copy_from_slice(&parsed.hardware_id.to_le_bytes()[..8]);
|
||||
let product_id_mixed: u64 = (product_id_1 as u64) << 41_i32
|
||||
| (product_id_2 as u64) << 58_i32
|
||||
| (product_id_3 as u64) << 17_i32
|
||||
| product_id_4 as u64;
|
||||
ptr::copy_nonoverlapping(
|
||||
&mut product_id_mixed as *mut u64 as *const c_void,
|
||||
keybuf.as_mut_ptr().offset(8) as *mut c_void,
|
||||
8,
|
||||
);
|
||||
keybuf[8..16].copy_from_slice(&product_id_mixed.to_le_bytes()[..8]);
|
||||
let mut d_0: TDivisor = TDivisor {
|
||||
u: [0; 2],
|
||||
v: [0; 2],
|
||||
|
@ -1108,31 +1095,29 @@ pub unsafe fn generate(installation_id_str: &[u8], confirmation_id: &mut [u8]) -
|
|||
decimal[34_usize.wrapping_sub(i)] = c4 as u8;
|
||||
i = i.wrapping_add(1);
|
||||
}
|
||||
let mut q: *mut u8 = confirmation_id.as_mut_ptr();
|
||||
i = 0_i32 as usize;
|
||||
let q = confirmation_id;
|
||||
let mut i: usize = 0;
|
||||
let mut q_i = 0;
|
||||
while i < 7 {
|
||||
if i != 0 {
|
||||
let fresh2 = q;
|
||||
q = q.offset(1);
|
||||
*fresh2 = '-' as u8;
|
||||
q[q_i] = b'-';
|
||||
q_i += 1;
|
||||
}
|
||||
let p_0: *mut u8 = decimal.as_mut_ptr().add(i.wrapping_mul(5));
|
||||
*q.offset(0_i32 as isize) = (*p_0.offset(0_i32 as isize) as i32 + '0' as i32) as u8;
|
||||
*q.offset(1_i32 as isize) = (*p_0.offset(1_i32 as isize) as i32 + '0' as i32) as u8;
|
||||
*q.offset(2_i32 as isize) = (*p_0.offset(2_i32 as isize) as i32 + '0' as i32) as u8;
|
||||
*q.offset(3_i32 as isize) = (*p_0.offset(3_i32 as isize) as i32 + '0' as i32) as u8;
|
||||
*q.offset(4_i32 as isize) = (*p_0.offset(4_i32 as isize) as i32 + '0' as i32) as u8;
|
||||
*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(2_i32 as isize) as i32
|
||||
+ *p_0.offset(3_i32 as isize) as i32 * 2_i32
|
||||
+ *p_0.offset(4_i32 as isize) as i32)
|
||||
let p_0: &mut [u8] = &mut decimal[i.wrapping_mul(5)..];
|
||||
q[q_i] = (p_0[0] as i32 + '0' as i32) as u8;
|
||||
q[q_i + 1] = (p_0[1] as i32 + '0' as i32) as u8;
|
||||
q[q_i + 2] = (p_0[2] as i32 + '0' as i32) as u8;
|
||||
q[q_i + 3] = (p_0[3] as i32 + '0' as i32) as u8;
|
||||
q[q_i + 4] = (p_0[4] as i32 + '0' as i32) as u8;
|
||||
q[q_i + 5] = ((p_0[0] as i32
|
||||
+ p_0[1] as i32 * 2_i32
|
||||
+ p_0[2] as i32
|
||||
+ p_0[3] as i32 * 2_i32
|
||||
+ p_0[4] as i32)
|
||||
% 7_i32
|
||||
+ '0' as i32) as u8;
|
||||
q = q.offset(6_i32 as isize);
|
||||
q_i = q_i.wrapping_add(6);
|
||||
i = i.wrapping_add(1);
|
||||
}
|
||||
let fresh3 = q.offset(1);
|
||||
*fresh3 = 0_i32 as u8;
|
||||
0_i32
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ pub fn generate(installation_id: &str) -> Result<String, ConfirmationIdError> {
|
|||
return Err(ConfirmationIdError::TooLarge);
|
||||
}
|
||||
let inst_id = installation_id.as_bytes();
|
||||
let mut conf_id = [0u8; 49];
|
||||
let mut conf_id = [0u8; 48];
|
||||
let result = unsafe { black_box::generate(inst_id, &mut conf_id) };
|
||||
match result {
|
||||
0 => {}
|
||||
|
@ -38,7 +38,7 @@ pub fn generate(installation_id: &str) -> Result<String, ConfirmationIdError> {
|
|||
6 => return Err(ConfirmationIdError::Unlucky),
|
||||
_ => panic!("Unknown error code: {}", result),
|
||||
}
|
||||
Ok(String::from_utf8_lossy(&conf_id[..48]).into())
|
||||
Ok(String::from_utf8_lossy(&conf_id).into())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
|
Loading…
Add table
Reference in a new issue