Sponsor:

Your company here, and a link to your site. Click to find out more.

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):

  1. Обязательными компонентами ответа являются статусы обработки команды SW1 и SW2 (1 октет каждый).
  2. Необязательным для ответа является компонент 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 из исходного текста.

Info

Вт 23 Янв 2024 00:00:00 Библиотека Bee2