1pub const LLVM_BLAKE3_VERSION_STRING: &str = "1.3.1";
5pub const LLVM_BLAKE3_KEY_LEN: usize = 32;
6pub const LLVM_BLAKE3_OUT_LEN: usize = 32;
7pub const LLVM_BLAKE3_BLOCK_LEN: usize = 64;
8pub const LLVM_BLAKE3_CHUNK_LEN: usize = 1024;
9pub const LLVM_BLAKE3_MAX_DEPTH: usize = 54;
10
11#[repr(C)]
14struct llvm_blake3_chunk_state {
15 cv: [u32; 8],
16 chunk_counter: u64,
17 buf: [u8; LLVM_BLAKE3_BLOCK_LEN],
18 buf_len: u8,
19 blocks_compressed: u8,
20 flags: u8,
21}
22
23#[repr(C)]
24pub struct llvm_blake3_hasher {
25 key: [u32; 8],
26 chunk: llvm_blake3_chunk_state,
27 cv_stack_len: u8,
28 cv_stack: [u8; (LLVM_BLAKE3_MAX_DEPTH + 1) * LLVM_BLAKE3_OUT_LEN],
34}
35
36extern "C" {
37 pub fn llvm_blake3_version() -> *const ::libc::c_char;
38 pub fn llvm_blake3_hasher_init(hasher: *mut llvm_blake3_hasher);
39 pub fn llvm_blake3_hasher_init_keyed(hasher: *mut llvm_blake3_hasher, key: *const u8);
40 pub fn llvm_blake3_hasher_init_derive_key(
41 hasher: *mut llvm_blake3_hasher,
42 context: *const ::libc::c_char,
43 );
44 pub fn llvm_blake3_hasher_init_derive_key_raw(
45 hasher: *mut llvm_blake3_hasher,
46 context: *const ::libc::c_char,
47 context_len: usize,
48 );
49 pub fn llvm_blake3_hasher_update(
50 hasher: *mut llvm_blake3_hasher,
51 input: *const ::libc::c_void,
52 input_len: usize,
53 );
54 pub fn llvm_blake3_hasher_finalize(
55 hasher: *mut llvm_blake3_hasher,
56 out: *mut u8,
57 out_len: usize,
58 );
59 pub fn llvm_blake3_hasher_finalize_seek(
60 hasher: *mut llvm_blake3_hasher,
61 seek: u64,
62 out: *mut u8,
63 out_len: usize,
64 );
65 pub fn llvm_blake3_hasher_reset(hasher: *mut llvm_blake3_hasher);
66}