Home | History | Annotate | Line # | Download | only in src
      1 /*
      2  * Copyright (c) 2018 Yubico AB. All rights reserved.
      3  * Use of this source code is governed by a BSD-style
      4  * license that can be found in the LICENSE file.
      5  * SPDX-License-Identifier: BSD-2-Clause
      6  */
      7 
      8 #ifndef _ISO7816_H
      9 #define _ISO7816_H
     10 
     11 #include <stdint.h>
     12 #include <stdlib.h>
     13 
     14 #include "packed.h"
     15 
     16 #ifdef __cplusplus
     17 extern "C" {
     18 #endif /* __cplusplus */
     19 
     20 PACKED_TYPE(iso7816_header_t,
     21 struct iso7816_header {
     22 	uint8_t cla;
     23 	uint8_t ins;
     24 	uint8_t p1;
     25 	uint8_t p2;
     26 	uint8_t lc1;
     27 	uint8_t lc2;
     28 	uint8_t lc3;
     29 })
     30 
     31 typedef struct iso7816_apdu {
     32 	size_t            alloc_len;
     33 	uint16_t          payload_len;
     34 	uint8_t          *payload_ptr;
     35 	iso7816_header_t  header;
     36 	uint8_t           payload[];
     37 } iso7816_apdu_t;
     38 
     39 const unsigned char *iso7816_ptr(const iso7816_apdu_t *);
     40 int iso7816_add(iso7816_apdu_t *, const void *, size_t);
     41 iso7816_apdu_t *iso7816_new(uint8_t, uint8_t, uint8_t, uint16_t);
     42 size_t iso7816_len(const iso7816_apdu_t *);
     43 void iso7816_free(iso7816_apdu_t **);
     44 
     45 #ifdef __cplusplus
     46 } /* extern "C" */
     47 #endif /* __cplusplus */
     48 
     49 #endif /* !_ISO7816_H */
     50