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 17extern "C" { 18#endif /* __cplusplus */ 19 20PACKED_TYPE(iso7816_header_t, 21struct 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 31typedef 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 39const unsigned char *iso7816_ptr(const iso7816_apdu_t *); 40int iso7816_add(iso7816_apdu_t *, const void *, size_t); 41iso7816_apdu_t *iso7816_new(uint8_t, uint8_t, uint8_t, uint16_t); 42size_t iso7816_len(const iso7816_apdu_t *); 43void iso7816_free(iso7816_apdu_t **); 44 45#ifdef __cplusplus 46} /* extern "C" */ 47#endif /* __cplusplus */ 48 49#endif /* !_ISO7816_H */ 50