plugntrust 2.0.0.0
plugntrust.h
Go to the documentation of this file.
1/****************************************************************************
2** Copyright (C) 2020 MikroElektronika d.o.o.
3** Contact: https://www.mikroe.com/contact
4**
5** Permission is hereby granted, free of charge, to any person obtaining a copy
6** of this software and associated documentation files (the "Software"), to deal
7** in the Software without restriction, including without limitation the rights
8** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9** copies of the Software, and to permit persons to whom the Software is
10** furnished to do so, subject to the following conditions:
11** The above copyright notice and this permission notice shall be
12** included in all copies or substantial portions of the Software.
13**
14** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20** USE OR OTHER DEALINGS IN THE SOFTWARE.
21****************************************************************************/
22
28#ifndef PLUGNTRUST_H
29#define PLUGNTRUST_H
30
31#ifdef __cplusplus
32extern "C"{
33#endif
34
39#ifdef PREINIT_SUPPORTED
40#include "preinit.h"
41#endif
42
43#ifdef MikroCCoreVersion
44 #if MikroCCoreVersion >= 1
45 #include "delays.h"
46 #endif
47#endif
48
49#include "drv_digital_out.h"
50#include "drv_digital_in.h"
51#include "drv_i2c_master.h"
52
74#define PLUGNTRUST_NAD_WRITE 0x5A
75#define PLUGNTRUST_NAD_READ 0xA5
76
82#define PLUGNTRUST_PCB_BLOCK_I 0x00
83#define PLUGNTRUST_PCB_BLOCK_I_NS_ENCODE 0x40
84#define PLUGNTRUST_PCB_BLOCK_I_M_CHAIN 0x20
85
91#define PLUGNTRUST_PCB_BLOCK_R 0x80
92#define PLUGNTRUST_PCB_BLOCK_R_NR_ENCODE 0x10
93#define PLUGNTRUST_PCB_BLOCK_R_ERROR_CRC 0x01
94#define PLUGNTRUST_PCB_BLOCK_R_ERROR_OTHER 0x02
95
101#define PLUGNTRUST_PCB_BLOCK_S 0xC0
102#define PLUGNTRUST_PCB_BLOCK_S_RESYNC_REQ 0x00
103#define PLUGNTRUST_PCB_BLOCK_S_RESYNC_RSP 0x20
104#define PLUGNTRUST_PCB_BLOCK_S_IFS_REQ 0x01
105#define PLUGNTRUST_PCB_BLOCK_S_IFS_RSP 0x21
106#define PLUGNTRUST_PCB_BLOCK_S_ABORT_REQ 0x02
107#define PLUGNTRUST_PCB_BLOCK_S_ABORT_RSP 0x22
108#define PLUGNTRUST_PCB_BLOCK_S_WTX_REQ 0x03
109#define PLUGNTRUST_PCB_BLOCK_S_WTX_RSP 0x23
110#define PLUGNTRUST_PCB_BLOCK_S_SOFT_RESET_REQ 0x0F
111#define PLUGNTRUST_PCB_BLOCK_S_SOFT_RESET_RSP 0x2F
112#define PLUGNTRUST_PCB_BLOCK_S_END_APDU_SESSION_REQ 0x05
113#define PLUGNTRUST_PCB_BLOCK_S_END_APDU_SESSION_RSP 0x25
114#define PLUGNTRUST_PCB_BLOCK_S_SE_RESET_REQ 0x06
115#define PLUGNTRUST_PCB_BLOCK_S_SE_RESET_RSP 0x26
116#define PLUGNTRUST_PCB_BLOCK_S_GET_ATR_REQ 0x07
117#define PLUGNTRUST_PCB_BLOCK_S_GET_ATR_RSP 0x27
118
119 // pcb
120
121
136#define PLUGNTRUST_CLA_SECURE 0x84
137#define PLUGNTRUST_CLA_NOT_SECURE 0x80
138
143#define PLUGNTRUST_INS_MASK_INS_CHAR 0xE0
144#define PLUGNTRUST_INS_MASK_INSTRUCTION 0x1F
145#define PLUGNTRUST_INS_TRANSIENT 0x80
146#define PLUGNTRUST_INS_AUTH_OBJECT 0x40
147#define PLUGNTRUST_INS_ATTEST 0x20
148#define PLUGNTRUST_INS_WRITE 0x01
149#define PLUGNTRUST_INS_READ 0x02
150#define PLUGNTRUST_INS_CRYPTO 0x03
151#define PLUGNTRUST_INS_MGMT 0x04
152#define PLUGNTRUST_INS_PROCESS 0x05
153#define PLUGNTRUST_INS_IMPORT_EXTERNAL 0x06
154
159#define PLUGNTRUST_P1_UNUSED 0x80
160#define PLUGNTRUST_P1_MASK_KEY_TYPE 0x60
161#define PLUGNTRUST_P1_MASK_CRED_TYPE 0x1F
162#define PLUGNTRUST_P1_KEY_PAIR 0x60
163#define PLUGNTRUST_P1_PRIVATE 0x40
164#define PLUGNTRUST_P1_PUBLIC 0x20
165#define PLUGNTRUST_P1_DEFAULT 0x00
166#define PLUGNTRUST_P1_EC 0x01
167#define PLUGNTRUST_P1_RSA 0x02
168#define PLUGNTRUST_P1_AES 0x03
169#define PLUGNTRUST_P1_DES 0x04
170#define PLUGNTRUST_P1_HMAC 0x05
171#define PLUGNTRUST_P1_BINARY 0x06
172#define PLUGNTRUST_P1_USERID 0x07
173#define PLUGNTRUST_P1_COUNTER 0x08
174#define PLUGNTRUST_P1_PCR 0x09
175#define PLUGNTRUST_P1_CURVE 0x0B
176#define PLUGNTRUST_P1_SIGNATURE 0x0C
177#define PLUGNTRUST_P1_MAC 0x0D
178#define PLUGNTRUST_P1_CIPHER 0x0E
179#define PLUGNTRUST_P1_TLS 0x0F
180#define PLUGNTRUST_P1_CRYPTO_OBJ 0x10
181
182#define PLUGNTRUST_P2_DEFAULT 0x00
183#define PLUGNTRUST_P2_GENERATE 0x03
184#define PLUGNTRUST_P2_CREATE 0x04
185#define PLUGNTRUST_P2_SIZE 0x07
186#define PLUGNTRUST_P2_SIGN 0x09
187#define PLUGNTRUST_P2_VERIFY 0x0A
188#define PLUGNTRUST_P2_INIT 0x0B
189#define PLUGNTRUST_P2_UPDATE 0x0C
190#define PLUGNTRUST_P2_FINAL 0x0D
191#define PLUGNTRUST_P2_ONESHOT 0x0E
192#define PLUGNTRUST_P2_DH 0x0F
193#define PLUGNTRUST_P2_DIVERSIFY 0x10
194#define PLUGNTRUST_P2_AUTH_FIRST_PART2 0x12
195#define PLUGNTRUST_P2_AUTH_NONFIRST_PART2 0x13
196#define PLUGNTRUST_P2_DUMP_KEY 0x14
197#define PLUGNTRUST_P2_CHANGE_KEY_PART1 0x15
198#define PLUGNTRUST_P2_CHANGE_KEY_PART2 0x16
199#define PLUGNTRUST_P2_KILL_AUTH 0x17
200#define PLUGNTRUST_P2_IMPORT 0x18
201#define PLUGNTRUST_P2_EXPORT 0x19
202#define PLUGNTRUST_P2_SESSION_CREATE 0x1B
203#define PLUGNTRUST_P2_SESSION_CLOSE 0x1C
204#define PLUGNTRUST_P2_SESSION_REFRESH 0x1E
205#define PLUGNTRUST_P2_SESSION_POLICY 0x1F
206#define PLUGNTRUST_P2_VERSION 0x20
207#define PLUGNTRUST_P2_MEMORY 0x22
208#define PLUGNTRUST_P2_LIST 0x25
209#define PLUGNTRUST_P2_TYPE 0x26
210#define PLUGNTRUST_P2_EXIST 0x27
211#define PLUGNTRUST_P2_DELETE_OBJECT 0x28
212#define PLUGNTRUST_P2_DELETE_ALL 0x2A
213#define PLUGNTRUST_P2_SESSION_USERID 0x2C
214#define PLUGNTRUST_P2_HKDF 0x2D
215#define PLUGNTRUST_P2_PBKDF 0x2E
216#define PLUGNTRUST_P2_I2CM 0x30
217#define PLUGNTRUST_P2_I2CM_ATTESTED 0x31
218#define PLUGNTRUST_P2_MAC 0x32
219#define PLUGNTRUST_P2_UNLOCK_CHALLENGE 0x33
220#define PLUGNTRUST_P2_CURVE_LIST 0x34
221#define PLUGNTRUST_P2_SIGN_ECDAA 0x35
222#define PLUGNTRUST_P2_ID 0x36
223#define PLUGNTRUST_P2_ENCRYPT_ONESHOT 0x37
224#define PLUGNTRUST_P2_DECRYPT_ONESHOT 0x38
225#define PLUGNTRUST_P2_ATTEST 0x3A
226#define PLUGNTRUST_P2_ATTRIBUTES 0x3B
227#define PLUGNTRUST_P2_CPLC 0x3C
228#define PLUGNTRUST_P2_TIME 0x3D
229#define PLUGNTRUST_P2_TRANSPORT 0x3E
230#define PLUGNTRUST_P2_VARIANT 0x3F
231#define PLUGNTRUST_P2_PARAM 0x40
232#define PLUGNTRUST_P2_DELETE_CURVE 0x41
233#define PLUGNTRUST_P2_ENCRYPT 0x42
234#define PLUGNTRUST_P2_DECRYPT 0x43
235#define PLUGNTRUST_P2_VALIDATE 0x44
236#define PLUGNTRUST_P2_GENERATE_ONESHOT 0x45
237#define PLUGNTRUST_P2_VALIDATE_ONESHOT 0x46
238#define PLUGNTRUST_P2_CRYPTO_LIST 0x47
239#define PLUGNTRUST_P2_RANDOM 0x49
240#define PLUGNTRUST_P2_TLS_PMS 0x4A
241#define PLUGNTRUST_P2_TLS_PRF_CLI_HELLO 0x4B
242#define PLUGNTRUST_P2_TLS_PRF_SRV_HELLO 0x4C
243#define PLUGNTRUST_P2_TLS_PRF_CLI_RND 0x4D
244#define PLUGNTRUST_P2_TLS_PRF_SRV_RND 0x4E
245#define PLUGNTRUST_P2_RAW 0x4F
246#define PLUGNTRUST_P2_IMPORT_EXT 0x51
247#define PLUGNTRUST_P2_SCP 0x52
248#define PLUGNTRUST_P2_AUTH_FIRST_PART1 0x53
249#define PLUGNTRUST_P2_AUTH_NONFIRST_PART1 0x54
250
255#define PLUGNTRUST_SECURE_OBJECT_TYPE_EC_KEY_PAIR 0x01
256#define PLUGNTRUST_SECURE_OBJECT_TYPE_EC_PRIV_KEY 0x02
257#define PLUGNTRUST_SECURE_OBJECT_TYPE_EC_PUB_KEY 0x03
258#define PLUGNTRUST_SECURE_OBJECT_TYPE_RSA_KEY_PAIR 0x04
259#define PLUGNTRUST_SECURE_OBJECT_TYPE_RSA_KEY_PAIR_CRT 0x05
260#define PLUGNTRUST_SECURE_OBJECT_TYPE_RSA_PRIV_KEY 0x06
261#define PLUGNTRUST_SECURE_OBJECT_TYPE_RSA_PRIV_KEY_CRT 0x07
262#define PLUGNTRUST_SECURE_OBJECT_TYPE_RSA_PUB_KEY 0x08
263#define PLUGNTRUST_SECURE_OBJECT_TYPE_AES_KEY 0x09
264#define PLUGNTRUST_SECURE_OBJECT_TYPE_DES_KEY 0x0A
265#define PLUGNTRUST_SECURE_OBJECT_TYPE_BINARY_FILE 0x0B
266#define PLUGNTRUST_SECURE_OBJECT_TYPE_USERID 0x0C
267#define PLUGNTRUST_SECURE_OBJECT_TYPE_COUNTER 0x0D
268#define PLUGNTRUST_SECURE_OBJECT_TYPE_PCR 0x0F
269#define PLUGNTRUST_SECURE_OBJECT_TYPE_CURVE 0x10
270#define PLUGNTRUST_SECURE_OBJECT_TYPE_HMAC_KEY 0x11
271
276#define PLUGNTRUST_MEM_PERSISTENT 0x01
277#define PLUGNTRUST_MEM_TRANSIENT_RESET 0x02
278#define PLUGNTRUST_MEM_TRANSIENT_DESELECT 0x03
279
284#define PLUGNTRUST_ORIGIN_EXTERNAL 0x01
285#define PLUGNTRUST_ORIGIN_INTERNAL 0x02
286#define PLUGNTRUST_ORIGIN_PROVISIONED 0x03
287
292#define PLUGNTRUST_TLV_TAG_SESSION_ID 0x10
293#define PLUGNTRUST_TLV_TAG_POLICY 0x11
294#define PLUGNTRUST_TLV_TAG_MAX_ATTEMPTS 0x12
295#define PLUGNTRUST_TLV_TAG_IMPORT_AUTH_DATA 0x13
296#define PLUGNTRUST_TLV_TAG_IMPORT_AUTH_KEY_ID 0x14
297#define PLUGNTRUST_TLV_TAG_1 0x41
298#define PLUGNTRUST_TLV_TAG_2 0x42
299#define PLUGNTRUST_TLV_TAG_3 0x43
300#define PLUGNTRUST_TLV_TAG_4 0x44
301#define PLUGNTRUST_TLV_TAG_5 0x45
302#define PLUGNTRUST_TLV_TAG_6 0x46
303#define PLUGNTRUST_TLV_TAG_7 0x47
304#define PLUGNTRUST_TLV_TAG_8 0x48
305#define PLUGNTRUST_TLV_TAG_9 0x49
306#define PLUGNTRUST_TLV_TAG_10 0x4A
307
312#define PLUGNTRUST_ECS_SIG_ECDSA_PLAIN 0x09
313#define PLUGNTRUST_ECS_SIG_ECDSA_SHA 0x11
314#define PLUGNTRUST_ECS_SIG_ECDSA_SHA_224 0x25
315#define PLUGNTRUST_ECS_SIG_ECDSA_SHA_256 0x21
316#define PLUGNTRUST_ECS_SIG_ECDSA_SHA_384 0x22
317#define PLUGNTRUST_ECS_SIG_ECDSA_SHA_512 0x26
318#define PLUGNTRUST_ECS_SIG_ED25519PH_SHA_512 0xA3
319#define PLUGNTRUST_ECS_SIG_ECDAA 0xF4
320
325#define PLUGNTRUST_RSA_SHA1_PKCS1_PSS 0x15
326#define PLUGNTRUST_RSA_SHA224_PKCS1_PSS 0x2B
327#define PLUGNTRUST_RSA_SHA256_PKCS1_PSS 0x2C
328#define PLUGNTRUST_RSA_SHA384_PKCS1_PSS 0x2D
329#define PLUGNTRUST_RSA_SHA512_PKCS1_PSS 0x2E
330#define PLUGNTRUST_RSA_SHA1_PKCS1 0x0A
331#define PLUGNTRUST_RSA_SHA_224_PKCS1 0x27
332#define PLUGNTRUST_RSA_SHA_256_PKCS1 0x28
333#define PLUGNTRUST_RSA_SHA_384_PKCS1 0x29
334#define PLUGNTRUST_RSA_SHA_512_PKCS1 0x2A
335#define PLUGNTRUST_RSA_NO_PAD 0x0C
336#define PLUGNTRUST_RSA_PKCS1 0x0A
337#define PLUGNTRUST_RSA_PKCS1_OAEP 0x0F
338#define PLUGNTRUST_RSA_512 512
339#define PLUGNTRUST_RSA_1024 1024
340#define PLUGNTRUST_RSA_1152 1152
341#define PLUGNTRUST_RSA_2048 2048
342#define PLUGNTRUST_RSA_3072 3072
343#define PLUGNTRUST_RSA_4096 4096
344#define PLUGNTRUST_RSA_COMP_MOD 0x00
345#define PLUGNTRUST_RSA_COMP_PUB_EXP 0x01
346#define PLUGNTRUST_RSA_COMP_PRIV_EXP 0x02
347#define PLUGNTRUST_RSA_COMP_P 0x03
348#define PLUGNTRUST_RSA_COMP_Q 0x04
349#define PLUGNTRUST_RSA_COMP_DP 0x05
350#define PLUGNTRUST_RSA_COMP_DQ 0x06
351#define PLUGNTRUST_RSA_COMP_INVQ 0x07
352
357#define PLUGNTRUST_DIGEST_NO_HASH 0x00
358#define PLUGNTRUST_DIGEST_SHA 0x01
359#define PLUGNTRUST_DIGEST_SHA224 0x07
360#define PLUGNTRUST_DIGEST_SHA256 0x04
361#define PLUGNTRUST_DIGEST_SHA384 0x05
362#define PLUGNTRUST_DIGEST_SHA512 0x06
363
368#define PLUGNTRUST_HMAC_SHA1 0x18
369#define PLUGNTRUST_HMAC_SHA256 0x19
370#define PLUGNTRUST_HMAC_SHA384 0x1A
371#define PLUGNTRUST_HMAC_SHA512 0x1B
372#define PLUGNTRUST_CMAC_128 0x31
373
378#define PLUGNTRUST_ECC_UNUSED 0x00
379#define PLUGNTRUST_ECC_NIST_P192 0x01
380#define PLUGNTRUST_ECC_NIST_P224 0x02
381#define PLUGNTRUST_ECC_NIST_P256 0x03
382#define PLUGNTRUST_ECC_NIST_P384 0x04
383#define PLUGNTRUST_ECC_NIST_P521 0x05
384#define PLUGNTRUST_ECC_Brainpool160 0x06
385#define PLUGNTRUST_ECC_Brainpool192 0x07
386#define PLUGNTRUST_ECC_Brainpool224 0x08
387#define PLUGNTRUST_ECC_Brainpool256 0x09
388#define PLUGNTRUST_ECC_Brainpool320 0x0A
389#define PLUGNTRUST_ECC_Brainpool384 0x0B
390#define PLUGNTRUST_ECC_Brainpool512 0x0C
391#define PLUGNTRUST_ECC_Secp160k1 0x0D
392#define PLUGNTRUST_ECC_Secp192k1 0x0E
393#define PLUGNTRUST_ECC_Secp224k1 0x0F
394#define PLUGNTRUST_ECC_Secp256k1 0x10
395#define PLUGNTRUST_ECC_TPM_ECC_BN_P256 0x11
396#define PLUGNTRUST_ECC_ID_ECC_ED_25519 0x40
397#define PLUGNTRUST_ECC_ID_ECC_MONT_DH_25519 0x41
398#define PLUGNTRUST_ECC_CURVE_PARAM_A 0x01
399#define PLUGNTRUST_ECC_CURVE_PARAM_B 0x02
400#define PLUGNTRUST_ECC_CURVE_PARAM_G 0x04
401#define PLUGNTRUST_ECC_CURVE_PARAM_N 0x08
402#define PLUGNTRUST_ECC_CURVE_PARAM_PRIME 0x10
403
408#define PLUGNTRUST_CIPHER_DES_CBC_NOPAD 0x01
409#define PLUGNTRUST_CIPHER_DES_CBC_ISO9797_M1 0x02
410#define PLUGNTRUST_CIPHER_DES_CBC_ISO9797_M2 0x03
411#define PLUGNTRUST_CIPHER_DES_CBC_PKCS5 0x04
412#define PLUGNTRUST_CIPHER_DES_ECB_NOPAD 0x05
413#define PLUGNTRUST_CIPHER_DES_ECB_ISO9797_M1 0x06
414#define PLUGNTRUST_CIPHER_DES_ECB_ISO9797_M2 0x07
415#define PLUGNTRUST_CIPHER_DES_ECB_PKCS5 0x08
416#define PLUGNTRUST_CIPHER_AES_ECB_NOPAD 0x0E
417#define PLUGNTRUST_CIPHER_AES_CBC_NOPAD 0x0D
418#define PLUGNTRUST_CIPHER_AES_CBC_ISO9797_M1 0x16
419#define PLUGNTRUST_CIPHER_AES_CBC_ISO9797_M2 0x17
420#define PLUGNTRUST_CIPHER_AES_CBC_PKCS5 0x18
421#define PLUGNTRUST_CIPHER_AES_CTR 0xF0
422
427#define PLUGNTRUST_CONFIG_ECDAA 0x0001
428#define PLUGNTRUST_CONFIG_ECDSA_ECDH_ECDHE 0x0002
429#define PLUGNTRUST_CONFIG_EDDSA 0x0004
430#define PLUGNTRUST_CONFIG_DH_MONT 0x0008
431#define PLUGNTRUST_CONFIG_HMAC 0x0010
432#define PLUGNTRUST_CONFIG_RSA_PLAIN 0x0020
433#define PLUGNTRUST_CONFIG_RSA_CRT 0x0040
434#define PLUGNTRUST_CONFIG_AES 0x0080
435#define PLUGNTRUST_CONFIG_DES 0x0100
436#define PLUGNTRUST_CONFIG_PBKDF 0x0200
437#define PLUGNTRUST_CONFIG_TLS 0x0400
438#define PLUGNTRUST_CONFIG_MIFARE 0x0800
439#define PLUGNTRUST_CONFIG_FIPS_MODE_DISABLED 0x1000
440#define PLUGNTRUST_CONFIG_I2CM 0x2000
441#define PLUGNTRUST_CONFIG_ECC_ALL 0x000F
442#define PLUGNTRUST_CONFIG_RSA_ALL 0x0060
443#define PLUGNTRUST_CONFIG_ALL 0x3FFF
444
449#define PLUGNTRUST_TRANSIENT_LOCK 0x01
450#define PLUGNTRUST_PERSISTENT_LOCK 0x02
451
456#define PLUGNTRUST_LOCKED 0x01
457
462#define PLUGNTRUST_CC_DIGEST 0x01
463#define PLUGNTRUST_CC_CIPHER 0x02
464#define PLUGNTRUST_CC_SIGNATURE 0x03
465
470#define PLUGNTRUST_RESULT_SUCCESS 0x01
471#define PLUGNTRUST_RESULT_FAILURE 0x02
472
477#define PLUGNTRUST_PERSISTENT 0x01
478#define PLUGNTRUST_TRANSIENT 0x02
479
484#define PLUGNTRUST_NOT_SET 0x01
485#define PLUGNTRUST_SET 0x02
486
491#define PLUGNTRUST_NO_MORE 0x01
492#define PLUGNTRUST_MORE 0x02
493
498#define PLUGNTRUST_SCP_REQUIRED 0x01
499#define PLUGNTRUST_SCP_NOT_REQUIRED 0x02
500
505#define PLUGNTRUST_APPLET_RES_ID_TRANSPORT 0x7FFF0200ul
506#define PLUGNTRUST_APPLET_RES_ID_KP_FASTSCP_USER 0x7FFF0201ul
507#define PLUGNTRUST_APPLET_RES_ID_KP_FASTSCP_IMPORT 0x7FFF0202ul
508#define PLUGNTRUST_APPLET_RES_ID_PUB_FASTSCP_IMPORT 0x7FFF0203ul
509#define PLUGNTRUST_APPLET_RES_ID_FEATURE 0x7FFF0204ul
510#define PLUGNTRUST_APPLET_RES_ID_FACTORY_RESET 0x7FFF0205ul
511#define PLUGNTRUST_APPLET_RES_ID_UNIQUE_ID 0x7FFF0206ul
512#define PLUGNTRUST_APPLET_RES_ID_PLATFORM_SCP 0x7FFF0207ul
513
518#define PLUGNTRUST_SW_NOERROR 0x9000
519#define PLUGNTRUST_SW_CONDITIONS_NOT_SATISFIED 0x6985
520#define PLUGNTRUST_SW_SECURITY_STATUS 0x6982
521#define PLUGNTRUST_SW_WRONG_DATA 0x6A80
522#define PLUGNTRUST_SW_DATA_INVALID 0x6984
523#define PLUGNTRUST_SW_COMMAND_NOT_ALLOWED 0x6986
524
529#define PLUGNTRUST_OBJECT_DOES_EXISTS 1
530#define PLUGNTRUST_OBJECT_DOESNT_EXIST 2
531
536#define PLUGNTRUST_OBJID_SE05X_APPLET_RES_START 0x7FFF0000ul
537#define PLUGNTRUST_SSS_OBJID_DEMO_AUTH_START 0x7DA00000ul
538#define PLUGNTRUST_SSS_OBJID_IOT_HUB_A_START 0xF0000000ul
539
544#define PLUGNTRUST_OBJID_APPLET_MASK 0xFFFF0000ul
545#define PLUGNTRUST_OBJID_IOT_MASK 0xF0000000ul
546
547
548 // apdu
549
565#define PLUGNTRUST_SET_DEV_ADDR 0x48
566
571#define PLUGNTRUST_INTERFACE_ISO14443 0
572#define PLUGNTRUST_INTERFACE_I2C 1
573
578#define PLUGNTRUST_CARD_MANAGER_WITH_RSP 1
579#define PLUGNTRUST_CARD_MANAGER_WITHOUT_RSP 0
580
581 // plugntrust_set
582
597#define PLUGNTRUST_MAP_MIKROBUS( cfg, mikrobus ) \
598 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
599 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
600 cfg.en = MIKROBUS( mikrobus, MIKROBUS_CS ); \
601 cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
602
603 // plugntrust_map
604 // plugntrust
605
610typedef struct
611{
612 // Output pins
613 digital_out_t en;
614 digital_out_t rst;
615
616 // Modules
617 i2c_master_t i2c;
619 // I2C slave address
622 uint8_t interface;
625
630typedef struct
631{
632 pin_name_t scl;
633 pin_name_t sda;
635 pin_name_t en;
636 pin_name_t rst;
637
638 uint32_t i2c_speed;
639 uint8_t i2c_address;
642
647typedef struct
648{
649 uint8_t cla;
650 uint8_t ins;
651 uint8_t p1;
652 uint8_t p2;
653 uint8_t payload_len;
654 uint8_t payload[ 0xFF ];
655 uint16_t rsp_len;
656 uint16_t status;
658
663typedef struct
664{
665 uint8_t nad;
666 uint8_t pcb;
667 uint8_t len;
669 uint16_t crc16;
671
676typedef struct
677{
679 uint8_t vendor_id[ 5 ];
680
682 uint8_t data_link_layer_parameters[ 0x04 ];
683
685
687 uint8_t physical_layer_parameters[ 0x0B ];
688
690 uint8_t historical[ 0x0A ];
691
693
698typedef struct
699{
703
705 uint16_t secure_box;
706
708
721
738
753
767
781
795
809
819void plugntrust_set_en ( plugntrust_t *ctx, uint8_t state );
820
830void plugntrust_set_rst ( plugntrust_t *ctx, uint8_t state );
831
842
859void plugntrust_set_tlv_u8 ( uint8_t *buf, uint8_t *buf_len, uint8_t tag, uint8_t value );
860
878void plugntrust_set_tlv_u16 ( uint8_t *buf, uint8_t *buf_len, uint8_t tag, uint16_t value );
879
897void plugntrust_set_tlv_u16_optional ( uint8_t *buf, uint8_t *buf_len, uint8_t tag, uint16_t value );
898
916void plugntrust_set_tlv_u32 ( uint8_t *buf, uint8_t *buf_len, uint8_t tag, uint32_t value );
917
939err_t plugntrust_set_tlv_u8buf ( uint8_t *buf, uint8_t *buf_len, uint8_t tag, uint8_t *cmd, uint32_t cmd_len );
940
962err_t plugntrust_set_tlv_u8buf_optional ( uint8_t *buf, uint8_t *buf_len, uint8_t tag, uint8_t *cmd, uint32_t cmd_len );
963
983err_t plugntrust_get_tlv_u8 ( uint8_t *buf, uint32_t *buf_index, uint8_t tag, uint8_t *rsp );
984
1004err_t plugntrust_get_tlv_u16 ( uint8_t *buf, uint32_t *buf_index, uint8_t tag, uint16_t *rsp );
1005
1029err_t plugntrust_get_tlv_u8buf ( uint8_t *buf, uint32_t *buf_index, uint8_t buf_len, uint8_t tag, uint8_t *rsp, uint32_t *rsp_len );
1030
1040
1052
1065err_t plugntrust_object_id_list ( plugntrust_t *ctx, uint32_t *id_list, uint8_t *list_len );
1066
1080
1094err_t plugntrust_select_applet ( plugntrust_t *ctx, uint8_t ns_encode, plugntrust_version_info_t *ver_info );
1095
1109err_t plugntrust_select_card_manager ( plugntrust_t *ctx, uint8_t rsp, uint8_t *cardmanager_rsp, uint8_t *cardmanager_rsp_len );
1110
1127err_t plugntrust_get_free_memory ( plugntrust_t *ctx, uint8_t memory_type, uint16_t *free_memory );
1128
1144err_t plugntrust_get_random_numbers ( plugntrust_t *ctx, uint8_t *random_buf, uint8_t buf_len );
1145
1161err_t plugntrust_check_object_exist ( plugntrust_t *ctx, uint32_t object_id );
1162
1177err_t plugntrust_delete_object ( plugntrust_t *ctx, uint32_t object_id );
1178
1197err_t plugntrust_read_object ( plugntrust_t *ctx, uint32_t object_id, uint16_t offset, uint16_t read_len, uint8_t *data_buf, uint32_t *data_len );
1198
1217err_t plugntrust_write_binary_object ( plugntrust_t *ctx, uint32_t object_id, uint16_t offset, uint16_t data_len, uint8_t *data_buf );
1218
1235
1236#ifdef __cplusplus
1237}
1238#endif
1239#endif // PLUGNTRUST_H
1240
1241 // plugntrust
1242
1243// ------------------------------------------------------------------------ END
void plugntrust_set_tlv_u16_optional(uint8_t *buf, uint8_t *buf_len, uint8_t tag, uint16_t value)
Add TLV data of 2 bytes value in payload buffer if value is greater then 0.
err_t plugntrust_sw_reset(plugntrust_t *ctx, plugntrust_atr_t *atr_data)
Sends request to reset device and reads ATR data.
void plugntrust_set_tlv_u32(uint8_t *buf, uint8_t *buf_len, uint8_t tag, uint32_t value)
Add TLV data of 4 bytes value in payload buffer.
err_t plugntrust_set_tlv_u8buf_optional(uint8_t *buf, uint8_t *buf_len, uint8_t tag, uint8_t *cmd, uint32_t cmd_len)
Add TLV data buffer in payload buffer if TLV data buffer length greater then 0.
void plugntrust_set_tlv_u8(uint8_t *buf, uint8_t *buf_len, uint8_t tag, uint8_t value)
Add TLV data of 1 byte value in payload buffer.
err_t plugntrust_get_free_memory(plugntrust_t *ctx, uint8_t memory_type, uint16_t *free_memory)
Reads Applet free memory.
void plugntrust_set_tlv_u16(uint8_t *buf, uint8_t *buf_len, uint8_t tag, uint16_t value)
Add TLV data of 2 bytes value in payload buffer.
uint8_t plugntrust_calculate_apdu_size(plugntrust_apdu_t *apdu_data)
Calculates APDU object size.
err_t plugntrust_set_tlv_u8buf(uint8_t *buf, uint8_t *buf_len, uint8_t tag, uint8_t *cmd, uint32_t cmd_len)
Add TLV data buffer in payload buffer.
err_t plugntrust_write_binary_object(plugntrust_t *ctx, uint32_t object_id, uint16_t offset, uint16_t data_len, uint8_t *data_buf)
Create/Write to binary object.
err_t plugntrust_delete_object(plugntrust_t *ctx, uint32_t object_id)
Delete object.
err_t plugntrust_end_apdu_session(plugntrust_t *ctx)
Sends command for ending APDU session.
void plugntrust_reset(plugntrust_t *ctx)
Reset function.
err_t plugntrust_get_tlv_u8buf(uint8_t *buf, uint32_t *buf_index, uint8_t buf_len, uint8_t tag, uint8_t *rsp, uint32_t *rsp_len)
Parses TLV data from payload buffer to find data for desired tag.
err_t plugntrust_select_applet(plugntrust_t *ctx, uint8_t ns_encode, plugntrust_version_info_t *ver_info)
Selects Clicks Applet and returns info that device sends back to host.
void plugntrust_set_en(plugntrust_t *ctx, uint8_t state)
Set Enable pin state.
err_t plugntrust_get_tlv_u8(uint8_t *buf, uint32_t *buf_index, uint8_t tag, uint8_t *rsp)
Parses TLV data from payload buffer to find data for desired tag.
err_t plugntrust_get_applet_info(plugntrust_t *ctx, plugntrust_version_info_t *ver_info)
Get Version info from Applet.
err_t plugntrust_apdu_transfer(plugntrust_t *ctx, plugntrust_frame_data_t *frame_data)
Write-Read frame data function.
err_t plugntrust_default_cfg(plugntrust_t *ctx)
Plug n Trust default configuration function.
err_t plugntrust_read_object(plugntrust_t *ctx, uint32_t object_id, uint16_t offset, uint16_t read_len, uint8_t *data_buf, uint32_t *data_len)
Read object data.
err_t plugntrust_apdu_read(plugntrust_t *ctx, plugntrust_frame_data_t *frame_data)
Reading frame data function function.
err_t plugntrust_select_card_manager(plugntrust_t *ctx, uint8_t rsp, uint8_t *cardmanager_rsp, uint8_t *cardmanager_rsp_len)
Select card manager.
err_t plugntrust_apdu_write(plugntrust_t *ctx, plugntrust_frame_data_t *frame_data)
Writing frame data function.
err_t plugntrust_check_object_exist(plugntrust_t *ctx, uint32_t object_id)
Check if object exists.
void plugntrust_set_rst(plugntrust_t *ctx, uint8_t state)
Set Reset pin state.
err_t plugntrust_get_random_numbers(plugntrust_t *ctx, uint8_t *random_buf, uint8_t buf_len)
Get random data.
err_t plugntrust_init(plugntrust_t *ctx, plugntrust_cfg_t *cfg)
Plug n Trust initialization function.
err_t plugntrust_object_id_list(plugntrust_t *ctx, uint32_t *id_list, uint8_t *list_len)
Reads all Object ID's from Applet.
err_t plugntrust_get_tlv_u16(uint8_t *buf, uint32_t *buf_index, uint8_t tag, uint16_t *rsp)
Parses TLV data from payload buffer to find data for desired tag.
void plugntrust_cfg_setup(plugntrust_cfg_t *cfg)
Plug n Trust configuration object setup function.
plugntrust_return_value_t
Plug n Trust Click return value data.
Definition plugntrust.h:714
@ PLUGNTRUST_ERROR_TIMEOUT
Definition plugntrust.h:717
@ PLUGNTRUST_OK
Definition plugntrust.h:715
@ PLUGNTRUST_ERROR
Definition plugntrust.h:716
@ PLUGNTRUST_ERROR_DATA_OVF
Definition plugntrust.h:718
APDU data object.
Definition plugntrust.h:648
uint16_t rsp_len
Definition plugntrust.h:655
uint8_t p1
Definition plugntrust.h:651
uint8_t p2
Definition plugntrust.h:652
uint16_t status
Definition plugntrust.h:656
uint8_t cla
Definition plugntrust.h:649
uint8_t ins
Definition plugntrust.h:650
uint8_t payload_len
Definition plugntrust.h:653
Data after reset.
Definition plugntrust.h:677
uint8_t protocol_version
Definition plugntrust.h:678
uint8_t physical_layer_id
Definition plugntrust.h:684
uint8_t data_link_layer_parameters_len
Definition plugntrust.h:681
uint8_t historical_len
Definition plugntrust.h:689
uint8_t physical_layer_parameters_len
Definition plugntrust.h:686
Plug n Trust Click configuration object.
Definition plugntrust.h:631
uint32_t i2c_speed
Definition plugntrust.h:638
pin_name_t scl
Definition plugntrust.h:632
pin_name_t en
Definition plugntrust.h:635
pin_name_t sda
Definition plugntrust.h:633
pin_name_t rst
Definition plugntrust.h:636
uint8_t i2c_address
Definition plugntrust.h:639
Communication frame data object.
Definition plugntrust.h:664
uint8_t nad
Definition plugntrust.h:665
plugntrust_apdu_t * apdu
Definition plugntrust.h:668
uint16_t crc16
Definition plugntrust.h:669
uint8_t len
Definition plugntrust.h:667
uint8_t pcb
Definition plugntrust.h:666
Plug n Trust Click context object.
Definition plugntrust.h:611
i2c_master_t i2c
Definition plugntrust.h:617
digital_out_t en
Definition plugntrust.h:613
digital_out_t rst
Definition plugntrust.h:614
uint8_t slave_address
Definition plugntrust.h:620
uint8_t interface
Definition plugntrust.h:622
Version info data.
Definition plugntrust.h:699
uint8_t patch_version
Definition plugntrust.h:702
uint16_t secure_box
Definition plugntrust.h:705
uint8_t minor_version
Definition plugntrust.h:701
uint8_t major_version
Definition plugntrust.h:700
uint16_t applet_config
Definition plugntrust.h:704