cdserv

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

Upload: companiadekartsrl

Post on 18-Dec-2014

60 views

Category:

Documents


3 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Cdserv

УТВЕРЖДЁН

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

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

Модуль для обслуживания карт пользователя

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

Листов 18

2001

Page 2: Cdserv

DSSSCT File : cdserv.doc Ref : CDSERVPG0000 Revision:2.0 2 / 18 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. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

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

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

Page 3: Cdserv

DSSSCT File : cdserv.doc Ref : CDSERVPG0000 Revision:2.0 3 / 18 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

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

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

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

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

3.1. ФУНКЦИЯ CDSERVINI ..................................................................................................................... 7 3.2. ФУНКЦИЯ CDOPENCARD ............................................................................................................... 8 3.3. ФУНКЦИЯ CDGETPURSEDATA ....................................................................................................... 8 3.4. ФУНКЦИЯ CDCHANGEDATES ......................................................................................................... 9 3.5. ФУНКЦИЯ CDUPDATEMAXAMOUNT............................................................................................ 10 3.6. ФУНКЦИЯ CDSERVCLOSE............................................................................................................. 10

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

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

Page 4: Cdserv

DSSSCT File : cdserv.doc Ref : CDSERVPG0000 Revision:2.0 4 / 18 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. Терминология и условные обозначения (Глоссарий)

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

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

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

Page 5: Cdserv

DSSSCT File : cdserv.doc Ref : CDSERVPG0000 Revision:2.0 5 / 18 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.

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

Page 6: Cdserv

DSSSCT File : cdserv.doc Ref : CDSERVPG0000 Revision:2.0 6 / 18 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. Назначение библиотеки cdserv.dll Модуль cdserv.dll предназначен для обслуживания карты пользователя

(получения информации о карте и изменения ряда параметров - потолка кошельков,срока действия карты). Модуль используется только эмитентом!

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

Динамически загружаемая библиотека cdserv.dll включает в себя следующие функции:• CDservIni – инициализация процесса;• CDOpenCard – открытие карты пользователя с одновременным проведением аутентификации и чтением данных с карты;• CDGetPurseData – чтение полной информации о кошельках карты пользователя;• CDUpdateMaxAmount – изменение потолка кошелька карты пользователя;• CDChangeDates – изменение срока действия карты;• CDservClose – завершение процесса.Примечание. Работа с модулем должна начинаться вызовом функции CDservIni изавершаться вызовом функции CDservClose. Функции, входящие в модуль cdserv.dll, реализованы на языках программирования С, C++. Необходимое оборудование:• Компьютер IBM PC (486 и выше), имеющий свободные последовательные порты;

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

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

Page 7: Cdserv

DSSSCT File : cdserv.doc Ref : CDSERVPG0000 Revision:2.0 7 / 18 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. Описание функций библиотеки cdserv.dll

3.1. Функция CDservIni

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

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

Необходимо наличие карты доступа эмитента, файла с третьей группой ключей эмитента и файла с сертификатом открытого ключа эмитента.

Синтаксис: #include "CDserv.h" int CDservIni (char *Port, short ReaderType, char *Iss_KeyFile, char *PIN, char *Iss_ID, char *CRTfile, char *IccNo)

Входные данные: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

Iss_KeyFile – указатель на строку, содержащую путь и имя файла стретьей группой ключей эмитента (до 256 символов). PIN – указатель на строку, содержащую PIN–код карты доступа. PIN–код может состоять от 4 до 8 десятичных цифр.Iss_ID - указатель на строку, содержащую идентификатор (BIN) эмитента (8 десятичных цифр). CRTfile – указатель на строку, содержащую путь и имя файла ссертификатом открытого ключа эмитента (до 256 символов).

Выходные данные:IccNo – указатель на буфер (строку), в котором будет возвращён серийный номер карты доступа. Размер буфера должен быть не менее 33 байтов.

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

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

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

Page 8: Cdserv

DSSSCT File : cdserv.doc Ref : CDSERVPG0000 Revision:2.0 8 / 18 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.2. Функция CDOpenCard

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

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

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

Синтаксис: #include "CDserv.h" int CDOpenCard (char *PANcode, char *SerNo, char *USRname, char *StartDate, char *EndDate)

Входные данные: Отсутствуют Выходные данные:

PANcode – указатель на буфер (строку), в котором будет возвращён PAN-код карты пользователя. Размер буфера должен быть не менее 20 байтов.SerNo - указатель на буфер (строку), в котором будет возвращён серийный номер карты пользователя. Размер буфера должен быть не менее 33 байтов.USRname - указатель на буфер (строку), в котором будет возвращено имя пользователя. Размер буфера должен быть не менее 40 байтов.StartDate - указатель на буфер (строку), в котором будет возвращена дата начала действия карты. Формат ДДММГГ.EndDate - указатель на буфер (строку), в котором будет возвращена дата окончания действия карты. Формат ДДММГГ.

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

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

3.3. Функция CDGetPurseData

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

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

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

Синтаксис: #include " CDserv.h" int CDGetPurseData (int PurseNo, char *CurCode, char *AccountNo, char *MaxAmount, char *LastDebitDate, char *LastCreditDate, char *PurseBalance, char *OperationHistory)

Входные данные:

Page 9: Cdserv

DSSSCT File : cdserv.doc Ref : CDSERVPG0000 Revision:2.0 9 / 18 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. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

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

PurseNo - номер электронного кошелька карты пользователя (1, 2 или 3).

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

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

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

3.4. Функция CDChangeDates

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

Необходимо наличие карты пользователя.Синтаксис: #include "CDserv.h"

int CDChangeDates (char * NewStartDate, char * NewEndDate) Входные данные:

NewStartDate - указатель на строку, содержащую новую дату начала действия карты. Формат ДДММГГ.NewEndDate - указатель на строку, содержащую новую дату окончания действия карты. Формат ДДММГГ.

Выходные данные: Отсутствуют

Page 10: Cdserv

DSSSCT File : cdserv.doc Ref : CDSERVPG0000 Revision:2.0 10 / 18 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.1)

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

3.5. Функция CDUpdateMaxAmount

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

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

Необходимо наличие SAM-карты.Синтаксис: #include "Cdserv.h"

int CDUpdateMaxAmount (int PurseNo, unsigned long MaxAmount) Входные данные:

PurseNo - номер электронного кошелька карты пользователя (1, 2 или 3).

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

Выходные данные: Отсутствуют.Возвращаемое значение:

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

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

3.6. Функция CDservClose

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

освобождает считыватель smart-карт.Синтаксис: #include "CDserv.h"

void CDservClose (void) Входные данные: Отсутствуют.Возвращаемое значение: Отсутствует.Пример вызова функции из программы (BC++ v.5.01) см. п. 4.1

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

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

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

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

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

Page 11: Cdserv

DSSSCT File : cdserv.doc Ref : CDSERVPG0000 Revision:2.0 11 / 18 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 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-кода -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 Ошибка при работе с картой пользователя, возможно, вставлена не карта пользователя, а иная.

Page 12: Cdserv

DSSSCT File : cdserv.doc Ref : CDSERVPG0000 Revision:2.0 12 / 18 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. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

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

-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 Ошибка при кредитовании кошелька

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

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

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

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

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

-52 ERR_DIV_BY_ZERO Деление на ноль (в библиотеке

Page 13: Cdserv

DSSSCT File : cdserv.doc Ref : CDSERVPG0000 Revision:2.0 13 / 18 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. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

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

больших чисел)-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 Отсутствует файл с параметрами

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 Идентификатор эмитента не

Page 14: Cdserv

DSSSCT File : cdserv.doc Ref : CDSERVPG0000 Revision:2.0 14 / 18 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. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

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

совпадает с указанным в сертификате -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 Результат сложения остатка

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

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

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

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

-123 ERR_NOT_INITIALIZED Не была выполнена инициализация

Page 15: Cdserv

DSSSCT File : cdserv.doc Ref : CDSERVPG0000 Revision:2.0 15 / 18 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. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы, то ни было

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

-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) //---------------------------------------------------------------------------- // // BC++ built 32-bit DLL's (Example of CDserv.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 <windows.h> #include <stdio.h> // stdio.h #include "CDserv.h" // functions from CDserv.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 *pCDservIni)(char *Port, short ReaderType, char *Iss_KeyFile, char *PIN, char *Iss_ID, char *CRTfile, char *IccNo); int ( __stdcall *pCDOpenCard)(char *PANcode, char *SerNo, char *USRname, char *StartDate, char *EndDate); int ( __stdcall *pCDGetPurseData)(int PurseNo, char *CurCode, char *AccountNo, char *MaxAmount, char *LastDebitDate, char *LastCreditDate, char *PurseBalance, char *OperationHistory); int ( __stdcall *pCDUpdateMaxAmount)(int PurseNo, unsigned long MaxAmount); int ( __stdcall *pCDChangeDates)(char *NewStartDate, char *NewEndDate); void ( __stdcall *pCDservClose)(void); char xDll[] = "CDserv.dll"; /////////////////////////////////////////////////////////////////////////////// int main() {

// // Declaration & Initial Values of variables // int status, purse, i, j; char cardnum[33]=" "; char port[20]=" ", pan_code[20]=" " ; char cardpin[32]=" ", name[40]=" ", curs[4]=" ", acc_no[20]=" ";

Page 16: Cdserv

DSSSCT File : cdserv.doc Ref : CDSERVPG0000 Revision:2.0 16 / 18 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 iss_id[10]=" ", max_sum[5]=" "; char date_d[7]=" ", date_c[7]=" ", date_s[7]=" ", date_e[7]=" "; char history[256]=" ", balance[256], hist[4][64]; short reader; char iss_key_file[MAX_PATH], iss_crt_file[MAX_PATH]; long int sum_c, sum_d; // // Load the Dynamic Link LIbrary xcdata.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. // pCDservIni = (int ( __stdcall* )(char *Port, short ReaderType, char *Iss_KeyFile, char *PIN, char *Iss_ID, char *CRTfile, char *IccNo))GetProcAddress(hLib, "CDservIni"); pCDOpenCard = (int ( __stdcall* )(char *PANcode, char *SerNo, char *USRname, char *StartDate, char *EndDate))GetProcAddress(hLib, "CDOpenCard"); pCDGetPurseData = (int ( __stdcall* )(int PurseNo, char *CurCode, char *AccountNo, char *MaxAmount, char *LastDebitDate, char *LastCreditDate, char *PurseBalance, char *OperationHistory))GetProcAddress(hLib, "CDGetPurseData"); pCDUpdateMaxAmount= (int ( __stdcall* )(int PurseNo, unsigned long MaxAmount))GetProcAddress(hLib, "CDUpdateMaxAmount"); pCDChangeDates = (int ( __stdcall* )(char *NewStartDate, char *NewEndDate))GetProcAddress(hLib, "CDChangeDates"); pCDservClose = (void ( __stdcall* )(void))GetProcAddress(hLib, "CDservClose");

// // GetProcAddress returns null on failure // if( pCDservIni == NULL) { printf("1 - Failure locating procedures.\n"); return 0; }

if (pCDservIni == NULL) { printf("2 - Failure locating procedures.\n"); return 0; }

if( pCDGetPurseData == NULL) { printf("3 - Failure locating procedures.\n"); return 0; }

if( pCDUpdateMaxAmount == NULL) { printf("4 - Failure locating procedures.\n"); return 0; }

if( pCDChangeDates == NULL) { printf("5 - Failure locating procedures.\n"); return 0; }

if( pCDservClose == NULL) { printf("6 - Failure locating procedures.\n"); return 0; }

// // Load INI parameters

Page 17: Cdserv

DSSSCT File : cdserv.doc Ref : CDSERVPG0000 Revision:2.0 17 / 18 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 // reader - reader type // cardpin - PIN-code to access card (issuer) // iss_id - issuer identifier // iss_key_file - name of file with keys of issuer // iss_crt_file - name of file with issuer certificate // per_file_path - path to file with parameters

reader=0; strcpy(iss_key_file,".\\94980001.SE3"); strcpy(iss_crt_file,".\\94980001.CRT"); strcpy(port,"COM2"); strcpy(cardpin,"1111"); strcpy(iss_id,"94980001"); /*printf("\n %s \n %s \n %s \n %s \n %s \n %s ", iss_key_file, per_file_path, iss_crt_file, port, cardpin, iss_id); */ // // Test of CDserv // printf("\n Test of CDserv"); // CDserv operation printf("\n\n Session initialization"); printf("\n Insert Acces Card of issuer in Reader"); getch();

status = pCDservIni(port, reader, iss_key_file, cardpin, iss_id, iss_crt_file, cardnum); if(status<0) {printf("\n error: %d ", status); return 0;} // status printing else {printf("\n status: %d ", status); printf("\n IssNo: %s ", cardnum); // printing of card serial number }

// CD card open printf("\n\n User card openning"); printf("\n Insert User Card in Reader"); getch();

status = pCDOpenCard(pan_code, cardnum, name, date_s, date_e); if(status<0) {printf("\n error: %d ", status); 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_s); // printing of start date }

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

for(purse=1; purse<4; purse++) { printf("\n\n Purse %d", purse); status = pCDGetPurseData(purse, curs, acc_no, max_sum, date_d, date_c, balance, history); if(status<0) {printf("\n error: %d ", status); 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++;} }

Page 18: Cdserv

DSSSCT File : cdserv.doc Ref : CDSERVPG0000 Revision:2.0 18 / 18 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 ...."); getch(); }

// UpdateMaxAmount operation printf("\n\n UpdateMaxAmount operation"); sum_c=20000; for(purse=1; purse<4; purse++) { printf("\n Purse %d", purse); status = pCDUpdateMaxAmount(purse, sum_c); if(status<0) {printf("\n error: %d ", status); return 0;} // status printing else printf("\n status: %d ", status); // printing of result

sum_c-=5000; }

// user card reading #2 printf("\n\n User card reading after UpdateMaxAmount operation");

for(purse=1; purse<4; purse++) { printf("\n\n Purse %d", purse); status = pCDGetPurseData(purse, curs, acc_no, max_sum, date_d, date_c, balance, history); if(status<0) {printf("\n error: %d ", status); 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 last Purse Operation: %s ", history); // printing of history }

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

// Date's change printf("\n\n User card Date's change"); strcpy(date_s,"160201"); strcpy(date_e,"160204"); status = pCDChangeDates(date_s, date_e); if(status<0) {printf("\n error: %d ", status); return 0;} // status printing else printf("\n status: %d ", status); // pCDservClose operation printf("\n\n Session closing"); pCDservClose(); printf("\n"); if((unsigned)hLib>HINSTANCE_ERROR) FreeLibrary(hLib); cout << endl <<"done." <<endl; return 0; }