<R122GA xsi:nil="true"></R122GA>
<R122GB>0</R122GB>
<R123GA xsi:nil="true"></R123GA>
<R124GA xsi:nil="true"></R124GA>
<R124GB>0</R124GB>
<R125GA xsi:nil="true"></R125GA>
<R125GB>0</R125GB>
<R162GA xsi:nil="true"></R162GA>
<R162GB>0</R162GB>
<R163GB xsi:nil="true"></R163GB>
<R170GB>0</R170GB>
<R181GB>30</R181GB>
<R182GB>0</R182GB>
<R200GB>30</R200GB>
<R210GB>0</R210GB>
<R222GB>0</R222GB>
<R230GB>0</R230GB>
<R240GB>0</R240GB>
<R260GB>0</R260GB>
<R270GB>30</R270GB>
<R20G16S xsi:nil="true"></R20G16S>
<HFILL>03042008</HFILL>
<HBOS> Петров Петро Петрович</HBOS>
<HBUH>Ваніліна Олена Петрівна</HBUH>
<HFO xsi:nil="true"><HFO>
</DECLARBODY>
<!-- YOUR_ID="58762" -->
</DECLAR>
Додаток 3
до Уніфікованого формату
транспортного повідомлення
при інформаційній взаємодії
платників податків,
операторів і податкових
органів в електронному
вигляді телекомунікаційними
каналами зв'язку
з використанням електронного
цифрового підпису
СПЕЦИФІКАЦІЯ
криптографічних функцій
1. Вступ
В документі надається опис уніфікованої бібліотеки функцій, призначених для криптографічних перетворень інформації. Бібліотека призначена для застосування при розробці програмного забезпечення в будь-якому середовищі розробки (Microsoft Visual C++, Visual Basic, C#, CodeGear RAD Studio тощо).
2. Загальні вимоги
1. Робота в середовищі Microsoft Windows 98/2000/XP/Vista.
2. Багатопоточність.
3. Бібліотека повинна поставлятися для платформ х86 та х64.
4. Передача параметрів за угодою __ stdcall.
5. Пам'ять під блоки з результатом роботи функцій виділяється визиваючою стороною.
3. Поставка бібліотеки
Бібліотека поставляється у вигляді DLL. Ім'я DLL: Crypt_XXX.DLL, де XXX - ім'я постачальника бібліотеки.
Доступ до функцій DLL виконується функцією GetProcAddress.
4. Склад бібліотеки
1. Функція накладання підпису
int __stdcall MakeSign (const void* pkbuf, int pklen, const char* pwd, const void* hashbuf, void* signbuf, int* signlen);
const void* pkbuf | Буфер з секретним ключем |
int pklen | Розмір буфера з секретним ключем |
const char* pwd | Пароль секретного ключа, повинен закінчуватись символом '\0' |
const void* hashbuf | Буфер з хешем документу, розмір 32 байта |
void* signbuf | Буфер для підпису, якщо NULL - в signlen повертається розмір |
int* signlen | Розмір підпису в буфері |
Функція повертає 0, коли успішно виконано, або код помилки.
2. Функція перевірки підпису
int __stdcall VerifySign (const void* certbuf, int certlen, const void* hashbuf, const void* signbuf, int signlen);
Параметр | Опис |
const void* certbuf | Буфер з сертифікатом |
int certlen | Розмір буфера з сертифікатом |
const void* hashbuf | Буфер з хешем документу, розмір 32 байта |
const void* signbuf | Буфер з підписом |
int signlen | Розмір буфера з підписом |
Функція повертає 0, якщо підпис вірний, або код помилки.
3. Функція перевірки сертифікату
int __stdcall VerifyCert (const void* certbuf, int certlen, const void* rootcbuf, int rootclen);
Параметр | Опис |
const void* certbuf | Буфер з сертифікатом |
int certlen | Розмір буфера з сертифікатом |
const void* rootcbuf | Буфер з кореневим сертифікатом |
int rootclen | Розмір буфера з кореневим сертифікатом |
Функція повертає 0, коли сертифікат відповідає кореневому, або код помилки.
4. Функція шифрування блоку даних
int __stdcall Encrypt (const void* certbuf, int certlen, const void* docbuf, int doclen, void* outbuf, int* outlen);
Параметр | Опис |
const void* certbuf | Буфер з сертифікатом |
int certlen | Розмір буфера з сертифікатом |
const void* pkbuf | Буфер з секретним ключем |
int pklen | Довжина буфера з секретним ключем |
const char* pwd | Пароль секретного ключа, повинен закінчуватись символом '\0' |
const void* docbuf | Буфер з документом |
int doclen | Розмір буферу з документом |
void* outbuf | Вихідний буфер, якщо NULL - в outlen повертається розмір |
int* outlen | Розмір вихідного буферу |
Функція повертає 0, коли успішно зашифровано, або код помилки.
5. Функція розшифрування блоку даних
int __stdcall Decrypt (const void* pkbuf, int pklen, const char* pwd, const void* docbuf, int doclen, void* outbuf, int* outlen);
Параметр | Опис |
const void* pkbuf | Буфер з секретним ключем |
int pklen | Довжина буфера з секретним ключем |
const char* pwd | Пароль секретного ключа, повинен закінчуватись символом '\0' |
const void* certbuf | Буфер з сертифікатом |
int certlen | Розмір буфера з сертифікатом |
const void* docbuf | Буфер з документом |
int docsize | Розмір буферу з документом |
void* outbuf | Вихідний буфер, якщо NULL - в outlen повертається розмір |
Int* outlen | Розмір вихідного буферу |
Функція повертає 0, коли успішно виконано, або код помилки.
6. Функція звірки сертифікату з секретним ключем
int __stdcall VerifyCertPKMatch (const void* certbuf, int certlen, const void* pkbuf, int pklen);
Параметр | Опис |
const void* certbuf | Буфер з сертифікатом |
int certlen | Розмір буфера з сертифікатом |
const void* pkbuf | Буфер з секретним ключем |
int pklen | Розмір буфера з секретним ключем |
const char* pwd | Пароль секретного ключа, повинен закінчуватись символом '\0' |
Функція повертає 0, коли сертифікат та секретний ключ являються відповідними, або код помилки.
7. Функція отримання інформації з сертифікату
int __stdcall GetCertlnfo (const void* certbuf, int certlen, UACertlnfo* info);
Параметр | Опис |
const void* certbuf | Буфер з сертифікатом |
int certlen | Довжина буфера з сертифікатом |
UACertlnfo* info | Структура з інформацією з сертифікату (приведена нижче) |
Функція повертає 0, коли успішно виконано, або код помилки.
Структура UACertlnfo
Поле | Опис |
char Serial[64] | Серійний номер сертифікату |
char EDRPOU[11] | ЄДРПОУ установи |
char DRFO[11] | ДРФО особи |
char Name[64] | ПІБ особи або найменування установи |
char Email [64] | E-mail |
char Title[64] | Посада |
char PostalCode[7] | Поштовий індекс |
char Obl[64] | Область |
char Rayon[64] | Район |
char Adres[64] | Адреса |
char Tel[64] | Телефон |
time_t DtBeg | Дата початку дії сертифікату |
time_t DtEnd | Дата закінчення дії сертифікату |
Вирівнювання членів структури - 1 байт.
Розмір кожного строкового поля містить завершуючий 0-символ.
8. Коди помилок
#define CRYPT_OK | 0 | // | Успішно |
#define CRYPT_BUFFER EMPTY | 1 | // | Буфер порожній |
#define CRYPT_DLL_NOT_LOADED | 2 | // | DLL не ініціалізовано |
#define CRYPT_BAD_CERT | 3 | // | Помилка отримання інформації з сертифікату |
#define CRYPT_CERT_NOT_ALLOWED | 4 | // | Даний сертифікат не може використовуватися для виконання операції |
#define CRYPT_SK_NOT_MATCH | 5 | // | Не збігається пара сертифікат - секретний ключ |
#define CRYPT_SK_CORRUPT | 7 | // | Некоректний формат секретного ключа |
#define CRYPT_BAD_PASSWORD | 8 | // | Помилка підпису/шифрування, можливо вказано невірний пароль |
#define CRYPT_BAD_SIGN | 11 | // | Невірний підпис |
#define CRYPT_INTERNAL_ERR | 12 | // | Внутрішня помилка перевірки підпису |
#tdefine CRYPT_BAD_CRC | 13 | // | Помилка перевірки цілісності: буфер пошкоджено |
#define CRYPT_NOT_SUPPORTED | 14 | // | Функція не підтримується |