libgatekeeper_sys/
ffi.rs

1#![allow(non_camel_case_types)]
2
3use std::os::raw::{c_char, c_int, c_void};
4
5pub type context_t = c_void;
6pub type mifare_t = c_void;
7pub type device_t = c_void;
8pub type realm_t = c_void;
9#[repr(u32)]
10pub enum BaudRate {
11    NBR_UNDEFINED = 0,
12    NBR_106 = 1,
13    NBR_212 = 2,
14    NBR_424 = 3,
15    NBR_847 = 4,
16}
17#[derive(Copy, Clone)]
18#[repr(u32)]
19pub enum ModulationType {
20    NMT_ISO14443A = 1,
21    NMT_JEWEL = 2,
22    NMT_ISO14443B = 3,
23    NMT_ISO14443BI = 4,
24    NMT_ISO14443B2SR = 5,
25    NMT_ISO14443B2CT = 6,
26    NMT_FELICA = 7,
27    NMT_DEP = 8,
28}
29#[repr(C)]
30pub struct Modulation {
31    pub nmt: ModulationType,
32    pub nbr: BaudRate,
33}
34pub type modulation_t = Modulation;
35#[repr(C)]
36//#[derive(Copy, Clone)]
37pub struct Union_Unnamed11 {
38    pub _bindgen_data_: [u8; 283usize],
39}
40pub type nfc_target_info = Union_Unnamed11;
41#[repr(C)]
42pub struct NfcTarget {
43    pub nti: nfc_target_info,
44    pub nm: modulation_t,
45}
46pub type nfc_target = NfcTarget;
47#[derive(Copy, Clone)]
48#[repr(u32)]
49pub enum NfcProperty {
50    NP_TIMEOUT_COMMAND = 0,
51    NP_TIMEOUT_ATR = 1,
52    NP_TIMEOUT_COM = 2,
53    NP_HANDLE_CRC = 3,
54    NP_HANDLE_PARITY = 4,
55    NP_ACTIVATE_FIELD = 5,
56    NP_ACTIVATE_CRYPTO1 = 6,
57    NP_INFINITE_SELECT = 7,
58    NP_ACCEPT_INVALID_FRAMES = 8,
59    NP_ACCEPT_MULTIPLE_FRAMES = 9,
60    NP_AUTO_ISO14443_4 = 10,
61    NP_EASY_FRAMING = 11,
62    NP_FORCE_ISO14443_A = 12,
63    NP_FORCE_ISO14443_B = 13,
64    NP_FORCE_SPEED_106 = 14,
65}
66pub type nfc_property = NfcProperty;
67
68#[link(name = "gatekeeper")]
69extern "C" {
70    pub fn realm_create(
71        slot: u8,
72        name: *const c_char,
73        association_id: *const c_char,
74        auth_key: *const c_char,
75        read_key: *const c_char,
76        update_key: *const c_char,
77        public_key: *const c_char,
78        private_key: *const c_char,
79    ) -> *mut realm_t;
80
81    pub fn realm_free(realm: *mut realm_t);
82
83    pub fn format_tag(tag: *mut mifare_t, uid: *const c_char, system_secret: *const c_char) -> i32;
84
85    pub fn issue_tag(
86        tag: *mut mifare_t,
87        system_secret: *const c_char,
88        uid: *const c_char,
89        realms: *mut *mut c_void,
90        num_realms: usize,
91    ) -> i32;
92
93    pub fn authenticate_tag(
94        tag: *mut mifare_t,
95        realm: *mut realm_t,
96        association_id: *mut u8,
97    ) -> i32;
98}
99
100#[link(name = "nfc")]
101extern "C" {
102    pub fn nfc_init(context: *mut *mut context_t);
103    pub fn nfc_list_devices(
104        context: *mut context_t,
105        devices: *mut *const c_char,
106        device_count: usize,
107    ) -> u32;
108    pub fn nfc_open(context: *mut context_t, device_id: *const c_char) -> *mut device_t;
109    pub fn nfc_perror(device: *const device_t, message: *const c_char);
110    pub fn nfc_device_get_last_error(device: *const device_t) -> c_int;
111    pub fn nfc_initiator_init(device: *mut device_t) -> c_int;
112    pub fn nfc_close(context: *mut device_t);
113    pub fn nfc_exit(context: *mut context_t);
114    pub fn nfc_initiator_transceive_bytes(
115        device: *mut device_t,
116        bytes: *const u8,
117        byte_count: usize,
118        rx_bytes: *const u8,
119        rx_byte_count: usize,
120        timeout: c_int,
121    ) -> c_int;
122    pub fn nfc_initiator_select_passive_target(
123        device: *mut device_t,
124        nfc_modulation: modulation_t,
125        pbt_init_data: *const u8,
126        sz_init_data: usize,
127        pnt: *mut nfc_target,
128    ) -> c_int;
129    pub fn nfc_initiator_deselect_target(device: *mut device_t) -> c_int;
130    pub fn nfc_device_set_property_bool(
131        pnd: *mut device_t,
132        property: nfc_property,
133        bEnable: u8,
134    ) -> c_int;
135}
136
137#[link(name = "freefare")]
138extern "C" {
139    pub fn freefare_get_tags(device: *const device_t) -> *mut *mut mifare_t;
140    pub fn freefare_get_tag_type(tag: *mut mifare_t) -> i8;
141    pub fn freefare_get_tag_uid(tag: *mut mifare_t) -> *mut c_char;
142    pub fn freefare_get_tag_friendly_name(tag: *mut mifare_t) -> *const c_char;
143    pub fn freefare_free_tags(tags: *mut *mut mifare_t);
144    pub fn free(data: *mut c_void);
145}