SEFile
Userspace drivers to manage a secure filesystem
 All Data Structures Files Functions Variables Typedefs Enumerator Macros Groups
L1.h
1 #pragma once
2 #include "L0.h"
3 #include "se3c1def.h"
4 
5 
6 /* defines */
7 #define SE3_REQ_CHALLENGE_SIZE (96+16)
8 #define SE3_REQ_CHALLENGE_IV_OFFSET (0)
9 #define SE3_REQ_CHALLENGE_TOKEN_OFFSET (16)
10 #define SE3_REQ_CHALLENGE_CC_OFFSET (32)
11 #define SE3_REQ_CHALLENGE_CC2_OFFSET (64)
12 #define SE3_REQ_CHALLENGE_ACCESS_OFFSET (96)
13 
14 #define SE3_RESP_CHALLENGE_SC_OFFSET (32)
15 #define SE3_RESP_LOGIN_TOKEN_OFFSET (32)
16 
17 /* END - defines */
18 
19 
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 /* struct */
26 typedef struct se3_session_ {
27  se3_device device;
28  uint8_t token[SE3_L1_TOKEN_SIZE];
29  uint8_t key[SE3_L1_KEY_SIZE];
30  uint8_t buf[SE3_COMM_N * SE3_COMM_BLOCK];
31  bool locked;
32  bool logged_in;
33  uint32_t timeout;
34  se3_file hfile;
35  se3_payload_cryptoctx cryptoctx;
36  bool cryptoctx_initialized;
37  // TODO: Add flag for type of user logged (see set_{admin,user}_PIN) or change type for logged_in
38 } se3_session;
39 
40 
41 typedef struct se3_key_ {
42  uint32_t id;
43  uint32_t validity;
44  uint16_t data_size;
45  uint16_t name_size;
46  uint8_t* data;
47  uint8_t name[SE3_KEY_NAME_MAX];
48 } se3_key;
49 
50 typedef struct se3_algo_ {
51  uint8_t name[SE3_CMD1_CRYPTO_ALGOINFO_NAME_SIZE];
52  uint16_t type;
53  uint16_t block_size;
54  uint16_t key_size;
55 } se3_algo;
56 
57 
58 /* END - struct */
59 
77 uint16_t L1_login(se3_session* s, se3_device* dev, const uint8_t* pin, uint16_t access);
87 uint16_t L1_set_admin_PIN(se3_session* s, uint8_t* pin);
97 uint16_t L1_set_user_PIN(se3_session* s, uint8_t* pin);
109 uint16_t L1_logout(se3_session* s);
121 uint16_t L1_key_list(se3_session* s, uint16_t skip, uint16_t max_keys, se3_key* key_array, uint16_t* count);
131 uint16_t L1_key_edit(se3_session* s, uint16_t op, se3_key* k);
132 
133 bool L1_find_key(se3_session* s, uint32_t key_id);
134 
135 uint16_t L1_crypto_init(se3_session* s, uint16_t algorithm, uint16_t mode, uint32_t key_id, uint32_t* sess_id);
136 uint16_t L1_crypto_update(se3_session* s, uint32_t sess_id, uint16_t flags, uint16_t data1_len, uint8_t* data1, uint16_t data2_len, uint8_t* data2, uint16_t* dataout_len, uint8_t* data_out);
137 
138 uint16_t L1_crypto_set_time(se3_session* s, uint32_t devtime);
139 
156 uint16_t L1_encrypt(se3_session* s, uint16_t algorithm, uint16_t mode, uint32_t key_id, size_t datain_len, int8_t* data_in, size_t* dataout_len, uint8_t* data_out);
173 uint16_t L1_decrypt(se3_session* s, uint16_t algorithm, uint16_t mode, uint32_t key_id, size_t datain_len, int8_t* data_in, size_t* dataout_len, uint8_t* data_out);
187 uint16_t L1_digest(se3_session* s, uint16_t algorithm, size_t datain_len, int8_t* data_in, size_t* dataout_len, uint8_t* data_out);
201 uint16_t L1_get_algorithms(se3_session* s, uint16_t skip, uint16_t max_algorithms, se3_algo* algorithms_array, uint16_t* count);
202 
203 
204 #ifdef __cplusplus
205 }
206 #endif
This file contains defines to be used both for L1 and L0 functions.
Definition: L1.h:26
Definition: se3_common.h:24
Definition: se3comm.h:37
Definition: L1.h:41
Definition: L0.h:19
Definition: L1.h:50