apdu.h - Man Page
Команды и ответы смарт-карт
Synopsis
#include 'bee2/defs.h'
Классы
struct apdu_cmd_t
Команда APDU.
struct apdu_resp_t
Ответ APDU.
Функции
bool_t apduCmdIsValid (const apdu_cmd_t *cmd)
Корректная команда?
size_t apduCmdEnc (octet apdu[], const apdu_cmd_t *cmd)
Кодирование команды
size_t apduCmdDec (apdu_cmd_t *cmd, const octet apdu[], size_t count)
Декодирование команды
bool_t apduRespIsValid (const apdu_resp_t *resp)
Корректный ответ?
size_t apduRespEnc (octet apdu[], const apdu_resp_t *resp)
Кодирование ответа
size_t apduRespDec (apdu_resp_t *resp, const octet apdu[], size_t count)
Декодирование ответа
Подробное описание
Команды APDU
Ренализованы следующие правила (см. СТБ 34.101.79, п. 12.1):
- 1.
Обязательными компонентами команды являются:
- ·
СLA -- класс команды (1 октет);
- ·
INS -- инструкция команды (1 октет),
- ·
P1 и P2 -- параметры команды (1 октет каждый).
- 2.
Необязательным для команды является компонент CDF (массив октетов), который содержит данные команды. Если компонент CDF присутствует, то команда должна также содержать необязательный компонент Lc, определяющий длину CDF.
- 3.
Если при выполнении команды ожидается, что в ответе будет содержаться компонент RDF (см. далее), то команда должна содержать необязательный компонент Le, определяющий максимально возможную длину компонента RDF в ожидаемом ответе.
- 4.
При наличии в команде компонентов Lc и Le они могут быть представлены в короткой или расширенной форме. Форма Le должна соответствовать форме Lc.
- 5.
Короткая и расширенная формы определяются следующим образом:
- ·
Lc в короткой форме состоит из одного октета, отличного от 0x00 и определяющего значения от 1 до 255;
- ·
Lc в расширенной форме состоит из трех октетов, при этом первый октет равен 0x00, а остальные два октета отличны от 0x0000 и определяют значения от 1 до 65535;
- ·
Le в короткой форме состоит из одного октета, определяющего значения от 1 до 256 (значению 256 соответствует 0x00);
- ·
если компонент Lc присутствует в команде, то Le в расширенной форме состоит из двух октетов, которые определяют значения от 1 до 65536 (значению 65536 соответствует 0x0000);
- ·
если компонент Lc отсутствует в команде, то Le в расширенной форме состоит из трех октетов, при этом первый октет равен 0x00, а следующие два октета определяют значения от 1 до 65536 (значению 65536 соответствует 0x0000).
- 6.
При кодировании длин используются соглашения big-endian.
Ответы APDU
Реализованы следующие правила (см. СТБ 34.101.79, п. 12.1):
- Обязательными компонентами ответа являются статусы обработки команды SW1 и SW2 (1 октет каждый).
- Необязательным для ответа является компонент RDF (массив октетов), который содержит данные ответа.
Функции
size_t apduCmdDec (apdu_cmd_t * cmd, const octet apdu[], size_t count)
Определяется длина буфера памяти для размещения команды, представленной кодом [count]apdu. Если cmd != 0, то команда размещается по этому адресу.
Предусловие
Буфер [count]apdu корректен.
Если адрес cmd != 0, то по этому адресу зарезервировано apduCmdDer(0, apdu, count) октетов.
Буферы apdu и cmd не пересекаются.
Возвращает
Число октетов для размещения команды или SIZE_MAX в случае ошибки.
- Аргументы
cmd команда
apdu код команды
count длина apdu в октетах
size_t apduCmdEnc (octet apdu[], const apdu_cmd_t * cmd)
Определяется число октетов в коде команды cmd. Если apdu != 0, то код размещается по этому адресу.
Предусловие
Команда cmd корректна.
Если адрес apdu != 0, то по этому адресу зарезервировано apduCmdEnc(0, cmd) октетов.
Прим.
Буферы apdu и cmd не пересекаются.
Возвращает
Число октетов в коде или SIZE_MAX в случае ошибки.
- Аргументы
apdu код команды
cmd команда
bool_t apduCmdIsValid (const apdu_cmd_t * cmd)
Проверяется корректность команды cmd.
Возвращает
Признак корректности.
- Аргументы
cmd команда
size_t apduRespDec (apdu_resp_t * resp, const octet apdu[], size_t count)
Определяется длина буфера памяти для размещения ответа, представленного кодом [count]apdu. Если resp != 0, то ответ размещается по этому адресу.
Предусловие
Буфер [count]apdu корректен.
Если адрес resp != 0, то по этому адресу зарезервировано apduRespDer(0, apdu, count) октетов.
Прим.
Буферы apdu и resp не пересекаются.
Возвращает
Число октетов для размещения ответа или SIZE_MAX в случае ошибки.
- Аргументы
resp ответ
apdu код ответа
count длина apdu в октетах
size_t apduRespEnc (octet apdu[], const apdu_resp_t * resp)
Определяется число октетов в коде ответа resp. Если apdu != 0, то код размещается по этому адресу.
Предусловие
Ответ resp корректен.
Если адрес apdu != 0, то по этому адресу зарезервировано apduRespEnc(0, resp) октетов.
Прим.
Буферы apdu и resp не пересекаются.
Возвращает
Число октетов в коде или SIZE_MAX в случае ошибки.
- Аргументы
apdu код ответа
resp ответ
bool_t apduRespIsValid (const apdu_resp_t * resp)
Проверяется корректность ответа resp.
Возвращает
Признак корректности.
- Аргументы
resp ответ
Автор
Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.