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