1apdu.h(3)                  Library Functions Manual                  apdu.h(3)
2
3
4

NAME

6       apdu.h - Команды и ответы смарт-карт
7
8

SYNOPSIS

10       #include 'bee2/defs.h'
11
12
13   Классы
14       struct apdu_cmd_t
15           Команда APDU.
16       struct apdu_resp_t
17           Ответ APDU.
18
19   Функции
20       bool_t apduCmdIsValid (const apdu_cmd_t *cmd)
21           Корректная команда?
22       size_t apduCmdEnc (octet apdu[], const apdu_cmd_t *cmd)
23           Кодирование команды
24       size_t apduCmdDec (apdu_cmd_t *cmd, const octet apdu[], size_t count)
25           Декодирование команды
26       bool_t apduRespIsValid (const apdu_resp_t *resp)
27           Корректный ответ?
28       size_t apduRespEnc (octet apdu[], const apdu_resp_t *resp)
29           Кодирование ответа
30       size_t apduRespDec (apdu_resp_t *resp, const octet apdu[], size_t
31           count)
32           Декодирование ответа
33

Подробное описание

Команды APDU

36       Ренализованы следующие правила (см. СТБ 34.101.79, п. 12.1):
37
38       1.  Обязательными компонентами команды являются:
39
40       • СLA -- класс команды (1 октет);
41
42       • INS -- инструкция команды (1 октет),
43
44       • P1 и P2 -- параметры команды (1 октет каждый).
45
46       2.  Необязательным для команды является компонент CDF (массив октетов),
47           который содержит данные команды. Если компонент CDF присутствует,
48           то команда должна также содержать необязательный компонент Lc,
49           определяющий длину CDF.
50
51       3.  Если при выполнении команды ожидается, что в ответе будет
52           содержаться компонент RDF (см. далее), то команда должна содержать
53           необязательный компонент Le, определяющий максимально возможную
54           длину компонента RDF в ожидаемом ответе.
55
56       4.  При наличии в команде компонентов Lc и Le они могут быть
57           представлены в короткой или расширенной форме. Форма Le должна
58           соответствовать форме Lc.
59
60       5.  Короткая и расширенная формы определяются следующим образом:
61
62       • Lc в короткой форме состоит из одного октета, отличного от 0x00 и
63         определяющего значения от 1 до 255;
64
65       • Lc в расширенной форме состоит из трех октетов, при этом первый октет
66         равен 0x00, а остальные два октета отличны от 0x0000 и определяют
67         значения от 1 до 65535;
68
69       • Le в короткой форме состоит из одного октета, определяющего значения
70         от 1 до 256 (значению 256 соответствует 0x00);
71
72       • если компонент Lc присутствует в команде, то Le в расширенной форме
73         состоит из двух октетов, которые определяют значения от 1 до 65536
74         (значению 65536 соответствует 0x0000);
75
76       • если компонент Lc отсутствует в команде, то Le в расширенной форме
77         состоит из трех октетов, при этом первый октет равен 0x00, а
78         следующие два октета определяют значения от 1 до 65536 (значению
79         65536 соответствует 0x0000).
80
81       6.  При кодировании длин используются соглашения big-endian.
82

Ответы APDU

84       Реализованы следующие правила (см. СТБ 34.101.79, п. 12.1):
85
86       1.  Обязательными компонентами ответа являются статусы обработки
87           команды SW1 и SW2 (1 октет каждый).
88
89       2.  Необязательным для ответа является компонент RDF (массив октетов),
90           который содержит данные ответа.
91

Функции

93   size_t apduCmdDec (apdu_cmd_t * cmd, const octet apdu[], size_t count)
94       Определяется длина буфера памяти для размещения команды, представленной
95       кодом [count]apdu. Если cmd != 0, то команда размещается по этому
96       адресу.
97
98       Предусловие
99           Буфер [count]apdu корректен.
100
101           Если адрес cmd != 0, то по этому адресу зарезервировано
102           apduCmdDer(0, apdu, count) октетов.
103
104           Буферы apdu и cmd не пересекаются.
105
106       Возвращает
107           Число октетов для размещения команды или SIZE_MAX в случае ошибки.
108
109       Аргументы
110           cmd команда
111           apdu код команды
112           count длина apdu в октетах
113
114   size_t apduCmdEnc (octet apdu[], const apdu_cmd_t * cmd)
115       Определяется число октетов в коде команды cmd. Если apdu != 0, то код
116       размещается по этому адресу.
117
118       Предусловие
119           Команда cmd корректна.
120
121           Если адрес apdu != 0, то по этому адресу зарезервировано
122           apduCmdEnc(0, cmd) октетов.
123
124       Прим.
125           Буферы apdu и cmd не пересекаются.
126
127       Возвращает
128           Число октетов в коде или SIZE_MAX в случае ошибки.
129
130       Аргументы
131           apdu код команды
132           cmd команда
133
134   bool_t apduCmdIsValid (const apdu_cmd_t * cmd)
135       Проверяется корректность команды cmd.
136
137       Возвращает
138           Признак корректности.
139
140       Аргументы
141           cmd команда
142
143   size_t apduRespDec (apdu_resp_t * resp, const octet apdu[], size_t count)
144       Определяется длина буфера памяти для размещения ответа, представленного
145       кодом [count]apdu. Если resp != 0, то ответ размещается по этому
146       адресу.
147
148       Предусловие
149           Буфер [count]apdu корректен.
150
151           Если адрес resp != 0, то по этому адресу зарезервировано
152           apduRespDer(0, apdu, count) октетов.
153
154       Прим.
155           Буферы apdu и resp не пересекаются.
156
157       Возвращает
158           Число октетов для размещения ответа или SIZE_MAX в случае ошибки.
159
160       Аргументы
161           resp ответ
162           apdu код ответа
163           count длина apdu в октетах
164
165   size_t apduRespEnc (octet apdu[], const apdu_resp_t * resp)
166       Определяется число октетов в коде ответа resp. Если apdu != 0, то код
167       размещается по этому адресу.
168
169       Предусловие
170           Ответ resp корректен.
171
172           Если адрес apdu != 0, то по этому адресу зарезервировано
173           apduRespEnc(0, resp) октетов.
174
175       Прим.
176           Буферы apdu и resp не пересекаются.
177
178       Возвращает
179           Число октетов в коде или SIZE_MAX в случае ошибки.
180
181       Аргументы
182           apdu код ответа
183           resp ответ
184
185   bool_t apduRespIsValid (const apdu_resp_t * resp)
186       Проверяется корректность ответа resp.
187
188       Возвращает
189           Признак корректности.
190
191       Аргументы
192           resp ответ
193

Автор

195       Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.
196
197
198
199Библиотека Bee2                 Пт 23 Июн 2023                       apdu.h(3)
Impressum