1apdu.h(3) Library Functions Manual apdu.h(3)
2
3
4
6 apdu.h - Команды и ответы смарт-карт
7
8
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
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
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 Ср 19 Июл 2023 00:00:00 apdu.h(3)