Skip to content

Commit

Permalink
examples/fake-signing: Fix printing success even when mismatched
Browse files Browse the repository at this point in the history
And some other cleanups.
  • Loading branch information
MarijnS95 committed Jan 27, 2022
1 parent 518eb2d commit 7ff4869
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 32 deletions.
15 changes: 4 additions & 11 deletions examples/validate-fake-signing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,9 @@ pub struct MinimalHeader {
}

fn get_digest(buffer: &[u8]) -> [u32; 4] {
let buffer_ptr: *const u8 = buffer.as_ptr();
let header_ptr: *const MinimalHeader = buffer_ptr as *const _;
let header_ref: &MinimalHeader = unsafe { &*header_ptr };
let digest: [u32; 4] = [
header_ref.hash_digest[0],
header_ref.hash_digest[1],
header_ref.hash_digest[2],
header_ref.hash_digest[3],
];
digest
let header_ptr = buffer.as_ptr().cast::<MinimalHeader>();
let header_ref = unsafe { &*header_ptr };
header_ref.hash_digest
}

use hassle_rs::{compile_hlsl, fake_sign_dxil_in_place, validate_dxil};
Expand Down Expand Up @@ -49,7 +42,7 @@ fn main() {

if fake_signed_digest != with_digest {
println!("---- Mismatch in file {} ----", idx);
all_matches &= true;
all_matches &= false;
}
}

Expand Down
23 changes: 6 additions & 17 deletions examples/validate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,26 +10,15 @@ pub struct MinimalHeader {
// zero_digest & get_digest from https://github.com/gwihlidal/dxil-signing/blob/master/rust/src/main.rs

fn zero_digest(buffer: &mut [u8]) {
let buffer_ptr: *mut u8 = buffer.as_mut_ptr();
let header_ptr: *mut MinimalHeader = buffer_ptr as *mut _;
let header_mut: &mut MinimalHeader = unsafe { &mut *header_ptr };
header_mut.hash_digest[0] = 0x0;
header_mut.hash_digest[1] = 0x0;
header_mut.hash_digest[2] = 0x0;
header_mut.hash_digest[3] = 0x0;
let header_ptr = buffer.as_mut_ptr().cast::<MinimalHeader>();
let header_ref = unsafe { &mut *header_ptr };
header_ref.hash_digest = [0; 4];
}

fn get_digest(buffer: &[u8]) -> [u32; 4] {
let buffer_ptr: *const u8 = buffer.as_ptr();
let header_ptr: *const MinimalHeader = buffer_ptr as *const _;
let header_ref: &MinimalHeader = unsafe { &*header_ptr };
let digest: [u32; 4] = [
header_ref.hash_digest[0],
header_ref.hash_digest[1],
header_ref.hash_digest[2],
header_ref.hash_digest[3],
];
digest
let header_ptr = buffer.as_ptr().cast::<MinimalHeader>();
let header_ref = unsafe { &*header_ptr };
header_ref.hash_digest
}

fn main() {
Expand Down
8 changes: 4 additions & 4 deletions src/fake_sign/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,17 @@ const DXIL_HEADER_CONTAINER_VERSION_OFFSET: usize = 20;
const DXBC_FOURCC: u32 = u32::from_le_bytes([b'D', b'X', b'B', b'C']);

fn read_fourcc(dxil: &[u8]) -> u32 {
let header: *const FileHeader = dxil.as_ptr() as *const _;
let header: *const FileHeader = dxil.as_ptr().cast();
unsafe { (*header).fourcc }
}

fn read_file_length(dxil: &[u8]) -> u32 {
let header: *const FileHeader = dxil.as_ptr() as *const _;
let header: *const FileHeader = dxil.as_ptr().cast();
unsafe { (*header).file_length }
}

fn write_hash_value(dxil: &mut [u8], state: [u32; 4]) {
let header: *mut FileHeader = dxil.as_mut_ptr() as *mut _;
let header: *mut FileHeader = dxil.as_mut_ptr().cast();

unsafe {
(*header).hash_value.copy_from_slice(&state);
Expand All @@ -34,7 +34,7 @@ fn write_hash_value(dxil: &mut [u8], state: [u32; 4]) {
/// Helper function for signing DXIL binary blobs when
/// `dxil.dll` might not be available (such as on Linux based
/// platforms).
/// This essentially performs the same functionality as `validate_dxil`
/// This essentially performs the same functionality as [`crate::validate_dxil()`]
/// but in a more cross platform way.
///
/// Ported from <https://github.com/baldurk/renderdoc/blob/v1.x/renderdoc/driver/shaders/dxbc/dxbc_container.cpp#L832>
Expand Down

0 comments on commit 7ff4869

Please sign in to comment.