1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#[repr(C)]
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum FuriHalCryptoKeyType {
Master,
Simple,
Encrypted,
}
#[repr(C)]
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum FuriHalCryptoKeySize {
KeySize128,
KeySize256,
}
#[repr(C)]
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct FuriHalCryptoKey {
key_type: FuriHalCryptoKeyType,
size: FuriHalCryptoKeySize,
data: *mut u8,
}
extern "C" {
#[link_name = "furi_hal_crypto_decrypt"]
pub fn decrypt(input: *const u8, output: *mut u8, size: usize) -> bool;
#[link_name = "furi_hal_crypto_encrypt"]
pub fn encrypt(input: *const u8, output: *mut u8, size: usize) -> bool;
#[link_name = "furi_hal_crypto_store_add_key"]
pub fn store_add_key(key: *mut FuriHalCryptoKey, slot: *mut u8) -> bool;
#[link_name = "furi_hal_crypto_store_load_key"]
pub fn store_load_key(slot: u8, iv: *const u8) -> bool;
#[link_name = "furi_hal_crypto_store_unload_key"]
pub fn store_unload_key(slot: u8) -> bool;
#[link_name = "furi_hal_crypto_verify_enclave"]
pub fn verify_enclave(keys_nb: *mut u8, valid_keys_nb: *mut u8) -> bool;
#[link_name = "furi_hal_crypto_verify_key"]
pub fn verify_key(key_slot: u8) -> bool;
}