WE310F5  39.00.000
m2mb_crypto.h
Go to the documentation of this file.
1 /*===============================================================================================*/
2 /* >>> Copyright (C) Telit Communications S.p.A. Italy All Rights Reserved. <<< */
26 /*
27  * m2mb_crypto.h
28  *
29  * Created on: Apr 3, 2018
30  * Author: BurhanuddinLo
31  */
32 
33 #ifndef GEPS_SRC_CRYPTO_M2MB_CRYPTO_H_
34 #define GEPS_SRC_CRYPTO_M2MB_CRYPTO_H_
35 
40 /*-----------------------------------------------------------------------------------------------*/
41 
55 /*-----------------------------------------------------------------------------------------------*/
56 
61 /*-----------------------------------------------------------------------------------------------*/
62 
63 /* Global declarations ==========================================================================*/
64 
65 #define M2MB_CRYPTO_OBJ_TYPE_AES_E 0xA0000010
66 
67 #define M2MB_CRYPTO_OBJ_TYPE_HMAC_MD5_E 0xA0000001
68 
69 #define M2MB_CRYPTO_OBJ_TYPE_HMAC_SHA1_E 0xA0000002
70 
71 #define M2MB_CRYPTO_OBJ_TYPE_HMAC_SHA224_E 0xA0000003
72 
73 #define M2MB_CRYPTO_OBJ_TYPE_HMAC_SHA256_E 0xA0000004
74 
75 #define M2MB_CRYPTO_OBJ_TYPE_HMAC_SHA384_E 0xA0000005
76 
77 #define M2MB_CRYPTO_OBJ_TYPE_HMAC_SHA512_E 0xA0000006
78 
79 #define M2MB_CRYPTO_OBJ_TYPE_RSA_PUBLIC_KEY_E 0xA0000030
80 
81 #define M2MB_CRYPTO_OBJ_TYPE_RSA_KEYPAIR_E 0xA1000030
82 
83 #define M2MB_CRYPTO_OBJ_TYPE_DH_KEYPAIR_E 0xA1000032
84 
85 #define M2MB_CRYPTO_OBJ_TYPE_ECDSA_PUBLIC_KEY_E 0xA0000041
86 
87 #define M2MB_CRYPTO_OBJ_TYPE_ECDSA_KEYPAIR_E 0xA1000041
88 
89 #define M2MB_CRYPTO_OBJ_TYPE_ECDH_KEYPAIR_E 0xA1000042
90 
91 #define M2MB_CRYPTO_OBJ_TYPE_GENERIC_SECRET_E 0xA0000000
92 
93 #define M2MB_CRYPTO_OBJ_TYPE_ED25519_PUBLIC_KEY_E 0xA00000C0
94 
95 #define M2MB_CRYPTO_OBJ_TYPE_ED25519_KEYPAIR_E 0xA10000C0
96 
97 #define M2MB_CRYPTO_OBJ_TYPE_CURVE25519_KEYPAIR_E 0xA10000C1
98 
99 #define M2MB_CRYPTO_OBJ_TYPE_SRP_KEYPAIR_E 0xA10000C2
100 
101 #define M2MB_CRYPTO_OBJ_TYPE_CHACHA20_E 0xA00000C3
102 
103 #define M2MB_CRYPTO_OBJ_TYPE_ECJPAKE_ROUND1_PUBLIC_KEY_AND_ZKP_PAIR_E 0xA10000C3
104 
105 #define M2MB_CRYPTO_OBJ_TYPE_ECJPAKE_ROUND2_PUBLIC_KEY_AND_ZKP_E 0xA10000C4
106 
111 
116 #define M2MB_CRYPTO_ALG_AES_CBC_NOPAD_E 0x10000110
117 
118 #define M2MB_CRYPTO_ALG_AES_CTR_E 0x10000210
119 
120 #define M2MB_CRYPTO_ALG_AES_CCM_E 0x40000710
121 
122 #define M2MB_CRYPTO_ALG_AES_GCM_E 0x40000810
123 
124 #define M2MB_CRYPTO_ALG_RSASSA_PKCS1_V1_5_SHA1_E 0x70002830
125 
126 #define M2MB_CRYPTO_ALG_RSASSA_PKCS1_V1_5_SHA256_E 0x70004830
127 
128 #define M2MB_CRYPTO_ALG_RSASSA_PKCS1_V1_5_SHA384_E 0x70005830
129 
130 #define M2MB_CRYPTO_ALG_RSASSA_PKCS1_V1_5_SHA512_E 0x70006830
131 
132 #define M2MB_CRYPTO_ALG_RSAES_PKCS1_V1_5_E 0x60000130
133 
134 #define M2MB_CRYPTO_ALG_RSA_NOPAD_E 0x60000030
135 
136 #define M2MB_CRYPTO_ALG_DH_DERIVE_SHARED_SECRET_E 0x80000032
137 
138 #define M2MB_CRYPTO_ALG_MD5_E 0x50000001
139 
140 #define M2MB_CRYPTO_ALG_SHA1_E 0x50000002
141 
142 #define M2MB_CRYPTO_ALG_SHA224_E 0x50000003
143 
144 #define M2MB_CRYPTO_ALG_SHA256_E 0x50000004
145 
146 #define M2MB_CRYPTO_ALG_SHA384_E 0x50000005
147 
148 #define M2MB_CRYPTO_ALG_SHA512_E 0x50000006
149 
150 #define M2MB_CRYPTO_ALG_HMAC_MD5_E 0x30000001
151 
152 #define M2MB_CRYPTO_ALG_HMAC_SHA1_E 0x30000002
153 
154 #define M2MB_CRYPTO_ALG_HMAC_SHA224_E 0x30000003
155 
156 #define M2MB_CRYPTO_ALG_HMAC_SHA256_E 0x30000004
157 
158 #define M2MB_CRYPTO_ALG_HMAC_SHA384_E 0x30000005
159 
160 #define M2MB_CRYPTO_ALG_HMAC_SHA512_E 0x30000006
161 
162 #define M2MB_CRYPTO_ALG_ECDSA_P192_E 0x70001042
163 
164 #define M2MB_CRYPTO_ALG_ECDSA_P224_E 0x70002042
165 
166 #define M2MB_CRYPTO_ALG_ECDSA_P256_E 0x70003042
167 
168 #define M2MB_CRYPTO_ALG_ECDSA_P384_E 0x70004042
169 
170 #define M2MB_CRYPTO_ALG_ECDSA_P521_E 0x70005042
171 
172 #define M2MB_CRYPTO_ALG_ECDH_P192_E 0x80001042
173 
174 #define M2MB_CRYPTO_ALG_ECDH_P224_E 0x80002042
175 
176 #define M2MB_CRYPTO_ALG_ECDH_P256_E 0x80003042
177 
178 #define M2MB_CRYPTO_ALG_ECDH_P384_E 0x80004042
179 
180 #define M2MB_CRYPTO_ALG_ECDH_P521_E 0x80005042
181 
182 #define M2MB_CRYPTO_ALG_ED25519_E 0x700000C0
183 
184 #define M2MB_CRYPTO_ALG_CURVE25519_DERIVE_SHARED_SECRET_E 0x800000C1
185 
186 #define M2MB_CRYPTO_ALG_SRP_DERIVE_SHARED_SECRET_E 0x800000C2
187 
188 #define M2MB_CRYPTO_ALG_CHACHA20_POLY1305_E 0x400000C3
189 
190 #define M2MB_CRYPTO_ALG_ECJPAKE_E 0x800000C3
191 
197 
199 typedef enum {
215 
216 
217 
218 #define M2MB_CRYPTO_ATTR_SECRET_VALUE_E 0xC0000000
219 
220 #define M2MB_CRYPTO_ATTR_ED25519_PUBLIC_VALUE_E 0xD00001C0
221 
222 #define M2MB_CRYPTO_ATTR_ED25519_PRIVATE_VALUE_E 0xC00001C0
223 
224 #define M2MB_CRYPTO_ATTR_CURVE25519_PUBLIC_VALUE_E 0xD00001C1
225 
226 #define M2MB_CRYPTO_ATTR_CURVE25519_PRIVATE_VALUE_E 0xC00002C1
227 
228 #define M2MB_CRYPTO_ATTR_ECC_PUBLIC_VALUE_X_E 0xD0000141
229 
230 #define M2MB_CRYPTO_ATTR_ECC_PUBLIC_VALUE_Y_E 0xD0000241
231 
232 #define M2MB_CRYPTO_ATTR_ECC_PRIVATE_VALUE_E 0xC0000341
233 
234 #define M2MB_CRYPTO_ATTR_ECC_CURVE_E 0xF0000441
235 
236 #define M2MB_CRYPTO_ATTR_DH_PRIME_E 0xD0001032
237 
238 #define M2MB_CRYPTO_ATTR_DH_BASE_E 0xD0001232
239 
240 #define M2MB_CRYPTO_ATTR_DH_PUBLIC_VALUE_E 0xD0000132
241 
242 #define M2MB_CRYPTO_ATTR_DH_PRIVATE_VALUE_E 0xC0000232
243 
244 #define M2MB_CRYPTO_ATTR_RSA_MODULUS_E 0xD0000130
245 
246 #define M2MB_CRYPTO_ATTR_RSA_PUBLIC_EXPONENT_E 0xD0000230
247 
248 #define M2MB_CRYPTO_ATTR_RSA_PRIVATE_EXPONENT_E 0xC0000330
249 
250 #define M2MB_CRYPTO_ATTR_RSA_PRIME1_E 0xC0000430
251 
252 #define M2MB_CRYPTO_ATTR_RSA_PRIME2_E 0xC0000530
253 
254 #define M2MB_CRYPTO_ATTR_RSA_EXPONENT1_E 0xC0000630
255 
256 #define M2MB_CRYPTO_ATTR_RSA_EXPONENT2_E 0xC0000730
257 
258 #define M2MB_CRYPTO_ATTR_RSA_COEFFICIENT_E 0xC0000830
259 
260 #define M2MB_CRYPTO_ATTR_SRP_PRIME_E 0xD00001C2
261 
262 #define M2MB_CRYPTO_ATTR_SRP_GEN_E 0xD00002C2
263 
264 #define M2MB_CRYPTO_ATTR_SRP_VERIFIER_E 0xC00003C2
265 
266 #define M2MB_CRYPTO_ATTR_SRP_USERNAME_E 0xD00004C2
267 
268 #define M2MB_CRYPTO_ATTR_SRP_PASSWORD_E 0xC00005C2
269 
270 #define M2MB_CRYPTO_ATTR_SRP_TYPE_E 0xD00006C2
271 
272 #define M2MB_CRYPTO_ATTR_SRP_HASH_E 0xD00007C2
273 
274 #define M2MB_CRYPTO_ATTR_SRP_SALT_E 0xD00008C2
275 
276 #define M2MB_CRYPTO_ATTR_SRP_PUBLIC_VALUE_E 0xD00009C2
277 
278 #define M2MB_CRYPTO_ATTR_SRP_PRIVATE_VALUE_E 0xC0000AC2
279 
280 #define M2MB_CRYPTO_ATTR_ECJPAKE_LOCAL_IDENTITY_E 0xD00010C2
281 
282 #define M2MB_CRYPTO_ATTR_ECJPAKE_REMOTE_IDENTITY_E 0xD00020C2
283 
284 #define M2MB_CRYPTO_ATTR_ECJPAKE_ROUND1_PUBLIC_KEY_1_E 0xD00030C2
285 
286 #define M2MB_CRYPTO_ATTR_ECJPAKE_ROUND1_ZKP_EPHEMERAL_PUBLIC_KEY_1_E 0xD00040C2
287 
288 #define M2MB_CRYPTO_ATTR_ECJPAKE_ROUND1_ZKP_SIGNATURE_1_E 0xD00050C2
289 
290 #define M2MB_CRYPTO_ATTR_ECJPAKE_ROUND1_PUBLIC_KEY_2_E 0xD00060C2
291 
292 #define M2MB_CRYPTO_ATTR_ECJPAKE_ROUND1_ZKP_EPHEMERAL_PUBLIC_KEY_2_E 0xD00070C2
293 
294 #define M2MB_CRYPTO_ATTR_ECJPAKE_ROUND1_ZKP_SIGNATURE_2_E 0xD00080C2
295 
296 #define M2MB_CRYPTO_ATTR_ECJPAKE_ROUND2_PUBLIC_KEY_E 0xD00090C2
297 
298 #define M2MB_CRYPTO_ATTR_ECJPAKE_ROUND2_ZKP_EPHEMERAL_PUBLIC_KEY_E 0xD00100C2
299 
300 #define M2MB_CRYPTO_ATTR_ECJPAKE_ROUND2_ZKP_SIGNATURE_E 0xD00110C2
301 
307 
308 
309 #define M2MB_CRYPTO_AES128_KEY_BYTES (16)
310 
311 #define M2MB_CRYPTO_AES256_KEY_BYTES (32)
312 
313 #define M2MB_CRYPTO_AES_IV_BYTES (16)
314 
315 #define M2MB_CRYPTO_AES_BLOCK_BYTES (16)
316 
318 typedef struct m2mb_crypto_attr
319 {
322  //m2mb_crypto_attr_type_t attr;
326 
327 
335 typedef struct m2mb_crypto_attrib{
336  uint32_t attrib_id;
339  union {
340  struct {
341  void *buf;
343  uint32_t len;
345  } ref;
347  struct {
348  uint32_t a;
350  uint32_t b;
352  } val;
354  } u;
357 
365 
366 /* Global functions =========================================================*/
367 /*---------------------------------------------------------------------------*/
406 /*---------------------------------------------------------------------------*/
408 /*---------------------------------------------------------------------------*/
412 /*-----------------------------------------------------------------------------------------------*/
413 
414 #endif /* GEPS_SRC_CRYPTO_M2MB_CRYPTO_H_ */
m2mb_crypto_alg_t alg
Definition: m2mb_crypto.h:321
struct m2mb_crypto_attrib::@0::@2 val
INT32 m2mb_crypto_random_get(VOID *buffer, UINT16 len)
To get random number.
m2mb_crypto_mode_t mode
Definition: m2mb_crypto.h:323
unsigned short UINT16
Definition: m2mb_types.h:87
struct m2mb_crypto_attrib m2mb_crypto_attrib_t
An attribute can be either a buffer attribute or a value attribute. This is determined by bit [29] of...
An attribute can be either a buffer attribute or a value attribute. This is determined by bit [29] of...
Definition: m2mb_crypto.h:335
void VOID
Definition: m2mb_types.h:74
struct m2mb_crypto_attrib::@0::@1 ref
unsigned long int UINT32
Definition: m2mb_types.h:88
signed int INT32
Definition: m2mb_types.h:82
m2mb_crypto_obj_type_t obj
Definition: m2mb_crypto.h:320
m2mb_crypto_mode_t
Operation mode. enum.
Definition: m2mb_crypto.h:199
VOID * M2M_SHA_HANDLE
Handle used in SHA operations.
Definition: m2mb_crypto.h:364
UINT32 m2mb_crypto_alg_t
Crypto algorithm type. Algorithms are the cryptographic functions performed on the keys...
Definition: m2mb_crypto.h:196
UINT32 m2mb_crypto_attr_type_t
Attribute type. Used in m2mb_crypto_attrib_t.
Definition: m2mb_crypto.h:306
union m2mb_crypto_attrib::@0 u
struct m2mb_crypto_attr m2mb_crypto_attr_t
UINT32 m2mb_crypto_obj_type_t
Crypto object type. Objects are the keys used in the crypto operations.
Definition: m2mb_crypto.h:110