Cdex pg

49
SMART-CARD Smart- !" !# $## !"#$% 49 2001

description

 

Transcript of Cdex pg

Page 1: Cdex pg

УТВЕРЖДЁН

СИСТЕМА УЧЕТА ПОТРЕБЛЕНИЯ РЕСУРСОВ И БЕЗНАЛИЧНЫХ РАСЧЕТОВ С ИСПОЛЬЗОВАНИЕМ SMART-CARD

Программное обеспечение для поддержки Smart-карт

Модуль для расширенной экспертизы карт пользователя

Руководство программиста

Листов 49

2001

Page 2: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 2 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

Аннотация Данный документ содержит описание функций (в стиле языка С), входящих вдинамически загружаемую библиотеку cdexp.dll.Приводится необходимая справочная информация, сведения о возможных ошибках,возникающих при работе функций библиотеки.

Page 3: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 3 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

Оглавление

1. ТЕРМИНОЛОГИЯ И УСЛОВНЫЕ ОБОЗНАЧЕНИЯ (ГЛОССАРИЙ)..................................... 4

СИСТЕМА....................................................................................................................................................... 4 СТАНДАРТЫ ШИФРОВАНИЯ........................................................................................................................... 4 КАРТЫ СИСТЕМЫ И ИНФОРМАЦИЯ НА КАРТАХ ............................................................................................. 4 КЛЮЧИ СИСТЕМЫ.......................................................................................................................................... 5

2. НАЗНАЧЕНИЕ БИБЛИОТЕКИ CDEXP.DLL................................................................................. 6

3. ОБЩИЕ СВЕДЕНИЯ ........................................................................................................................... 6

3. ОПИСАНИЕ ФУНКЦИЙ БИБЛИОТЕКИ CDEXP.DLL............................................................... 8

3.1. ФУНКЦИЯ CDEXPCHECKACCESSCARD ......................................................................................... 8 3.2. ФУНКЦИЯ CDEXPCONNECTSAMCARD ......................................................................................... 9 3.3. ФУНКЦИЯ CDEXPCONNECTUSERCARD ......................................................................................... 9 3.4. ФУНКЦИЯ CDEXPCLOSECARD ..................................................................................................... 10 3.5. ФУНКЦИЯ CDEXPGETCARDSTAT................................................................................................. 10 3.6. ФУНКЦИЯ CDEXPGETCHALLENGE .............................................................................................. 11 3.7. ФУНКЦИЯ CDEXPSELECTFILEINCARD ........................................................................................ 12 3.8. ФУНКЦИЯ CDEXPREADFILERECORD .......................................................................................... 12 3.9. ФУНКЦИЯ CDEXPUPDATEFILERECORD ...................................................................................... 13 3.10. ФУНКЦИЯ CDEXPSTATICAUTH ................................................................................................ 14 3.11. ФУНКЦИЯ CDEXPEXTERNALAUTH .......................................................................................... 15 3.12. ФУНКЦИЯ CDEXPINTERNALAUTH ........................................................................................... 16 3.13. ФУНКЦИЯ CDEXPDEBITTRANSACTION .................................................................................... 17 3.14. ФУНКЦИЯ CDEXPCREDITTRANSACTION ................................................................................. 19 3.15. ФУНКЦИЯ CDEXPGETCARDDATA............................................................................................ 20 3.16. ФУНКЦИЯ CDEXPGETPURSEDATA........................................................................................... 22 3.17. ФУНКЦИЯ CDEXPUPDATEMAXAMOUNT ................................................................................. 23

4. ПРИЛОЖЕНИЯ................................................................................................................................... 25

4.1. СООБЩЕНИЯ ОБ ОШИБКАХ........................................................................................................... 25 4.2. ПРИМЕР ВЫЗОВА ФУНКЦИЙ МОДУЛЯ ИЗ ПРОГРАММЫ (BORLAND C++ V.5.01) ....................... 29 4.3. ФОРМАТЫ КОМАНД, ПОДАВАЕМЫХ НА КАРТУ И ВОЗВРАЩАЕМЫЙ КОД СТАТУСА .................. 42

Page 4: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 4 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

1. Терминология и условные обозначения (Глоссарий)

Система СУПР – Система учета потребления ресурсов и безналичных расчетов сиспользованием smart-карт (название системы). Payflex - Интеллектуальная (smart) карта фирмы Schlumberger, которая положена воснову систем безналичных расчетов, разрабатываемых компанией Dekart S.R.L. SCR-60, Reflex 60, Reflex 72 (Schlumberger), TOWITOKO ChipDrive - считыватели smart-карт, использующиеся в отдельных технологических звеньях СУПР. Работают только совместно с компьютером, и управляются программным обеспечением,работающем на компьютере.Эмитент - организация, выполняющая персонализацию карт держателей, ведущая базы карт-счетов держателей и обрабатывающая платёжные транзакции.ПЦ - процессинговый центр. Подразделение (участник) системы, в задачи которого входит обслуживание терминального поля, сбор транзакций от терминалов, их сортировку и рассылку эмитентам.ЦС – центр системы. Организация, занимающаяся предварительной персонализацией карт держателей и их передачей эмитентам (участникам системы). ЦСК - центр сертификации ключей (Certificate authority). Организация,обеспечивающая сертификацию ключей участников системы.Примечание. В СУПР функции центра системы и центра сертификации ключей выполняет одна организация.Держатель карты - физическое лицо, использующее карту в качестве платёжного инструмента при оплате товара или услуги.Платежная единица – условная товаро-денежная единица (рубли, леи, доллары,литры, кВт·ч. и т.д.), используемая в СУПР в качестве средства платежа.

Стандарты шифрования DES (Data Encryption Standard) - Стандарт шифрования данных. Симметричная система шифрования с длиной ключа и шифруемого блока данных 64 бита.Эффективная длина ключа на самом деле равна 56 (один бит каждого байта используется в качестве контрольного). RSA - система шифрования на основе открытых ключей. Применяется в системе для статической аутентификации карт держателей.SHS (Secure Hash Standard) - Стандарт на хеш-функцию. Стандарт определяет алгоритм Secure Hash Algorithm (SHA-1), который может использоваться для создания "сжатого" представления некоторой последовательности. Такое представление носит название дайджеста последовательности.

Карты системы и информация на картах SAM (Secure Application Module) – специальная карта, которая обеспечивает безопасность при операциях дебетования и кредитования.Карта доступа (или карта персональных ключей) – специальная карта, которая предназначена для защищенного хранения ключа (ключей) доступа ответственных лиц системы. Карта доступа принадлежит конкретному ответственному лицу системы и защищена его персональным идентификационным номером (PIN-кодом). Серийный номер карты - неизменяемая, уникальная для каждой карты двоичная последовательность длиной 8 байт, записываемая на карту заводом изготовителем.

Page 5: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 5 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

BIN (Bank Identification Number) – идентификационный номер эмитента (8 цифр), составленный в соответствии со стандартом ISO. PIN (Personal Identification Number) – персональный идентификационный номер пользователя (от 4 до 8 десятичных цифр). Владелец карты обязан держать свой PIN - код в секрете.PAN (Primary Account Number) – номер карты (19 цифр), первые 8 цифр которого соответствуют BIN. ID (Identifier) – идентификатор (8 цифр), определяющий имена файлов, в которых записываются RSA ключи процессингового центра и эмитента, запрос на сертификацию и сертификат, а также PAN-коды эмитента. Совпадает с BIN.

Ключи системы Ключи доступа – внутренние ключи, которые хранятся на карте доступа иприменяются для «открытия» различных технологических приложений системы,причем в большинстве случаев они служат для активизации других (секретных)ключей системы.Диверсификация ключа - "распыление" ключа. Используется для индивидуализации внутренних ключей карт держателей.Мастер ключ - секретный ключ симметричной системы шифрования, используемый в системе для диверсификации ключей карт держателей.Модуль - открытая часть ключа системы шифрования RSA. Экспонента - открытая часть ключа RSA. Может быть равной 3 либо четвёртому числу Ферма (Fermat 4 = 2^2^4+1 = 65537). В СУПР экспонента равна 3.Сертификат - двоичная последовательность, получаемая специальными криптографическими методами и служащая для проверки достоверности некоторой последовательности данных.Случайная последовательность - последовательность двоичных данных, которая создаётся специальными механизмами в картах и терминалах для модификации сообщений с целью индивидуализации протокола обмена от одного сеанса к другому

Page 6: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 6 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

2. Назначение библиотеки cdexp.dll Модуль cdexp.dll предназначен для получения (извлечения) данных из файлов

карт пользователя, проверки их целостности и аутентичности, т.е. выполнения расширенной экспертизы карт пользователя. Подобная экспертиза необходима при расследовании сбойных или чрезвычайных ситуаций, произошедших в процессе эксплуатации СУПР. В связи с этим модуль позволяет получать максимально полную информацию из карты в соответствии с предъявленными полномочиями.

Модуль используется эмитентом.

3. Общие сведения

Динамически загружаемая библиотека cdexp.dll включает в себя следующие функции:

Используемые smart-карты №

п/п Название Досту-па SAM Пользо

вателя

Обязательный предварительный вызов функций

Необязательный предварительный вызов функций

1 CDexpCheckAccessCard + - - - 2 CDexpConnectSAMCard - + - - 16 3 CDexpConnectUserCard - - + - 16

4 CDexpGetChallenge - +-

-+

2/ 3

5 CDexpSelectFileInCard - +-

-+

2/ 3

6 CDexpStaticAuth +- +

--+

1, 2/ 3

7 CDexpExternalAuth - + + 2/ 3

8 CDexpInternalAuth - + + 2/ 3

9 CDexpReadFileRecord - +

--+

2/ 3, 5

10 CDexpUpdateFileRecord - + + 2/3, 7, 8, 5

11 CDexpDebitTransaction

++

+

1, 2, 3,

7, 8

6

12 CDexpCreditTransaction

++

+

1, 2, 3,

7, 8

6

13 CDexpUpdatetMaxAmount

- + + 2

14 CDexpGetCardData +- +

1, 2

Page 7: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 7 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

15 CDexpGetPurseData +- +

1, 2

16 CDexpCloseCard 17 CDexpGetCardStat Могут выполняться после любой из вышеперечисленных функций

Функции, входящие в модуль cdexp.dll, реализованы на языках программирования С, C++. Необходимое оборудование:• Компьютер IBM PC (486 и выше), имеющий свободные последовательные порты;

• Smart-карты: карта доступа эмитента, карта пользователя, SAM-карта;• Считыватель smart-карт одного из следующих типов: SCR-60, Reflex 60, Reflex 72

(Schlumberger), TOWITOKO ChipDrive. Необходимое программное обеспечение:• Операционная система MS Windows 9x, NT; • CT API для считывателей TOWITOKO ChipDrive и Schlumberger Reflex 72; • Файл третьей ключей эмитента ID_эмитента.SE3; • Файл открытого ключа ID_ЦС/ЦСК.KEY. Установка модуля cdexp.dll осуществляется простым его копированием всоответствующий каталог (SYSTEM, SYSTEM32) системы Windows.

Page 8: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 8 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

3. Описание функций библиотеки cdexp.dll

3.1. Функция CDexpCheckAccessCard

Название: CDexpCheckAccessCard Назначение: Функция проверяет наличие в считывателе карты доступа. Если она

присутствует, то ей предъявляется указанный PIN-код и с карты доступа считывается её серийный номер. Функция также определяет наличие файла с открытым ключом ЦС/ЦСК (CA_ID.KEY) или стретьей группой ключей эмитента (ISS_ID.SE3) и, если он обнаружен,то производится его «подключение» к модулю.Примечание: Перед завершением коммуникационный порт (считыватель) освобождается.

Условия применения:Необходимо наличие карты доступа и файла с ключами центра платёжной системы.

Синтаксис: #include "CDexp.h" int CDexpCheckAccessCard(char *Port, short ReaderType, char *IccNo,

char *KeyFile, char *PIN, char *ISOcmd, char *Data, char *SW1SW2)

Входные данные:Port – указатель на строку содержащую имя коммуникационного порта (например COM1, COM2, COM3, COM4).

ReaderType – целое число, указывающее тип считывателя.Поддерживаются 4 типа считывателей:

№ п.п. Производитель / Название ReaderType 1 Schlumberger / SCR 60 0 2 Schlumberger / Reflex 60 1 3 TOWITOKO / ChipDrive 2 4 Schlumberger / Reflex 72 3

KeyFile – указатель на строку, содержащую путь и имя файла сключами ЦС/ЦСК (CA_ID.KEY) или с третьей группой ключей эмитента (ISS_ID.SE3). PIN – указатель на строку, содержащую PIN–код карты доступа. PIN–код может состоять от 4 до 8 десятичных цифр.

Выходные данные:IccNo – указатель на буфер (строку), в котором будет возвращён серийный номер карты доступа. Размер буфера должен быть не менее 33 байтов.ISOcmd – указатель на буфер (строку), в котором будут возвращены составные части команды, подаваемой на карту (согласно ISO) - CLA||INS||P1||P2||P3. Размер буфера должен быть не менее 17 байтов (см. п. 4.3).

Page 9: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 9 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

Data - указатель на буфер (строку), в котором будут возвращены данные, необходимые для выполнения соответствующей команды.Размер буфера должен быть достаточным (не менее 256 байтов). SW1SW2 - указатель на буфер (строку), в котором будут возвращены байты – результат выполнения команды в карте. Размер буфера должен быть не менее 12 байтов (см. п. 4.3).

Возвращаемое значение:

1 – в случае успешного завершения программы, иначе отрицательное значение кода ошибки (см. коды ошибок п.4.1).

Пример вызова функции из программы (BC++ v.5.01) см. п.4.2

3.2. Функция CDexpConnectSAMCard

Название: CDexpConnectSAMCard Назначение: Функция проверяет наличие в считывателе SAM карты. Если карта

присутствует, то она становится доступной для других функций.Условия применения: Необходимо наличие SAM-карты.Синтаксис: #include "CDexp.h"

HANDLE CDexpConnectSAMCard (char *Port, short ReaderType) Входные данные:

Port – указатель на строку, содержащую имя коммуникационного порта (см. п. 3.1).

ReaderType – целое число, указывающее тип считывателя (см. п. 3.1). Возвращаемое значение:

HANDLE (дескриптор, логический номер, связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится SAM-карта) – при успешном завершении программы, иначе отрицательное значение кода ошибки (см. коды ошибок в п.4.1)Примечание. Перед обращением к функции CDexpConnectSAMCard необходимо предварительно удостовериться, что коммуникационный порт не был ранее открыт для работы с другой картой (см. п.3.4).

Ограничения: Необходимо соблюдения строгого соответствия типа считывателя (ReaderType) с реальным считывателем, подключённым к данному последовательному порту. Несоблюдение этого ограничения приводит к непредсказуемым результатам.

Пример вызова функции из программы (BC++ v.5.01) см. п.4.2

3.3. Функция CDexpConnectUserCard

Название: CDexpConnectUserCard Назначение: Функция проверяет наличие в считывателе карты пользователя. Если

карта присутствует, то она становится доступной для других функций.Условия применения: Необходимо наличие карты пользователя.Синтаксис: #include "CDexp.h"

Page 10: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 10 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

HANDLE CDexpConnectUserCard (char *Port, short ReaderType) Входные данные:

Port – указатель на строку, содержащую имя коммуникационного порта (см. п. 3.1).

ReaderType – целое число, указывающее тип считывателя (см. п. 3.1). Возвращаемое значение:

HANDLE (дескриптор, логический номер, связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится карта пользователя) – если успешное завершение программы, иначе отрицательное значение кода ошибки (см. коды ошибок в п.4.1).

Примечание. Перед обращением к функции CDexpConnectUserCard необходимо предварительно удостовериться, что коммуникационный порт не был ранее открыт для работы с другой картой (см. п.3.4).

Ограничения: Необходимо соблюдения строгого соответствия типа считывателя (ReaderType) с реальным считывателем, подключённым к данному последовательному порту. Несоблюдение этого ограничения приводит к непредсказуемым результатам.

Пример вызова функции из программы (BC++ v.5.01) см. п.4.2

3.4. Функция CDexpCloseCard

Название: CDexpCloseCard Назначение: Функция завершает работу с картой, вставленной в считыватель,

закрывает и освобождает порт.Условия применения:

Необходимо наличие любой из вышеперечисленных smart-карт.Синтаксис: #include "CDexp.h"

BOOL CDexpCloseCard (HANDLE hcd) Входные данные:

hcd – логический номер (HANDLE), связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится карта.

Возвращаемое значение: True, если успешное завершение программы, иначе – False. Пример вызова функции из программы (BC++ v.5.01) см. п.4.2

3.5. Функция CDexpGetCardStat

Название: CDexpGetCardStat Назначение: В соответствии со значением кода ошибки функция выдает

расширенное сообщение об ошибке. Данная функция может быть использована после любой функции модуля для диагностики выполнения операции в карте.

Условия применения:Необходимо наличие любой из вышеперечисленных smart-карт.

Синтаксис: #include "CDexp.h"

Page 11: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 11 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

void CDexpGetCardStat (char *msgbuf) Входные данные: отсутствуют.Выходные данные:

msgbuf – указатель на буфер (строку), в котором будет возвращено сообщение об ошибке. Размер буфера должен быть не менее 80 байт.

Ограничения:Функция должна вызываться непосредственно за функцией,вызвавшей ошибку в карте, иначе возвращаемое сообщение будет содержать «мусор».

Пример вызова функции из программы (BC++ v.5.01) см. п.4.2

3.6. Функция CDexpGetChallenge

Название: CDexpGetChallenge Назначение:

Функция получает случайное число, формируемое картой, изаписывает его в буфер. Также может быть использована для определения наличия карты в считывателе.

Условия применения:Необходимо наличие SAM-карты или карты пользователя. Перед обращением к функции CDexpGetChallenge необходимо предварительно вызвать функцию CDexpConnectUserCard или CDexpConnectSAMCard (если это не было выполнено ранее).

Синтаксис: #include "CDexp.h" BOOL CDexpGetChallenge (HANDLE hcd, char *buf,

char *ISOcmd, char *Data, char *SW1SW2) Входные данные:

hcd – логический номер (HANDLE), связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится карта.

Выходные данные:buf - указатель на буфер (строку), в котором функция возвращает случайную последовательность в формате ASCII в шестнадцатеричном коде. Размер буфера должен быть не менее 17 байт.ISOcmd – указатель на буфер (строку), в котором будут возвращены составные части команды, подаваемой на карту (согласно ISO) - CLA||INS||P1||P2||P3. Размер буфера должен быть не менее 17 байтов (см. п. 4.3). Data - указатель на буфер (строку), в котором будут возвращены данные, необходимые для выполнения соответствующей команды.Размер буфера должен быть достаточным (не менее 256 байтов). SW1SW2 - указатель на буфер (строку), в котором будут возвращены байты – результат выполнения команды в карте. Размер буфера должен быть не менее 12 байтов (см. п. 4.3).

Возвращаемое значение: True, если успешное завершение программы, иначе – False. Одной из причин появления результата False может быть отсутствие карты в считывателе.

Пример вызова функции из программы (BC++ v.5.01) см. п.4.2

Page 12: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 12 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

3.7. Функция CDexpSelectFileInCard

Название: CDexpSelectFileInCard Назначение: Функция проверяет наличие в карте указанного файла. Если данный

файл присутствует, то он делается текущим.Условия применения:

Необходимо наличие SAM-карты или карты пользователя. Перед обращением к функции CDexpSelectFileInCard необходимо предварительно вызвать функцию CDexpConnectUserCard или CDexpConnectSAMCard (если это не было выполнено ранее).

Синтаксис: #include "CDexp.h" BOOL CDexpSelectFileInCard (HANDLE hcd, char *FID,

char *ISOcmd, char *Data, char *SW1SW2) Входные данные:

hcd – логический номер (HANDLE), связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится карта.FID – указатель на строку, содержащую идентификатор (имя) файла.

Выходные данные:ISOcmd – указатель на буфер (строку), в котором будут возвращены составные части команды, подаваемой на карту (согласно ISO) - CLA||INS||P1||P2||P3. Размер буфера должен быть не менее 17 байтов (см. п. 4.3). Data - указатель на буфер (строку), в котором будут возвращены данные, необходимые для выполнения соответствующей команды.Размер буфера должен быть достаточным (не менее 256 байтов). SW1SW2 - указатель на буфер (строку), в котором будут возвращены байты – результат выполнения команды в карте. Размер буфера должен быть не менее 12 байтов (см. п. 4.3).

Возвращаемое значение: В случае успешного завершения программы - True, иначе False, при этом расширенное сообщение об ошибке карты можно получить с помощью функции CDexpGetCardStat.

Пример вызова функции из программы (BC++ v.5.01) см. п.4.2

3.8. Функция CDexpReadFileRecord

Название: CDexpReadFileRecord Назначение: Функция CDexpReadFileRecord проверяет наличие в карте указанного

файла. Если данный файл присутствует, то производится чтение из него выбранной записи.

Условия применения:Необходимо наличие SAM-карты или карты пользователя. Перед обращением к функции CDexpReadFileRecord необходимо предварительно вызвать функцию CDexpConnectUserCard или CDexpConnectSAMCard (если это не было выполнено ранее), а также

Page 13: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 13 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

выбрать соответствующий уровень в иерархии файлов с помощью функции CDexpSelectFileInCard.

Синтаксис: #include "CDexp.h" BOOL CDexpReadFileRecord (HANDLE hcd, short rcNo, short len,

char *buf, char *ISOcmd, char *Data, char *SW1SW2) Входные данные:

hcd – логический номер (HANDLE), связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится карта.rcNo – номер записи для чтения, целое число. Примечание: нумерация начинается с 1.len – длина записи в байтах, целое число.buf – указатель на буфер (строка), в котором будет возвращена прочитанная запись из файла. Размер буфера должен быть не менее 2·len + 1.

Выходные данные:ISOcmd – указатель на буфер (строку), в котором будут возвращены составные части команды, подаваемой на карту (согласно ISO) - CLA||INS||P1||P2||P3. Размер буфера должен быть не менее 17 байтов (см. п. 4.3). Data - указатель на буфер (строку), в котором будут возвращены данные, необходимые для выполнения соответствующей команды.Размер буфера должен быть достаточным (не менее 256 байтов). SW1SW2 - указатель на буфер (строку), в котором будут возвращены байты – результат выполнения команды в карте. Размер буфера должен быть не менее 12 байтов (см. п. 4.3).

Возвращаемое значение: True, если успешное завершение программы, иначе False. Вслучае False, расширенное сообщение об ошибке карты можно получить с помощью функции CDexpGetCardStat.

Ограничения: Номер запись (rcNo) и длина записи (len) не могут быть больше 255. Кроме того, эти величины должны точно соответствовать структуре выбранного файла.

Пример вызова функции из программы (BC++ v.5.01) см. п.4.2

3.9. Функция CDexpUpdateFileRecord

Название: CDexpUpdateFileRecord Назначение: Функция CDexpUpdateFileRecord проверяет наличие в карте

указанного файла. Если данный файл присутствует, то производится замена выбранной записи.

Условия применения:Необходимо наличие SAM-карты или карты пользователя. Перед обращением к функции CDexpUpdateFileRecord необходимо предварительно вызвать функцию CDexpConnectUserCard или CDexpConnectSAMCard (если это не было выполнено ранее), а также выбрать соответствующий уровень в иерархии файлов с помощью функции CDexpSelectFileInCard и предъявить соответствующий

Page 14: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 14 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

ключ. Например, для замены записи в файле “8400” требуется выполнить внешнюю и внутреннюю аутентификацию (функции CDexpExternalAuth и CDexpInternalAuth).

Синтаксис: #include "CDexp.h" int CDexpUpdateFileRecord (HANDLE hcd, short rcNo, short len,

char *buf, char *ISOcmd, char *Data, char *SW1SW2) Входные данные:

hcd – логический номер (HANDLE), связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится карта.rcNo – номер записи для чтения, целое число. Примечание: нумерация начинается с 1.len – длина записи в байтах, целое число.buf – указатель на буфер (строка), в котором находится запись для замены (в формате ASCII).

Выходные данные:ISOcmd – указатель на буфер (строку), в котором будут возвращены составные части команды, подаваемой на карту (согласно ISO) - CLA||INS||P1||P2||P3. Размер буфера должен быть не менее 17 байтов (см. п. 4.3). Data - указатель на буфер (строку), в котором будут возвращены данные, необходимые для выполнения соответствующей команды.Размер буфера должен быть достаточным (не менее 256 байтов). SW1SW2 - указатель на буфер (строку), в котором будут возвращены байты – результат выполнения команды в карте. Размер буфера должен быть не менее 12 байтов (см. п. 4.3).

Возвращаемое значение: 1, если успешное завершение программы, иначе 0 (ошибка карты) или отрицательное значение кода ошибки (см. коды ошибок). Вслучае 0 расширенное сообщение об ошибке карты можно получить спомощью функции CDexpGetCardStat.

Ограничения: Номер запись (rcNo) и длина записи (len) не могут быть больше 255. Кроме того, эти величины должны точно соответствовать структуре выбранного файла.

Пример вызова функции из программы (BC++ v.5.01) см. п.4.2

3.10. Функция CDexpStaticAuth

Название: CDexpStaticAuth Назначение: Функция CDexpStaticAuth выполняет статическую аутентификацию

карты, которая включает проверку верности статических данных на карте, принадлежность карты данной системе и эмитенту. Данная проверка является «сильной», т.к., по сути, осуществляется проверка цифровой подписи.

Условия применения:Необходимо наличие карты пользователя или SAM-карты. Перед обращением к функции CDexpStaticAuth необходимо предварительно «подключить» файл с ключами ЦС/ЦСК (функция

Page 15: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 15 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

CdexpCheckAccessCard и файл ключей CA_ID.KEY) и вызвать функцию CDexpConnectUserCard или CDexpConnectSAMCard (если это не было выполнено ранее).

Синтаксис: #include "CDexp.h" int CDexpStaticAuth (HANDLE hcd,

char *ISOcmd, char *Data, char *SW1SW2) Входные данные:

hcd – логический номер (HANDLE), связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится карта.

Выходные данные:ISOcmd – указатель на буфер (строку), в котором будут возвращены составные части команды, подаваемой на карту (согласно ISO) - CLA||INS||P1||P2||P3. Размер буфера должен быть не менее 17 байтов (см. п. 4.3). Data - указатель на буфер (строку), в котором будут возвращены данные, необходимые для выполнения соответствующей команды.Размер буфера должен быть достаточным (не менее 256 байтов). SW1SW2 - указатель на буфер (строку), в котором будут возвращены байты – результат выполнения команды в карте. Размер буфера должен быть не менее 12 байтов (см. п. 4.3).

Возвращаемое значение:1 - успешное завершение программы;0 - ошибка карты (расширенное сообщение об ошибке карты можно получить с помощью функции CDexpGetCardStat); отрицательное значение кода ошибки (см. коды ошибок в п.4.1).

Пример вызова функции из программы (BC++ v.5.01) см. п.4.2

3.11. Функция CDexpExternalAuth

Название: CDexpExternalAuth Назначение: Функция CDexpExternalAuth выполняет внешнюю аутентификацию,

которая означает, что карта пользователя проверяет, является ли корректной SAM карта. Аутентификация представляет собой проверку верности ключей в SAM модуле. Она является проверкой MAC значения полученного при помощи алгоритма DES. Эта проверка является более слабой, чем проверка, выполняемая функцией CDexpStaticAuth.

Условия применения:Необходимо наличие SAM-карты и карты пользователя. Перед обращением к функции CDexpExternalAuth необходимо предварительно вызвать функции CDexpConnectUserCard иCDexpConnectSAMCard (если это не было выполнено ранее).

Синтаксис: #include "CDexp.h" BOOL CDexpExternalAuth (HANDLE hcd_user, HANDLE hcd_SAM,

char *ISOcmd, char *Data, char *SW1SW2) Входные данные:

Page 16: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 16 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

hcd_user – логический номер (HANDLE), связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится карта пользователя.hcd_ SAM – логический номер (HANDLE), связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится SAM-карта.

Выходные данные:ISOcmd – указатель на буфер (строку), в котором будут возвращены составные части команды, подаваемой на карту (согласно ISO) - CLA||INS||P1||P2||P3. Размер буфера должен быть не менее 17 байтов (см. п. 4.3). Data - указатель на буфер (строку), в котором будут возвращены данные, необходимые для выполнения соответствующей команды.Размер буфера должен быть достаточным (не менее 256 байтов). SW1SW2 - указатель на буфер (строку), в котором будут возвращены байты – результат выполнения команды в карте. Размер буфера должен быть не менее 12 байтов (см. п. 4.3).

Возвращаемое значение:True, если успешное завершение программы, иначе False. В случае False, расширенное сообщение об ошибке карты можно получить спомощью функции CDexpGetCardStat.

Ограничения:Если ключи SAM карты не соответствуют ключам карты пользователя,то уменьшается счётчик попыток соответствующего ключа в карте пользователя. При исчерпании всех (обычно 3-х) попыток соответствующий ключ блокируется. Если аутентификация проходит успешно, то счётчик попыток соответствующего ключа устанавливается в максимальное значение (обычно 3).

Пример вызова функции из программы (BC++ v.5.01) см. п.4.2

3.12. Функция CDexpInternalAuth

Название: CDexpInternalAuth Назначение: Функция CDexpInternalAuth выполняет внутреннюю

аутентификацию, которая означает, что SAM карта проверяет,является ли корректной карта пользователя. Аутентификация представляет собой проверку верности ключей карты пользователя.Она является проверкой MAC значения, полученного при помощи алгоритма DES. Данная проверка является более слабой, чем проверка,выполняемая функцией CDexpStaticAuth.

Условия применения:Необходимо наличие SAM-карты и карты пользователя. Перед обращением к функции CDexpInternalAuth необходимо предварительно вызвать функции CDexpConnectUserCard иCDexpConnectSAMCard (если это не было выполнено ранее).

Синтаксис: #include "CDexp.h" BOOL InternalAuth (HANDLE hcd_user, HANDLE hcd_SAM,

char *ISOcmd, char *Data, char *SW1SW2)

Page 17: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 17 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

Входные данные:hcd_user – логический номер (HANDLE), связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится карта пользователя.hcd_ SAM – логический номер (HANDLE), связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится SAM-карта.

Выходные данные:ISOcmd – указатель на буфер (строку), в котором будут возвращены составные части команды, подаваемой на карту (согласно ISO) - CLA||INS||P1||P2||P3. Размер буфера должен быть не менее 17 байтов (см. п. 4.3). Data - указатель на буфер (строку), в котором будут возвращены данные, необходимые для выполнения соответствующей команды.Размер буфера должен быть достаточным (не менее 256 байтов). SW1SW2 - указатель на буфер (строку), в котором будут возвращены байты – результат выполнения команды в карте. Размер буфера должен быть не менее 12 байтов (см. п. 4.3).

Возвращаемое значение:True, если успешное завершение программы, иначе False. В случае False, расширенное сообщение об ошибке карты можно получить спомощью функции CDexpGetCardStat.

Ограничения:Если ключи карты пользователя не соответствуют ключам SAM карты,то уменьшается счётчик попыток соответствующего ключа в SAM карте. При исчерпании всех (обычно 3-х) попыток соответствующий ключ блокируется. Если аутентификация проходит успешно, то счётчик попыток соответствующего ключа устанавливается вмаксимальное значение (обычно 3).

Пример вызова функции из программы (BC++ v.5.01) см. п.4.2

3.13. Функция CDexpDebitTransaction

Название: CDexpDebitTransaction Назначение: Функция CDexpDebitTransaction выполняет дебетование выбранного

кошелька карты пользователя на указанную сумму. Операция выполняется в диалоге с SAM-картой, в процессе которого происходит динамическая аутентификация карт и создаётся сертификат (подпись)операции.

Условия применения:Необходимо наличие SAM-карты и карты пользователя. Перед обращением к функции CDexpDebitTransaction необходимо предварительно «подключить» файл с ключами ЦС/ЦСК (функция CDexpCheckAccessCard и файл CA_ID.KEY), вызвать функции CDexpConnectUserCard и CDexpConnectSAMCard (если это не было выполнено ранее). Затем выполнить внешнюю и внутреннюю аутентификацию (CDexpInternalAuth, CDexpExternalAuth).

Синтаксис: #include "CDexp.h"

Page 18: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 18 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

int CDexpDebitTransaction (HANDLE hcd_user, HANDLE hcd_SAM, short purse, unsigned long amount, char *cur, char *merchantID, char *rnd, char *crt, char *ISOcmd, char *Data, char *SW1SW2)

Входные данные:hcd_user – логический номер (HANDLE), связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится карта пользователя.hcd_ SAM – логический номер (HANDLE), связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится SAM-карта.MercantID – указатель на строку, содержащую идентификатор продавца (8 шестнадцатеричных цифр). purse – номер электронного кошелька (целое число). Примечание:нумерация начинается с 1.amount – длинное целое, определяющее сумму, на которую происходит дебетование кошелька. Примечание: сумма дебетования должна быть такой, чтобы (баланс кошелька пользователя- amount) > 0; cur – указатель на строку, содержащую код валюты по ISO, представленный в ASCII коде (3 байта);

Выходные данные:rnd – указатель на буфер (размером не менее 17 байтов), в который функция возвращает случайную последовательность (8 – двоичных байтов) в формате ASCII в шестнадцатеричном коде.crt – указатель на буфер (размером не менее 13 байтов), в который функция возвращает сертификат (подпись) операции дебетования кошелька (6 – двоичных байтов) в формате ASCII вшестнадцатеричном коде.ISOcmd – указатель на буфер (строку), в котором будут возвращены составные части команды, подаваемой на карту (согласно ISO) - CLA||INS||P1||P2||P3. Размер буфера должен быть не менее 17 байтов (см. п. 4.3). Data - указатель на буфер (строку), в котором будут возвращены данные, необходимые для выполнения соответствующей команды.Размер буфера должен быть достаточным (не менее 256 байтов). SW1SW2 - указатель на буфер (строку), в котором будут возвращены байты – результат выполнения команды в карте. Размер буфера должен быть не менее 12 байтов (см. п. 4.3).

Возвращаемое значение:1 - успешное завершение программы;0 - ошибка карты (расширенное сообщение об ошибке карты можно получить с помощью функции CDexpGetCardStat); отрицательное значение кода ошибки (см. коды ошибок в п.4.1).

Ограничения:Если ключи карты пользователя не соответствуют ключам SAM карты,то уменьшается счётчик попыток соответствующего ключа в карте пользователя или SAM карте. При исчерпании всех (обычно 3-х)попыток соответствующий ключ блокируется. Если динамическая

Page 19: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 19 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

аутентификация проходит успешно, то счётчик попыток соответствующего ключа устанавливается в максимальное значение (обычно 3).

Пример вызова функции из программы (BC++ v.5.01) см. п.4.2

3.14. Функция CDexpCreditTransaction

Название: CDexpCreditTransaction Назначение: Функция CDexpCreditTransaction выполняет кредитование

выбранного кошелька карты пользователя на указанную сумму идебетования соответствующего кошелька SAM-карты на туже сумму.Операция выполняется в диалоге с SAM-картой, в процессе которого происходит динамическая аутентификация карт на основе сертификатов (подписей) операций.

Условия применения:Необходимо наличие SAM-карты и карты пользователя. Перед обращением к функции CDexpCreditTransaction необходимо предварительно «подключить» файл с ключами ЦС/ЦСК (функция CdexpCheckAccessCard и файл CA_ID.KEY), вызвать функции CDexpConnectUserCard и CDexpConnectSAMCard (если это не было выполнено ранее). Затем выполнить внешнюю и внутреннюю аутентификацию (CDexpInternalAuth, CDexpExternalAuth).

Синтаксис: #include "CDexp.h" int CDexpCreditTransaction (HANDLE hcd_user, HANDLE hcd_SAM,

short purse_user, short purse_SAM, unsigned long amount, char *cur, char *pointID, char *rnd, char *crt, char *rnd2, char *crt2, char *ISOcmd, char *Data, char *SW1SW2)

Входные данные:hcd_user – логический номер (HANDLE), связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится карта пользователя.hcd_ SAM – логический номер (HANDLE), связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится SAM-карта.pointID – указатель на строку, содержащую идентификатор пункта пополнения (8 шестнадцатеричных цифр).

cur – указатель на строку, содержащую код валюты по ISO, представленный в ASCII коде (3 байта). purse_user – номер электронного кошелька карты пользователя (целое число). Примечание: нумерация начинается с 1.

purse_SAM – номер электронного кошелька SAM-карты (целое число). Примечание: нумерация начинается с 1.amount – длинное целое, определяющее сумму, на которую происходит кредитование кошелька карты пользователя и дебетование кошелька SAM-карты. Примечание: сумма кредитования должна быть такой, чтобы (баланс кошелька карты пользователя + amount) <

Page 20: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 20 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

потолок карты пользователя, (баланс кошелька SAM-карты - amount) > 0.

Выходные данные:rnd – указатель на буфер (строку), в котором функция возвращает случайную последовательность в формате ASCII в шестнадцатеричном коде. Размер буфера должен быть не менее 17 байт (ФАЗА1).

сrt - указатель на буфер (строку), в котором функция возвращает сертификат (подпись) операции дебетования в формате ASCII вшестнадцатеричном коде. Размер буфера должен быть не менее 13 байт (ФАЗА1). rnd2 – указатель на буфер (строку), в котором функция возвращает случайную последовательность в формате ASCII в шестнадцатеричном коде. Размер буфера должен быть не менее 17 байт (ФАЗА2).

crt2 - указатель на буфер (строку), в котором функция возвращает сертификат (подпись) операции дебетования в формате ASCII вшестнадцатеричном коде. Размер буфера должен быть не менее 13 байт (ФАЗА2). ISOcmd – указатель на буфер (строку), в котором будут возвращены составные части команды, подаваемой на карту (согласно ISO) - CLA||INS||P1||P2||P3. Размер буфера должен быть не менее 17 байтов (см. п. 4.3). Data - указатель на буфер (строку), в котором будут возвращены данные, необходимые для выполнения соответствующей команды.Размер буфера должен быть достаточным (не менее 256 байтов). SW1SW2 - указатель на буфер (строку), в котором будут возвращены байты – результат выполнения команды в карте. Размер буфера должен быть не менее 12 байтов (см. п. 4.3).

Возвращаемое значение:1 - успешное завершение программы;0 - ошибка карты (расширенное сообщение об ошибке карты можно получить с помощью функции CDexpGetCardStat); отрицательное значение кода ошибки (см. коды ошибок в п.4.1).

Ограничения:Если ключи карты пользователя не соответствуют ключам SAM карты,то уменьшается счётчик попыток соответствующего ключа в карте пользователя или SAM карте. При исчерпании всех (обычно 3-х)попыток соответствующий ключ блокируется. Если динамическая аутентификация проходит успешно, то счётчик попыток соответствующего ключа устанавливается в максимальное значение (обычно 3).

Пример вызова функции из программы (BC++ v.5.01) см. п.4.2

3.15. Функция CDexpGetCardData

Название: CDexpGetCardData Назначение: Функция обеспечивает чтение данных с карты пользователя.Условия применения:

Page 21: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 21 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

Необходимо наличие карты пользователя. Перед обращением кфункции CDexpGetCardData необходимо предварительно вызвать функции CDexpCheckAccessCard и CDexpConnectUserCard (если это не было выполнено ранее).

Синтаксис: #include " CDexp.h" int CDexpGetCardData (HANDLE hcd, char *PANcode,

char *SerNo, char *USRname, char *StartDate, char *EndDate, char *Ident, char *Auth, char *ISOcmd, char *Data, char *SW1SW2)

Входные данные:hcd – логический номер (HANDLE), связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится карта.

Выходные данные:hcd – логический номер (HANDLE), связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится карта.PANcode – указатель на буфер (строку), в котором будет возвращён PAN-код карты пользователя. Размер буфера должен быть не менее 20 байтов.SerNo - указатель на буфер (строку), в котором будет возвращён серийный номер карты пользователя. Размер буфера должен быть не менее 33 байтов.USRname - указатель на буфер (строку), в котором будет возвращено имя пользователя. Размер буфера должен быть не менее 40 байтов.StartDate - указатель на буфер (строку), в котором будет возвращена дата начала действия карты. Формат ДДММГГ.EndDate - указатель на буфер (строку), в котором будет возвращена дата окончания действия карты. Формат ДДММГГ.Ident - указатель на буфер (строку), в котором будет возвращено содержимое файла Ident (8000) карты пользователя. Размер буфера должен быть достаточным (не менее 256 байтов). Auth - указатель на буфер (строку), в котором будет возвращено содержимое файла Auth (8300) карты пользователя. Размер буфера должен быть достаточным (не менее 256 байтов). ISOcmd – указатель на буфер (строку), в котором будут возвращены составные части команды, подаваемой на карту (согласно ISO) - CLA||INS||P1||P2||P3. Размер буфера должен быть не менее 17 байтов (см. п. 4.3).

Data - указатель на буфер (строку), в котором будут возвращены данные, необходимые для выполнения соответствующей команды.Размер буфера должен быть достаточным (не менее 256 байтов).

SW1SW2 - указатель на буфер (строку), в котором будут возвращены байты – результат выполнения команды в карте. Размер буфера должен быть не менее 12 байтов (см. п. 4.3).

Возвращаемое значение:1 – при успешном завершении программы, иначе отрицательное значение кода ошибки (см. коды ошибок в п. 4.1)

Page 22: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 22 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

Пример вызова функции из программы (BC++ v.5.01) см. п. 4.2

3.16. Функция CDexpGetPurseData

Название: CDexpGetPurseData Назначение: Функция проверяет наличие карты пользователя в считывателе и

обеспечивает получение полной информации о выбранном электронном кошельке карты пользователя.

Условия применения:Необходимо наличие карты пользователя. Перед обращением кфункции CDexpGetPurseData необходимо предварительно вызвать функции CDexpCheckAccessCard и CDexpConnectUserCard (если это не было выполнено ранее).

Синтаксис: #include "CDexp.h" int CDexpGetPurseData (HANDLE hcd, int PurseNo,

char *CurCode, char *AccountNo, char *MaxAmount,

char *LastDebitDate, char *LastCreditDate, char *PurseBalance, char *OperationHistory, char *ISOcmd, char *Data, char *SW1SW2)

Входные данные:hcd – логический номер (HANDLE), связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится карта.PurseNo - номер электронного кошелька карты пользователя (1, 2 или 3).

Выходные данные:CurCode - указатель на буфер (строку), в котором будет возвращён код валюты по ISO, представленный в ASCII коде (4 байта)AccountNo – указатель на буфер (строку), в котором будет возвращён номер счета кошелька. Размер буфера должен быть не менее 20 байтов.MaxAmount - указатель на буфер (строку), в котором будет возвращён потолок выбранного кошелька карты пользователя. Размер буфера должен быть не менее 5 байтов.OperationHistory - указатель на буфер (строку), в котором будет возвращена информация о 4 последних операциях с кошельком.Данная строка состоит из 4 строк (с нулевым последним символом), каждая из которых содержит:• Дату операции (3 байта, формат ДДММГГ); • Кода коммерсанта (4 байта); • Сумму операции (3 байта). Размер буфера должен быть не менее 100 байтов.PurseBalance - указатель на буфер (строку), в котором будет возвращена информация о балансах после каждой из 4 последних операций с кошельком. Данная строка состоит из 4 строк (с нулевым последним символом), каждая из которых содержит баланс кошелька (4 байта). Размер буфера должен быть не менее 40 байтов.

Page 23: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 23 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

LastDebitDate - указатель на буфер (строку), в котором будет возвращена дата последней операции дебетования. Формат ДДММГГ.LastCreditDate - указатель на буфер (строку), в котором будет возвращена дата последней операции кредитования. Формат ДДММГГ.ISOcmd – указатель на буфер (строку), в котором будут возвращены составные части команды, подаваемой на карту (согласно ISO) - CLA||INS||P1||P2||P3. Размер буфера должен быть не менее 17 байтов (см. п. 4.3).

Data - указатель на буфер (строку), в котором будут возвращены данные, необходимые для выполнения соответствующей команды.Размер буфера должен быть достаточным (не менее 256 байтов).

SW1SW2 - указатель на буфер (строку), в котором будут возвращены байты – результат выполнения команды в карте. Размер буфера должен быть не менее 12 байтов (см. п. 4.3).

Возвращаемое значение:1 – при успешном завершении программы, иначе отрицательное значение кода ошибки (см. коды ошибок в п. 4.1)

Пример вызова функции из программы (BC++ v.5.01) см. п. 4.2

3.17. Функция CDexpUpdateMaxAmount

Название: CDexpUpdateMaxAmount Назначение: Функция обеспечивает смену потолка электронного кошелька карты

пользователя.Условия применения:

Необходимо наличие карты пользователя. Перед обращением кфункции CDexpUpdateMaxAmount необходимо предварительно «подключить» файл с ключами эмитента (функция CdexpCheckAccessCard и файл ISS_ID.SE3), вызвать функцию CDexpConnectUserCard (если это не было выполнено ранее).

Синтаксис: #include " CDexp.h" int CDexpUpdateMaxAmount (HANDLE hcd, int PurseNo,

unsigned long MaxAmount, char *ISOcmd, char *Data, char *SW1SW2)

Входные данные:hcd – логический номер (HANDLE), связанный с открытым коммуникационным портом, к которому подключён считыватель и вкотором находится карта.PurseNo - номер электронного кошелька карты пользователя (1, 2 или 3).

MaxAmount - длинное целое, определяющее новое значение потолка выбранного кошелька

Выходные данные:ISOcmd – указатель на буфер (строку), в котором будут возвращены составные части команды, подаваемой на карту (согласно ISO) -

Page 24: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 24 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

CLA||INS||P1||P2||P3. Размер буфера должен быть не менее 17 байтов (см. п. 4.3). Data - указатель на буфер (строку), в котором будут возвращены данные, необходимые для выполнения соответствующей команды.Размер буфера должен быть достаточным (не менее 256 байтов). SW1SW2 - указатель на буфер (строку), в котором будут возвращены байты – результат выполнения команды в карте. Размер буфера должен быть не менее 12 байтов (см. п. 4.3).

Возвращаемое значение:1 – при успешном завершении программы, иначе отрицательное значение кода ошибки (см. коды ошибок в п. 4.1)

Пример вызова функции из программы (BC++ v.5.01) см. п. 4.2

Page 25: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 25 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

4. Приложения

4.1. Сообщения об ошибках1

Код ошибки Наименование ошибки Комментарий

Общие коды возврата 0 NOK Ненормальное завершение

программы. Возникла ошибка при работе с картой.

1 OK Нормальное завершение программы.

Ошибки общего характера -1 ERR_PC_TIME_OUT

Ошибка вызвана сбоем в работе компьютера

-2...-7 Резерв

Ретранслируемые коды ошибки интерфейса CT-API

-8 ERR_CT_API_NOT_ACC CT-API недоступен -10 ERR_CT_API_TRANSMIS Ошибка передачи -11 ERR_CT_API_MEM_ASIGN Ошибка захвата памяти

Ошибки, возникающие при работе сфункциями модуля

-12 ERR_FILE_NOT_FOUND Ошибка вызвана отсутствием файла сключами системы

-13 ERR_READING_FILE Ошибка при чтении файла с ключами системы

-14 ERR_BAD_READER

Появление данной ошибки может говорить о следующем:• отсутствует считыватель, или • тип считывателя указан неправильно, или • ошибка при работе считывателя,или • указан неверный СОМ-порт.

-15 ERR_NO_CARD_ON_READER Ошибка вызвана отсутствием карты всчитывателе

-16 ERR_BAD_ACCESS_CARD Ошибка при работе с картой доступа,возможно, вставлена не карта доступа, а иная.

-17 ERR_INVALID_PIN_LEN Неправильная длина PIN-кода

1 Ошибки можно разделить на следующие группы: ошибки оборудования (СОМ-порта, считывателя smart-карт, компьютера), ошибки протокола, ошибки данных (например, неверный сертификат).

Page 26: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 26 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

-18 ERR_INVALID_PIN_CHR При вводе PIN-кода были использованы не только десятичные цифры

-19 ERR_BAD_PIN_VERIFY PIN-код не верифицирован -20 ERR_BAD_PASSWORD Неверный пароль доступа к

секретным ключам системы -21 ERR_BAD_SAM_CARD Ошибка при работе с SAM картой,

возможно, вставлена не SAM карта, аиная.

-22 ERR_BAD_USR_CARD Ошибка при работе с картой пользователя, возможно, вставлена не карта пользователя, а иная.

-23 ERR_INV_REC_LEN Неправильная длина записи -24 ERR_DNOT_FOUND_KEY Отсутствует ключ -25 ERR_APP_NOT_FOUND Отсутствует приложение -26 ERR_READ_CARD_FILE Ошибка чтения файла на карте -27 ERR_IDENT_NOT_FOUND На карте отсутствует файл 8000-28 ERR_BAD_ISS_CERT Неверный сертификат открытого

ключа эмитента -29 ERR_BAD_ISS_IDEND Неверный эмитент -30 ERR_AUTH_NOT_FOUND На карте отсутствует файл 8300-31 ERR_UNKNOWN_AUTH_ALG Неизвестный алгоритм

аутентификации -32 ERR_SN_NOT_FOUND На карте отсутствует файл 2F00 -33 ERR_SAM_NOT_FOUND Отсутствует SAM-карта -34 ERR_USR_NOT_FOUND Отсутствует карта пользователя -35 ERR_USR_PURS_NOTFOUND На карте пользователя отсутствует

файл с кошельком -36 ERR_SAM_PURS_NOTFOUND На SAM-карте отсутствует файл с

кошельком -37 ERR_USR_IS_BAD «Запорчена» карта пользователя –

подлежит изъятию -38 ERR_SAM_IS_BAD «Запорчена» SAM-карта – подлежит

изъятию -39 ERR_USR_CUR_NOT_MATCH При вызове функции указан

неверный тип валюты в кошельке карты пользователя

-40 ERR_SAM_CUR_NOT_MATCH При вызове функции указан неверный тип валюты в кошельке SAM-карты

-41 ERR_READ_USR_CARD Ошибка при чтении карты пользователя

-42 ERR_READ_SAM_CARD Ошибка при чтении SAM-карты -43 ERR_USR_DEBIT_PURSE Ошибка при дебетовании кошелька

карты пользователя -44 ERR_USR_CREDIT_PURSE Ошибка при кредитовании кошелька

карты пользователя

Page 27: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 27 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

-45 ERR_SAM_DEBIT_PURSE Ошибка при дебетовании кошелька SAM-карты

-46 ERR_INV_ID_LEN Неверная длина идентификатора

-47...-50 Резерв

Ошибки, возникающие при работе сбиблиотекой mirlib (работа сбольшими числами)

-51 ERR_BASE_TOO_BIG Основание числа очень большое для представления

-52 ERR_DIV_BY_ZERO Деление на ноль (в библиотеке больших чисел)

-53 ERR_OVERFLOW Переполнение – число очень большое

-54 ERR_NEG_RESULT При вычислении получено отрицательное значение

-55 ERR_BAD_FORMAT Неверный входной формат числа -56 ERR_BAD_BASE Неверное основание числа -57 ERR_BAD_PARAMETERS Неверное использование параметра -58 ERR_OUT_OF_MEMORY Недостаточно оперативной памяти -59 ERR_NEG_ROOT Четный корень из отрицательного

числа -60 ERR_NEG_POWER Возведение числа в отрицательную

степень -61 ERR_BAD_ROOT Попытка получить неверный корень -62 ERR_INT_OP Неверная операция над Flash числом -63 ERR_FLASH_OVERFLOW Flash переполнение -64 ERR_TOO_BIG Числа очень большие -65 ERR_NEG_LOG Логарифм из отрицательного числа -66 ERR_DOUBLE_FAIL Ошибка преобразования double в

flash -67 ERR_IO_OVERFLOW Переполнение буфера ввода/вывода -68 ERR_NO_MIRSYS Библиотека больших чисел не

проинициализирована -69 ERR_BAD_MONT_MOD Неверный Монтгомери модуль

(должен быть нечетным)-70 ERR_NO_MONT_MOD Не определен Монтгомери модуль -71 ERR_EXP_TOO_BIG Слишком большая экспонента -72 ERR_NBASE_MBP_P2 Основание должно быть степенью 2

-73...–80 Резерв

-81 ERR_KEYFILE_NOT_FOUND Отсутствует файл с ключами ЦСК/ЦС

-82 ERR_READING_KEYFILE Ошибка чтения файла ключей -83 ERR_PARFILE_NOT_FOUND Отсутствует файл с параметрами

Page 28: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 28 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

sPRPERS.PAR -84 ERR_BAD_NUM_OF_PARAM Ошибочное число параметров в

файле sPRPERS.PAR -85 ERR_BAD_PARAM_FMT Неверные значения параметров в

файле sPRPERS.PAR -86 ERR_BAD_CA_ID_FMT Неверное значение идентификатора

ЦСК -87 ERR_BAD_ISS_ID_FMT Неверное значение идентификатора

эмитента -88 ERR_CRTFILE_NOT_FOUND Отсутствует файл с сертификатом

открытого ключа эмитента -89 ERR_CRT_ISS_NOT_CMP Идентификатор эмитента не

совпадает с указанным в сертификате -90 ERR_CRT_DATE_EXPIRED Истек срок действия сертификата -91 ERR_CRT_CA_NOT_CMP Идентификатор эмитента не

совпадает с указанным в сертификате -92 ERR_CRT_LEN Неверная длина сертификата -93 ERR_BAD_PUBLIC_LEN Неверная длина открытого ключа

ЦСК -94 ERR_BAD_AUTH_OF_CARD Ошибка аутентификации -95 ERR_INV_LUHN_CODE Неправильное значение luhn-кода -96 ERR_NOT_FREE_MEM Недостаточно свободного места -97 ERR_TRANS_KEY_VERIFY Ошибка верификации транспортного

ключа -98 ERR_CREATE_CARDFILE Ошибка при создании файла на карте -99 ERR_WRITE_CARD_FILE Ошибка записи файла на карту -100 ERR_BAD_IDENT_CONTENT Неверное содержимое файла 8000 на

карте -101 ERR_PERFILE_NOT_FOUND Отсутствует PER-файл -102 ERR_SERNO_DONT_COMPAR Не совпадает реальный серийный

номер карты и номер, указанный вPER-файле

-103 ERR_BAD_START_DATE Неверная дата начала действия SAM-карты

-104 ERR_BAD_END_DATE Неверная дата окончания действия SAM-карты

-105 ERR_DATES_CONFLICT Дата окончания действия SAM-карты превышает дату окончания действия сертификата открытого ключа эмитента

-106 ERR_PURSE_NOT_EMPTY Кошелек не пустой -107 ERR_KEY_VERIFICATION Ошибка верификации ключа -108 ERR_UPDATE_CARD_FILE Ошибка перезаписи файла на карте -109 ERR_CHANGE_KEY Ошибка изменения ключа -110 ERR_DEBIT_AMT_GRATE Сумма дебета превышает остаток

кошелька SAM-карты -111 ERR_CREDIT_AMT_GRATE Результат сложения остатка

Page 29: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 29 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

кошелька и суммы средита превышает потолок кошелька SAM-карты

-112 ERR_UNBLOCK_KEY Ошибка деблокирования ключа -113 ERR_MAX_AMNT_LES_PURS Новое значение потолка кошелька

SAM-карты меньше текущего остатка в кошельке

-114 ERR_UPDATE_MAX_AMOUNT Ошибка смены потолка кошелька SAM-карты

-123 ERR_NOT_INITIALIZED Не была выполнена инициализация -124 ERR_UNKNOWN_ERROR Неизвестная ошибка -125 ERR_FUNC_NOT_RELEASED -126 ERR_USR_ABORT Работа программы остановлена

пользователем

/* Rest of CT-API */ -127 ERR_CT_API_ABORT Работа программы остановлена

сервером -128 ERR_CT_API_HTSI Ошибка нижнего уровня

4.2. Пример вызова функций модуля из программы (Borland C++ v.5.01) //---------------------------------------------------------------------------- // Test BC++ built 32-bit DLL's (Example of cdexp.DLL call). // // Copyright (c) Dekart Ltd. All Rights Reserved // // This application tests calling into a 32-bit DLL built with Borland C++. // Code was verified with Borland C++ 5.02 // //---------------------------------------------------------------------------- #include <mfc/afxwin.h> // For GetDlgItemText() + windows.h #include <stdio.h> // stdio.h #include "cdexp.h" // functions from cdexp.dll #include <stdlib.h> #include <sys/stat.h> #include <io.h> #include <conio.h> #include <dir.h> #include <fstream.h> #include <string.h> // // Declaration of DLL - functions // int ( __stdcall *pCDexpCheckAccessCard)(char *Port, short ReaderType, char *IccNo, char *KeyFile, char *PIN, char *ISOcmd, char *Data, char *SW1SW2); int (__stdcall *pCDexpConnectSAMCard)(char *Port, short ReaderType); int (__stdcall *pCDexpConnectUserCard)(char *Port, short ReaderType); BOOL (__stdcall *pCDexpCloseCard)(int hcd); BOOL (__stdcall *pCDexpSelectFileInCard)(int hcd, char *FID, char *ISOcmd, char *Data, char *SW1SW2); BOOL (__stdcall *pCDexpReadFileRecord)(int hcd, short rcNo, short len, char *buf, char *ISOcmd, char *Data, char *SW1SW2); int (__stdcall *pCDexpUpdateFileRecord)(int hcd, short rcNo, short len, char *buf, char *ISOcmd, char *Data, char *SW1SW2);

Page 30: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 30 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

int (__stdcall *pCDexpStaticAuth)(int hcd, char *ISOcmd, char *Data, char *SW1SW2); BOOL (__stdcall *pCDexpExternalAuth)(int hcd_user, int hcd_SAM, char *ISOcmd, char *Data, char *SW1SW2); BOOL (__stdcall *pCDexpInternalAuth)(int hcd_user, int hcd_SAM, char *ISOcmd, char *Data, char *SW1SW2); int (__stdcall *pCDexpDebitTransaction)(int hcd_user, int hcd_SAM, short purse, unsigned long amount, char *cur, char *mercantID, char *rnd, char *crt, char *ISOcmd, char *Data, char *SW1SW2); int (__stdcall *pCDexpCreditTransaction)(int hcd_user, int hcd_SAM, short purse_user, short purse_SAM, unsigned long amount, char *cur, char *pointID, char *rnd, char *crt, char *rnd2, char *crt2, char *ISOcmd, char *Data, char *SW1SW2); BOOL (__stdcall *pCDexpGetChallenge)(int hcd, char *buf, char *ISOcmd, char *Data, char *SW1SW2); void (__stdcall *pCDexpGetCardStat)(char *msgbuf); int (__stdcall *pCDexpUpdateMaxAmount)(int hcd, int PurseNo, unsigned long MaxAmount, char *ISOcmd, char *Data, char *SW1SW2); int ( __stdcall *pCDexpGetCardData)(int hcd, char *PANcode, char *SerNo, char *USRname, char *StartDate, char *EndDate, char *Ident, char *Auth, char *ISOcmd, char *Data, char *SW1SW2); int ( __stdcall *pCDexpGetPurseData)(int hcd, int PurseNo, char *CurCode, char *AccountNo, char *MaxAmount, char *LastDebitDate, char *LastCreditDate, char *PurseBalance, char *OperationHistory, char *ISOcmd, char *Data, char *SW1SW2);

char xDll[] = "CDexp.dll"; /////////////////////////////////////////////////////////////////////////////// int main() {

// // Declaration & Initial Values of variables // int status, i, j, user, sam; long int sum1=0, sum_c=0; char iss_id[10]=" ", max_sum[5]=" ", curs[4]=" ", acc_no[20]=" "; char cardnum[33]=" ", pan_code[20]=" "; char port[20]=" ", port_sam[20]=" ",port_user[20]=" ", cardpin[32]=" "; char buf_err[80],buf_reader[2]=" ",buf_reader_sam[2]=" ",buf_reader_user[2]=" "; char buf_sum[80]=" ",buf_purse_sam[2]=" ",buf_purse_user[2]=" "; char u_auth[103]=" ", u_ident[121], cardpin_n[32]=" "; char card_file[5]=" "; char rand[17]=" ", str_buf[511]=" "; char rand1[17]=" ", rand2[17]=" "; char crt1[17]=" ", crt2[17]=" "; char cur[4]=" ",ident[9]=" ", *cur1[3]={"500","498","980"}; char u_data[256]=" ", u_ISOcmd[256]=" ", u_error[256]=" "; short reader_sam, reader_user, purse_sam, purse_user; char date_d[7]=" ", date_c[7]=" ", date_s[7]=" ", date_e[7]=" "; char history[256]=" ", balance[256], name[40]=" "; char filename[MAXPATH], filename1[MAXPATH]; BOOL res; // // Load the Dynamic Link LIbrary cdexp.DLL // HINSTANCE hLib = LoadLibrary(xDll); if ( (unsigned)hLib <= HINSTANCE_ERROR ) { printf("Failure loading library: %s\n", xDll); return 0; } // // Get all the entry points for the functions we wish to test. Typedef's can // be used to simplify casting the retrun value from GetProcAddress. // pCDexpCheckAccessCard = (int( __stdcall*)(char *Port, short ReaderType, char *IccNo,char *KeyFile, char *PIN,

Page 31: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 31 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

char *ISOcmd, char *Data, char *SW1SW2))GetProcAddress(hLib, "CDexpCheckAccessCard"); pCDexpConnectSAMCard = (int(__stdcall*)(char *Port, short ReaderType))GetProcAddress(hLib, "CDexpConnectSAMCard"); pCDexpConnectUserCard = (int(__stdcall*)(char *Port, short ReaderType))GetProcAddress(hLib, "CDexpConnectUserCard"); pCDexpCloseCard = (BOOL(__stdcall*)(int hcd))GetProcAddress(hLib, "CDexpCloseCard"); pCDexpSelectFileInCard = (BOOL(__stdcall*)(int hcd, char *FID, char *ISOcmd, char *Data, char *SW1SW2))GetProcAddress(hLib, "CDexpSelectFileInCard"); pCDexpReadFileRecord = (BOOL(__stdcall*)(int hcd, short rcNo, short len, char *buf, char *ISOcmd, char *Data, char *SW1SW2))GetProcAddress(hLib, "CDexpReadFileRecord"); pCDexpUpdateFileRecord = (int(__stdcall*)(int hcd, short rcNo, short len, char *buf, char *ISOcmd, char *Data, char *SW1SW2))GetProcAddress(hLib, "CDexpUpdateFileRecord"); pCDexpStaticAuth = (int(__stdcall*)(int hcd, char *ISOcmd, char *Data, char *SW1SW2))GetProcAddress(hLib, "CDexpStaticAuth"); pCDexpExternalAuth = (BOOL(__stdcall*)(int hcd_user, int hcd_SAM, char *ISOcmd, char *Data, char *SW1SW2))GetProcAddress(hLib, "CDexpExternalAuth"); pCDexpInternalAuth = (BOOL(__stdcall*)(int hcd_user, int hcd_SAM, char *ISOcmd, char *Data, char *SW1SW2))GetProcAddress(hLib, "CDexpInternalAuth"); pCDexpDebitTransaction = (int(__stdcall*)(int hcd_user, int hcd_SAM, short purse, unsigned long amount, char *cur, char *mercantID, char *rnd, char *crt, char *ISOcmd, char *Data, char *SW1SW2))GetProcAddress(hLib, "CDexpDebitTransaction"); pCDexpCreditTransaction = (int(__stdcall*)(int hcd_user, int hcd_SAM, short purse_user, short purse_SAM, unsigned long amount, char *cur, char *pointID, char *rnd, char *crt, char *rnd2, char *crt2, char *ISOcmd, char *Data, char *SW1SW2))GetProcAddress(hLib, "CDexpCreditTransaction"); pCDexpGetChallenge = (BOOL(__stdcall*)(int hcd, char *buf, char *ISOcmd, char *Data, char *SW1SW2))GetProcAddress(hLib, "CDexpGetChallenge"); pCDexpGetCardStat = (void(__stdcall*)(char *msgbuf))GetProcAddress(hLib, "CDexpGetCardStat"); pCDexpUpdateMaxAmount = (int (__stdcall*)(int hcd, int PurseNo, unsigned long MaxAmount, char *ISOcmd, char *Data, char *SW1SW2))GetProcAddress(hLib,"CDexpUpdateMaxAmount"); pCDexpGetCardData = (int (__stdcall*)(int hcd, char *PANcode, char *SerNo, char *USRname, char *StartDate,char *EndDate, char *Ident, char *Auth, char *ISOcmd, char *Data, char *SW1SW2))GetProcAddress(hLib,"CDexpGetCardData"); pCDexpGetPurseData = (int (__stdcall*)(int hcd, int PurseNo, char *CurCode, char *AccountNo, char *MaxAmount,char *LastDebitDate, char *LastCreditDate, char *PurseBalance, char *OperationHistory, char *ISOcmd, char *Data, char *SW1SW2))GetProcAddress(hLib,"CDexpGetPurseData");

// // GetProcAddress returns null on failure // if( pCDexpCheckAccessCard == NULL || pCDexpConnectSAMCard == NULL || pCDexpConnectUserCard == NULL || pCDexpCloseCard == NULL || pCDexpSelectFileInCard == NULL || pCDexpReadFileRecord == NULL || pCDexpUpdateFileRecord == NULL || pCDexpStaticAuth == NULL || pCDexpExternalAuth == NULL || pCDexpInternalAuth == NULL || pCDexpDebitTransaction == NULL || pCDexpCreditTransaction == NULL || pCDexpGetChallenge == NULL || pCDexpGetCardStat == NULL || pCDexpUpdateMaxAmount == NULL || pCDexpGetCardData == NULL || pCDexpGetPurseData == NULL) { printf("Failure locating procedures.\n"); return 0;}

// // Check & load INI parameters from ex_xcd.ini

Page 32: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 32 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

// // PORT - name of com-port connected to reader // PORT_SAM - name of com-port connected to reader with SAM-card // PORT_USER - name of com-port connected to reader with user card // READER - reader type // READER_SAM - type of reader with SAM-card // READER_USER - type of reader with user card // CA_CARD_PIN - PIN-code to access card (CA) // PURSE_SAM - number of purse on SAM-card // PURSE_USER - number of purse on user card // CUR - currency type // SUM - sum // ID - merchant identifier // CARD_FILE - name of card file // EMITENT_KEY_FILE - name of file with keys of EMITENT // GetPrivateProfileString("COMMON", "PORT", "COM2", port, sizeof(port), "ex_xcd.ini"); GetPrivateProfileString("COMMON", "PORT_SAM", "COM2", port_sam, sizeof(port_sam), "ex_xcd.ini"); GetPrivateProfileString("COMMON", "PORT_USER", "COM2", port_user, sizeof(port_user), "ex_xcd.ini"); GetPrivateProfileString("COMMON", "CA_CARD_PIN", "1111", cardpin, sizeof(cardpin), "ex_xcd.ini"); GetPrivateProfileString("COMMON", "READER", "2", buf_reader, sizeof(buf_reader), "ex_xcd.ini"); GetPrivateProfileString("COMMON", "READER_SAM", "2", buf_reader_sam, sizeof(buf_reader_sam), "ex_xcd.ini"); GetPrivateProfileString("COMMON", "READER_USER", "2", buf_reader_user, sizeof(buf_reader_user), "ex_xcd.ini"); GetPrivateProfileString("COMMON", "PURSE_SAM", "2", buf_purse_sam, sizeof(buf_purse_sam), "ex_xcd.ini"); GetPrivateProfileString("COMMON", "PURSE_USER", "2", buf_purse_user, sizeof(buf_purse_user), "ex_xcd.ini"); GetPrivateProfileString("COMMON", "CUR", "498", cur, sizeof(cur), "ex_xcd.ini"); GetPrivateProfileString("COMMON", "ID", "11111111", ident, sizeof(ident), "ex_xcd.ini"); GetPrivateProfileString("COMMON", "CA_KEY_FILE", ".\\94980000.KEY", filename, sizeof(filename), "ex_xcd.ini"); GetPrivateProfileString("COMMON", "EMITENT_KEY_FILE", ".\\94980001.SE3", filename1, sizeof(filename), "ex_xcd.ini"); GetPrivateProfileString("COMMON", "CARD_FILE", "3F00", card_file, sizeof(card_file), "ex_xcd.ini"); GetPrivateProfileString("COMMON", "SUM", "3", buf_sum, sizeof(buf_sum), "ex_xcd.ini"); // // char-to-integer conversion // reader_sam=atoi(buf_reader_sam); reader_user=atoi(buf_reader_user); purse_sam=atoi(buf_purse_sam); purse_user=atoi(buf_purse_user); sum1=atoi(buf_sum);

// // Test of cdexp // // // Keys Reading from CA_KEY_FILE // // pCDexpCloseCard(1); printf("\n Test of CheckAccessCard \n"); printf("\n\n Insert Acces Card of CA in Reader"); getch(); status = pCDexpCheckAccessCard(port_user, reader_user, cardnum, filename, cardpin, u_ISOcmd,u_data,u_error); pCDexpGetCardStat(buf_err); printf("\n Result of Keys Reading: %d ", status); if(status!=1) {printf("\n Card status: %s", buf_err); printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;}

Page 33: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 33 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

// // Connecting to reader with user card // // pCDexpCloseCard(1); pCDexpCloseCard(2); printf("\n Test of ConnectUserCard \n"); printf("\n Insert User Card in Reader"); getch(); user = pCDexpConnectUserCard(port_user, reader_user); pCDexpGetCardStat(buf_err); if(user<0) { printf("\n Error: %d ", user); printf("\n Card status: %s", buf_err); // card status printing return 0;} else printf("\n User_handle: %d ", user);

printf("\n ....."); getch();

// User card information printf("\n\n User card information"); status = pCDexpGetCardData(user, pan_code, cardnum, name, date_s, date_e, u_ident, u_auth,u_ISOcmd,u_data,u_error); if(status<0) {printf("\n error: %d ", status); printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} // status printing else {printf("\n status: %d ", status); printf("\n User_No: %s ", cardnum); // printing of user card serial number printf("\n PAN: %s ", pan_code); // printing of user card PAN code printf("\n Name: %s ", name); // printing of name printf("\n Start date: %s ", date_s); // printing of start date printf("\n End date: %s ", date_e); // printing of end date printf("\n Ident: %s ", u_ident); // printing of Ident printf("\n Auth: %s ", u_auth); // printing of Auth }

getch();

// User card purses reading #1 printf("\n\n User card purses reading");

for(purse_user=1; purse_user<4; purse_user++) { printf("\n\n Purse %d", purse_user); status = pCDexpGetPurseData(user, purse_user, curs, acc_no, max_sum, date_d, date_c, balance, history,u_ISOcmd,u_data,u_error);

if(status<0) {printf("\n error: %d ", status); printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} // status printing else {printf("\n status: %d ", status); printf("\n cur_code: %s ", curs); // printing of cur_code printf("\n Account: %s ", acc_no); // printing of account_number printf("\n MaxAmount: %s ", max_sum); // printing of MaxAmount printf("\n Last debit date: %s ", date_d); // printing of debit date printf("\n Last credit date: %s ", date_c); // printing of credit date printf("\n Purse balances: \n"); // printing of balance history j=0; //printf("\n"); for(i=0; i<256; i++) { if(balance[i]!=0) printf("%c", balance[i]); else {if(j>3) break; printf("\n"); j++;} }

printf("\n Purse history: \n"); // printing of operations history j=0; //printf("\n"); for(i=0; i<256; i++) { if(history[i]!=0) printf("%c", history[i]); else {if(j>3) break; printf("\n"); j++;} }

}

printf("\n ...."); getch();

Page 34: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 34 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

}

// // GetChallenge operation for user card // printf("\n Test of GetChallenge (user card)\n"); res=pCDexpGetChallenge(user,rand,u_ISOcmd,u_data,u_error); pCDexpGetCardStat(buf_err); if(res!=1) { printf("\n Error: %d ", res); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} else printf("\n User_random: %s ", rand); // operation result printing

printf("\n ....."); getch();

// // SelectFileInCard operation for user card // printf("\n Test of SelectFileInCard (user card)\n"); res=pCDexpSelectFileInCard(user, "3F00",u_ISOcmd,u_data,u_error); // card file select pCDexpGetCardStat(buf_err); if(res!=1) { printf("\n Error: %d ", res); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} else printf("\n 3F00 - %d ", res);

res=pCDexpSelectFileInCard(user, "7F10",u_ISOcmd,u_data,u_error); // card file select pCDexpGetCardStat(buf_err); if(res!=1) { printf("\n Error: %d ", res); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} else printf("\n 7F10 - %d ", res);

res=pCDexpSelectFileInCard(user, "8100",u_ISOcmd,u_data,u_error); // card file select (purse descriptors) pCDexpGetCardStat(buf_err); if(res!=1) { printf("\n Error: %d ", res); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} else printf("\n 8100 - %d ", res);

printf("\n ....."); getch(); // // ReadFileRecord operation for user card // printf("\n Reading of Purse's Descriptors"); for(i=1;i<4;i++) { res=pCDexpReadFileRecord(user,i,16, str_buf,u_ISOcmd,u_data,u_error); pCDexpGetCardStat(buf_err); if(res!=1) {

Page 35: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 35 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

printf("\n Error: %d ", res); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} else printf("\n Purse %d description %s", i,str_buf); }

printf("\n ....."); getch(); // // StaticAuth operation for User Card // printf("\n Test of StaticAuth (user card)"); i=pCDexpStaticAuth(user,u_ISOcmd,u_data,u_error); pCDexpGetCardStat(buf_err); if(i!=1) { printf("\n Error: %d ", i); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} else printf("\n Result of StaticAuth: %d ", i); //card status & operation result printing

printf("\n ....."); getch(); // // Connecting to reader with SAM-card // // printf("\n Test of ConnectSAMCard \n"); printf("\n\n Insert SAM Card in Reader"); getch(); sam = pCDexpConnectSAMCard(port_sam, reader_sam); pCDexpGetCardStat(buf_err); if(sam<0) { printf("\nError: %d ", sam); printf("\nCard status: %s", buf_err); // card status printing return 0;} else printf("\n SAM_handle: %d ", sam);

printf("\n ....."); getch();

// // SelectFileInCard operation for SAM card // printf("\n Test of SelectFileInCard (SAM card)\n"); res=pCDexpSelectFileInCard(sam, "3F00",u_ISOcmd,u_data,u_error); // card file select pCDexpGetCardStat(buf_err); if(res!=1) { printf("\n Error: %d ", res); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} else printf("\n 3F00 - %d ", res);

res=pCDexpSelectFileInCard(sam, "7F10",u_ISOcmd,u_data,u_error); // card file select pCDexpGetCardStat(buf_err); if(res!=1) { printf("\n Error: %d ", res); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} else

Page 36: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 36 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

printf("\n 7F10 - %d ", res);

res=pCDexpSelectFileInCard(sam, "8100",u_ISOcmd,u_data,u_error); // card file select (purse descriptors) pCDexpGetCardStat(buf_err); if(res!=1) { printf("\n Error: %d ", res); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} else printf("\n 8100 - %d ", res);

printf("\n ....."); getch(); // // ReadFileRecord operation for sam card // printf("\n Reading of Purse's Descriptors (SAM)"); for(i=1;i<4;i++) { res=pCDexpReadFileRecord(sam,i,16, str_buf,u_ISOcmd,u_data,u_error); pCDexpGetCardStat(buf_err); if(res!=1) { printf("\n Error: %d ", res); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} else printf("\n Purse %d description %s", i,str_buf); }

printf("\n ....."); getch(); // // StaticAuth operation for SAM Card // printf("\n Test of StaticAuth (SAM card)"); i=pCDexpStaticAuth(sam,u_ISOcmd,u_data,u_error); pCDexpGetCardStat(buf_err); if(i!=1) { printf("\n Error: %d ", i); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} else printf("\n Result of StaticAuth: %d ", i); //card status & operation result printing

printf("\n ....."); getch();

// // Internal Authentication // printf("\n Test of InternalAuth"); res=pCDexpInternalAuth(user,sam,u_ISOcmd,u_data,u_error); pCDexpGetCardStat(buf_err); if(res!=1) { printf("\n Error: %d ", res); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} else printf("\n InternalAuth: %d ", res);

printf("\n ....."); getch();

Page 37: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 37 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

// // External Authentication // printf("\n Test of ExternalAuth"); res=pCDexpExternalAuth(user,sam,u_ISOcmd,u_data,u_error); pCDexpGetCardStat(buf_err); if(res!=1) { printf("\n Error: %d ", res); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} else printf("\n ExternalAuth: %d %s ", res,buf_err);

printf("\n ....."); getch(); // // CreditTransaction operation // sum1=100; printf("\n Test of CreditTransaction"); for(purse_user=1; purse_user<4; purse_user++) { purse_sam=purse_user; printf("\n Purse %d ", purse_user); i=pCDexpCreditTransaction(user,sam,purse_user,purse_sam,sum1, cur1[purse_user-1],ident,rand1,crt1,rand2,crt2,u_ISOcmd,u_data,u_error); pCDexpGetCardStat(buf_err); // printf("\n %s", buf_err); // card status printing if(i!=1) { printf("\n Error: %d ", i); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} else { printf("\n Result of CreditTransaction: %d %s",i, buf_err); // operation result printing printf("\n Rand1: %s Cert.1: %s",rand1,crt1); // Phase1 (random & certificate) printf("\n Rand2: %s Cert.2: %s",rand2,crt2); // Phase2 (random & certificate) }

}

// // DebitTransaction operation // printf("\n Test of DebitTransaction"); for(purse_user=1; purse_user<4; purse_user++) { purse_sam=purse_user; printf("\n Purse %d ", purse_user); i=pCDexpDebitTransaction(user,sam,purse_user,sum1,cur1[purse_user-1],ident,rand1,crt1,u_ISOcmd,u_data,u_error); pCDexpGetCardStat(buf_err); if(i!=1) { printf("\n Error: %d ", i); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} else { printf("\n Result of DebitTransaction: %d %s",i, buf_err); // operation result printing printf("\n Rand.: %s Cert.: %s",rand1,crt1); // random & certificate }

}// // Reading of Purses after DebitTransaction // printf("\n\n Reading of Purse after DebitTransaction");

Page 38: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 38 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

res=pCDexpSelectFileInCard(user, "6F00",u_ISOcmd,u_data,u_error); // card file select (purse 1) pCDexpGetCardStat(buf_err); printf("\n 6F00 - %d %s", res,buf_err); res=pCDexpReadFileRecord(user,1,6, str_buf,u_ISOcmd,u_data,u_error); pCDexpGetCardStat(buf_err); if(res!=1) { printf("\n Error: %d ", res); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} printf("\n Result of Reading of Purse1 - %d %s %s", res,buf_err,str_buf);

res=pCDexpSelectFileInCard(user, "6F01",u_ISOcmd,u_data,u_error); // card file select (purse 2) pCDexpGetCardStat(buf_err); printf("\n 6F01 %d %s", res,buf_err); res=pCDexpReadFileRecord(user,1,6, str_buf,u_ISOcmd,u_data,u_error); pCDexpGetCardStat(buf_err); if(res!=1) { printf("\n Error: %d ", res); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} printf("\n Result of Reading of Purse2 - %d %s %s", res,buf_err,str_buf);

res=pCDexpSelectFileInCard(user, "6F02",u_ISOcmd,u_data,u_error); // card file select (purse 3) pCDexpGetCardStat(buf_err); printf("\n 6F02 %d %s", res,buf_err); res=pCDexpReadFileRecord(user,1,6, str_buf,u_ISOcmd,u_data,u_error); pCDexpGetCardStat(buf_err); if(res!=1) { printf("\n Error: %d ", res); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} printf("\n Result of Reading of Purse3 - %d %s %s", res,buf_err,str_buf);

printf("\n ....."); getch(); // User card purses reading #2 printf("\n\n User card purses reading #2");

for(purse_user=1; purse_user<4; purse_user++) { printf("\n\n Purse %d", purse_user); status = pCDexpGetPurseData(user, purse_user, curs, acc_no, max_sum, date_d, date_c, balance, history,u_ISOcmd,u_data,u_error);

if(status<0) {printf("\n error: %d ", status); printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} // status printing else {printf("\n status: %d ", status); printf("\n cur_code: %s ", curs); // printing of cur_code printf("\n Account: %s ", acc_no); // printing of account_number printf("\n MaxAmount: %s ", max_sum); // printing of MaxAmount printf("\n Last debit date: %s ", date_d); // printing of debit date printf("\n Last credit date: %s ", date_c); // printing of credit date printf("\n Purse balance: %s ", balance); // printing of balance printf("\n Purse history: %s ", history); // printing of history }

printf("\n ...."); getch(); }

//

Page 39: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 39 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

// Special file of user card operation // printf("\n Test of Special file of user card"); res=pCDexpSelectFileInCard(user, "8400",u_ISOcmd,u_data,u_error); // card file select pCDexpGetCardStat(buf_err); if(res!=1) { printf("\n Error: %d ", res); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} else printf("\n 8400 - %d ", res);

res=pCDexpReadFileRecord(user,2,16, str_buf,u_ISOcmd,u_data,u_error); pCDexpGetCardStat(buf_err); if(res!=1) { printf("\n Error: %d ", res); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} printf("\n Result of Reading of 8400 - %d %s %s", res,buf_err,str_buf); // // UpdateFileRecord operation // status=pCDexpUpdateFileRecord(user,1,16, "6F005000000000000010001215100003",u_ISOcmd,u_data,u_error); pCDexpGetCardStat(buf_err); if(status!=1) { printf("\n Error: %d ", status); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} else printf("\n UpdateFileRecord: %d %s ", status,buf_err); //card status & operation result printing

res=pCDexpReadFileRecord(user,1,16, str_buf,u_ISOcmd,u_data,u_error); pCDexpGetCardStat(buf_err); if(res!=1) { printf("\n Error: %d ", res); printf("\n Card status: %s", buf_err); // card status printing printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} else printf("\n Result of Reading of 8400 - %d %s %s", res,buf_err,str_buf);

// // Keys Reading from Issuer_KEY_FILE // pCDexpCloseCard(user); printf("\n Test of CheckAccessCard \n"); printf("\n\n Insert Acces Card of Issuer in Reader"); getch(); status = pCDexpCheckAccessCard(port_user, reader_user, cardnum, filename1, cardpin, u_ISOcmd,u_data,u_error); pCDexpGetCardStat(buf_err); printf("\n Result of Keys Reading: %d ", status); if(status!=1) {printf("\n Card status: %s", buf_err); printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} // // Connecting to reader with user card

Page 40: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 40 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

// pCDexpCloseCard(user); printf("\n Test of ConnectUserCard \n"); printf("\n Insert User Card in Reader"); getch(); user = pCDexpConnectUserCard(port_user, reader_user); pCDexpGetCardStat(buf_err); if(user<0) { printf("\n Error: %d ", user); printf("\n Card status: %s", buf_err); // card status printing return 0;} else printf("\n User_handle: %d ", user);

printf("\n ....."); getch();

// UpdateMaxAmount operation printf("\n\n UpdateMaxAmount operation"); sum_c=40000; for(purse_user=1; purse_user<4; purse_user++) { printf("\n Purse %d", purse_user); status = pCDexpUpdateMaxAmount(user, purse_user, sum_c, u_ISOcmd,u_data,u_error); if(status<0) {printf("\n error: %d ", status); printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} // status printing else printf("\n status: %d ", status); // printing of result

sum_c-=5000; }

// User card purses reading #3 printf("\n\n User card purses reading");

for(purse_user=1; purse_user<4; purse_user++) { printf("\n\n Purse %d", purse_user); status = pCDexpGetPurseData(user, purse_user, curs, acc_no, max_sum, date_d, date_c, balance, history,u_ISOcmd,u_data,u_error);

if(status<0) {printf("\n error: %d ", status); printf("\n ISOcmd: %s ", u_ISOcmd); printf("\n Data : %s ", u_data); printf("\n SW1SW2: %s ", u_error); return 0;} // status printing else {printf("\n status: %d ", status); printf("\n cur_code: %s ", curs); // printing of cur_code printf("\n Account: %s ", acc_no); // printing of account_number printf("\n MaxAmount: %s ", max_sum); // printing of MaxAmount printf("\n Last debit date: %s ", date_d); // printing of debit date printf("\n Last credit date: %s ", date_c); // printing of credit date printf("\n Purse balances: \n"); // printing of balance history j=0; //printf("\n"); for(i=0; i<256; i++) { if(balance[i]!=0) printf("%c", balance[i]); else {if(j>3) break; printf("\n"); j++;} }

printf("\n Purse history: \n"); // printing of operations history j=0; //printf("\n"); for(i=0; i<256; i++) { if(history[i]!=0) printf("%c", history[i]); else {if(j>3) break; printf("\n"); j++;} }

}

printf("\n ...."); getch(); }

if((unsigned)hLib>HINSTANCE_ERROR) FreeLibrary(hLib); cout <<"done." <<endl;

Page 41: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 41 / 49 Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

средствами без письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

return 1; }

Page 42: Cdex pg

4.3. Форматы команд, подаваемых на карту и возвращаемый код статуса

№ п/п Class(CLA)

Instr.(INS)

Название Р1 Р2 Р3 SW1-SW2

Комментарий

6E-00 Класс не равен 006D-00 Неизвестная инструкция6A-84 Недостаточно памяти, доступной для создания файла6A-80 1. Создаваемый файл с идентификатором ID уже существует

в родительском каталоге2. BS/RL – не целое число или превышает FF или уже 254

файла созданы в текущем каталоге3. BS=0 (если P3=0Bh или P3=0Eh), RL=0 (если P3=0Bh),

06>RL>16h (если EPF), RL=FFh (если FT=06), BS>80h(если FT=29h),

62-83 Родительский каталог запорчен67-00 Ошибка параметра Р3:

Р3≠09h (DF), Р3≠0Bh (EF), Р3≠0Eh (EPF),69-82 Не соблюдены условия доступа69-85 Выбран не DF (каталог) или уже 3 уровня присутствуют на

карте (если P3=09h)65-81 Проблемы памяти64-00 Запись не была выполнена

1 00 E0 Создание файла 00 00 09,0B,0E

90-00 Нормальное завершение команды6E-00 Класс не равен 006D-00 Неизвестная инструкция69-85 Не выбран FD (директория)6А-82 Файл запорчен (разрушен)69-82 Не соблюдены условия доступа62-83 1. Директория FD не пустая

2. Файл не был создан последним в текущем каталоге3. Баланс кошелька не равен 04. Файл-жетон не пустой

67-00 Р3≠026А-82 1. Отсутствует идентитификатор файла

2. Запорчен родительский каталог65-81 Проблемы памяти

2 00 E4 Удаление файла 00 00 02

64-00 Запись не была выполнена

Page 43: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 43 / 49Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L.Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было средствами без письменного разрешения владельца авторских прав.

Ссылка на оригинал обязательна.

№ п/п Class(CLA)

Instr.(INS)

Название Р1 Р2 Р3 SW1-SW2

Комментарий

90-00 Нормальное завершение команды6E-00 Класс не равен 006D-00 Неизвестная инструкция69-85 Не выбран FD (директория)69-82 Не соблюдены условия доступа62-83 Директория FD уже имеет статус дефектной67-00 Неверный параметр Р365-81 Проблемы памяти64-00 Запись не была выполнена

3 00 04 Придание каталогустатуса дефектного(недействительного)

00 00 00

90-00 Нормальное завершение команды6E-00 Класс не равен 006D-00 Неизвестная инструкция69-85 Не выбран FD (директория)69-82 Не соблюдены условия доступа62-83 Директория FD уже восстановлена67-00 Неверный параметр Р365-81 Проблемы памяти64-00 Запись не была выполнена

4 00 44 Восстановлениедефектного каталога

00 00 00

90-00 Нормальное завершение команды6E-00 Класс не равен 006D-00 Неизвестная инструкция69-85 Не выбран ни один из файлов:

1. C_Key2. P&V_Key3. CHV_Key

69-82 Не соблюдены условия доступа69-81 1. KtD не создан (не активирован)

2. EF-KEY не создан, ключ для записи не активирован69-83 KtD или ключ для записи (загрузки) блокированы67-00 Р3≠10h65-81 Проблемы памяти64-00 Запись не была выполнена

5 00 DA Запись (загрузка)ключа

KtD KN 10h

90-00 Нормальное завершение команды

Page 44: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 44 / 49Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L.Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было средствами без письменного разрешения владельца авторских прав.

Ссылка на оригинал обязательна.

№ п/п Class(CLA)

Instr.(INS)

Название Р1 Р2 Р3 SW1-SW2

Комментарий

6E-00 Класс не равен 006D-00 Неизвестная инструкция69-83 CHV/Key уже заблокирован или блокируется (неправильный

CHV/Key)69-81 EF- CHV/EF-KEY не создан на карте, CHV/Key не активирован

или KEY не существует67-00 Р3≠0865-81 Проблемы памяти64-00 Запись не была выполнена63-00 Неверный CHV/Key (еще не заблокирован)

6 00 20 Верификация ключа 00 KN 08

90-00 Нормальное завершение команды6E-00 Класс не равен 006D-00 Неизвестная инструкция69-83 CHV/Key уже заблокирован или блокируется (неправильный

CHV/Key)69-81 EF- CHV/EF-KEY не создан на карте, CHV/Key не активирован

или KEY не существует67-00 Р3≠1065-81 Проблемы памяти64-00 Запись не была выполнена63-00 Неверный CHV/Key (еще не заблокирован)

7 00 24 Изменение ключейCHV, P&V_KEY

Mode&KtD

KN 10h

90-00 Нормальное завершение команды6E-00 Класс не равен 006D-00 Неизвестная инструкция69-83 CHV/Key уже заблокирован или блокируется (неправильный

CHV/Key)69-81 EF- CHV/EF-KEY не создан на карте, CHV/Key не активирован

или KEY не существует67-00 Р3≠0865-81 Проблемы памяти64-00 Запись не была выполнена63-00 Неправильный CHV/Key (еще не заблокирован)

8 00 2C ДеблокированиеCHV/KEY

Mode KN 08

90-00 Нормальное завершение команды

Page 45: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 45 / 49Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L.Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было средствами без письменного разрешения владельца авторских прав.

Ссылка на оригинал обязательна.

№ п/п Class(CLA)

Instr.(INS)

Название Р1 Р2 Р3 SW1-SW2

Комментарий

6E-00 Класс не равен 006D-00 Неизвестная инструкция67-00 Р3≠0865-81 Проблемы памяти64-00 Запись не была выполнена

9 00 84 Получить случайноечисло

00 00 08

90-00 Нормальное завершение команды6E-00 Класс не равен 006D-00 Неизвестная инструкция69-85 Предварительно не была выполнена команда «получить

случайное число»69-83 KEY уже заблокирован или блокируется (неверные данные)69-81 EF-KEY не создан на карте, KEY не активирован или не

существует67-00 Р3≠0665-81 Проблемы памяти63-00 Неверные данные (KEY еще не заблокирован)64-00 Запись не была выполнена62-00 Нормальное завершение с несколькими попытками записи

10 00 82 Внешняяаутентификация

00 KN 06

90-00 Нормальное завершение команды6E-00 Класс не равен 006D-00 Неизвестная инструкция69-81 1. EF-С_KEY не создан,

2. ключ не активирован или не существует3. ключ – не EF-С_KEY4. неверный тип ключа5. не равен ключу для 3DES

67-00 Р3≠08

11 00 88 Внутренняяаутентификация

00 KN 08

90-00 Нормальное завершение команды6E-00 Класс не равен 006D-00 Неизвестная инструкция

12 00 8A Сертификациякредитования

00 KN 0A

69-85 Предварительно не была выполнена операция дебетования

Page 46: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 46 / 49Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L.Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было средствами без письменного разрешения владельца авторских прав.

Ссылка на оригинал обязательна.

№ п/п Class(CLA)

Instr.(INS)

Название Р1 Р2 Р3 SW1-SW2

Комментарий

69-81 1. EF-KEY не создан,2. ключ не активирован или не существует3. неверный тип ключа4. не равен ключу для 3DES

67-00 Р3≠0А90-00 Нормальное завершение команды6E-00 Класс не равен 006D-00 Неизвестная инструкция69-85 Предварительно не была выполнена операция дебетования69-81 1. EF-KEY не создан,

2. ключ не активирован или не существует3. неверный тип ключа4. не равен ключу для 3DES

67-00 Р3≠0А

12 00 8С Сертификациядебетования

00 KN00

90-00 Нормальное завершение команды6E-00 Класс не равен 006D-00 Неизвестная инструкция6А-86 Неверные параметры Р1 или Р26А-82 Не указан идентификатор файла или неисправен родительский

каталог, что вызывает ошибку выбора EF или невернуюконтрольную сумму

62-83 Выбранный каталог - дефектный67-00 Р3≠02

13 00 А4 Выбор файла 00 00 02

90-00 Нормальное завершение команды6E-00 Класс не равен 006D-00 Неизвестная инструкция6B-00 Неверный тип (Р2≠02 или Р2≠04)6А-83 1. Обновляемая запись – последняя (тип “next”)

2. Запись не записана (Р1>NWR, тип “absolute”) в линейныйфайл

3. Запись не существует (Р1>NR, тип “absolute”)69-85 Не выбран файл EF

14 00 DC Перезапись данных RecNr

Mode02,04

lgth

69-82 Не соблюдены условия доступа

Page 47: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 47 / 49Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L.Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было средствами без письменного разрешения владельца авторских прав.

Ссылка на оригинал обязательна.

№ п/п Class(CLA)

Instr.(INS)

Название Р1 Р2 Р3 SW1-SW2

Комментарий

67-00 Р3 не соответствует длине записи65-81 Проблемы памяти90-00 Нормальное завершение команды6E-00 Класс не равен 006D-00 Неизвестная инструкция6B-00 Неверный тип (Р2≠02 или Р2≠04)69-85 Не выбран файл EРF (кошелек)69-82 Не соблюдены условия доступа для обновления потолка

кошелька67-00 Р3≠0465-81 Проблемы памяти

15 00 DЕ Перезапись потолкакошелька

00 00 04

90-00 Нормальное завершение команды6E-00 Класс не равен 006D-00 Неизвестная инструкция6B-00 Неверный тип (Р2≠00 или Р2≠02 или Р2≠04)6А-86 Неверный параметр Р2 для EMV (Р2≠SFI+100)6А-83 1. Читаемая запись – последняя (тип “next”)

2. Запись не записана (Р1>NWR, тип “absolute”) в линейныйфайл

3. Запись не существует (Р1>NR, тип “absolute”)69-85 Не выбран файл EРF (кошелек)69-82 Не соблюдены условия доступа для обновления потолка

кошелька67-00 Р3≠0465-81 Проблемы памяти

16 00 В2 Чтение записи 00 00 04

90-00 Нормальное завершение команды6E-00 Класс не равен 006D-00 Неизвестная инструкция69-85 1. Предварительно не была выполнена команда «получить

случайное число»2. Не был выбран кошелек (файл EPF)

17 00 52 Операциякредитования

00 00 0A

69-83 KEY уже заблокирован или блокируется (неверныйсертификат)

Page 48: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 48 / 49Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L.Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было средствами без письменного разрешения владельца авторских прав.

Ссылка на оригинал обязательна.

№ п/п Class(CLA)

Instr.(INS)

Название Р1 Р2 Р3 SW1-SW2

Комментарий

69-82 Не соблюдены условия доступа69-81 1. EF-KEY не создан,

2. ключ не активирован или не существует3. нет ключа в RAM

67-00 Р3≠0Аh65-81 Проблемы памяти64-00 Запись не была выполнена63-00 Неверный сертификат (KEY еще не заблокирован)62-81 Файл EPF (кошелек) разрушен62-00 Нормальное завершение с несколькими попытками записи94-03 Баланс кошелька + сумма кредита > потолка кошелька90-00 Нормальное завершение команды6E-00 Класс не равен 006D-00 Неизвестная инструкция69-85 1. Предварительно не была выполнена команда «получить

случайное число»2. Не был выбран кошелек (файл EPF)

69-83 KEY уже заблокирован или блокируется (неверныйсертификат)

69-82 Не соблюдены условия доступа69-81 1. EF-KEY не создан,

2. ключ не активирован или не существует67-00 Р3≠0Аh65-81 Проблемы памяти64-00 Запись не была выполнена63-00 Неверный сертификат (KEY еще не заблокирован)62-81 Файл EPF (кошелек) разрушен62-00 Нормальное завершение с несколькими попытками записи94-03 Баланс кошелька < сумма дебета

18 00 54 Операциядебетования

00 00 0A

90-00 Нормальное завершение команды6E-00 Класс не равен 006D-00 Неизвестная инструкция

19 00 С0 Получить отклик 00 00 lgth

67-00 Неверный параметр Р3

Page 49: Cdex pg

DSSSCT File : cdex_pg.doc Ref : CDEXPPG0000 Revision:2.0 49 / 49Copyright © Dekart S.R.L (www.dekart.com) - 2001

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L.Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было средствами без письменного разрешения владельца авторских прав.

Ссылка на оригинал обязательна.

№ п/п Class(CLA)

Instr.(INS)

Название Р1 Р2 Р3 SW1-SW2

Комментарий

90-00 Нормальное завершение команды6E-00 Класс не равен 006D-00 Неизвестная инструкция67-00 Р3≠0869-81 В карте создан не файл EF-C_KEY, Master Key не активирован

или не существует

20 00 8E Генерациядиверсифицированного ключа C_KEY

12 KN 08

90-00 Нормальное завершение команды6E-00 Класс не равен 006D-00 Неизвестная инструкция67-00 Р3≠0869-81 Master Key блокирован69-83 В карте создан не файл EF- P&V_KEY, Master Key не

активирован или не существует

21 00 8E Генерациядиверсифицированного ключаP&V_KEY

12 KN 08

90-00 Нормальное завершение команды

Ошибкипротокола

22 FF-FF Ошибка вызвана сбоем в компьютере или в CT-API былипереданы неверные параметры

23 FF-FE Команда прервана пользователем24 FF-FD Неверное значение контрольной суммы пакета, переданного с

карты25 FF-FC Неверные данные26 FF-FB Ошибка протокола27 FF-F8 Ошибкм CT-API: СТ временно недоступен28 FF-F6 Неустранимая ошибка передачи29 FF-F5 Ошибка захвата памяти30 FF-81 Работа программы остановлена сервером31 FF-80 Ошибка нижнего уровня