в начало  предыдущее  закрыть  следущее  в конец
Закрыть окно

Кроссплатформенная высокоуровневая библиотека LirCryptoWrapper

Сколько стоит этот продукт?

 Заказать этот продукт  Лицензировать и скачать этот продукт!

Библиотека LirCryptoWrapper, созданная на базе СКЗИ ЛИРССЛ-CSP», обеспечивает  работу с сертификатами с учетом требований  Федерального закона от 6 апреля 2011 г. № 63-ФЗ «Об электронной подписи»  и предназначена для использования в системах защищенного документооборота. Именно эта библиотека используется в криптоплагине LCSignPlugin.


В качестве средств криптографической защиты информации (СКЗИ) помимо СКЗИ «ЛИРССЛ-CSP» используются программные и аппаратные токены с интерфейсом PKCS#11  и расширением данного стандарта с поддержкой российских криптографических алгоритмов («Расширение стандарта PKCS#11 для российских криптографических алгоритмов»). На платформе MS Windows автоматически подключаются установленные криптопровайдеры с российской криптографией (ПМ «ЛИССИ-CSP», КриптоПро CSP и т.п.).

Библиотека является платформонезависимой и функционирует на различных операционных системах (MS Windows, Linux, OS X, Android, iOS (iPad, iPhone) и др.).

Библиотека LirCryptoWrapper портирована также на платформу Google Native Client.


Библиотека LirCryptoWrapper портирована также в WebAssembly. WebAssembly — открытый стандарт, разработанный Mozilla, Google, Microsoft и Apple. Как можно заметить, эта группа представляет разработчиков четырёх наиболее распространённых браузеров, так что можно рассчитывать на становление wasm как всеобщего стандарта. WebAssembly пришел на смену NPAPI и тому же Google Native Client.

Библиотека позволяет работать с электронной подписью (ЭП) как по ГОСТ Р 34.10-2001, так и по ГОСТ Р 34.10-2012.

Библиотека имеет интуитивно понятный высокоуровневый интерфейс, где входными и выходными параметрами являются строки и/или массивы строк:

typedef struct {

cw_rv_t (*CW_Initialize)(char *configdir, cw_pwdcb_t pwdcb);

cw_rv_t (*CW_Finalize)();

char *(*CW_GetWrapperProperty)(char *propname);

void (*CW_About)(cw_prop_t *propname);

cw_rv_t (*CW_RegisterP11Module)(char *nickname, char *library);

cw_rv_t (*CW_RemoveP11Module)(char *nickname);

cw_rv_t (*CW_ListP11Modules)(cw_namelist_t *list, unsigned int *n);

cw_rv_t (*CW_GetTokenList)(cw_namelist_t *list, unsigned int *n);

cw_rv_t (*CW_FreeNameList)(cw_namelist_t list, unsigned int n);

void    (*CW_Free)(void *obj);

cw_rv_t (*CW_AddCertificateFromFile)(char *token, char *infile, int pem, char *trusts, char **nickname);

cw_rv_t (*CW_AddCertificateFromBuffer)(char *token, unsigned char *inbuf, unsigned int inlen, int pem, char *trusts, char **nickname);

cw_rv_t (*CW_ImportPKCS12FromFile)(char *token, char *infile, int pem, char **nickname);

cw_rv_t (*CW_ImportPKCS12FromBuffer)(char *token, unsigned char *inbuf, unsigned int inlen, int pem, char **nickname);

cw_rv_t (*CW_ExportPKCS12ToFile)(char *token, char *nickname, char *outfile);

cw_rv_t (*CW_DeleteCert)(char *nickname, int priv_cert);

cw_rv_t (*CW_GetCertificateContent)(char *nickname, unsigned char **buffer, unsigned int *n);

cw_rv_t (*CW_GetCertificateInfo)(char *nickname, cw_namelist_t *rows, unsigned int *n);

cw_rv_t (*CW_ListCertificates)(char *token, int priv_cert, cw_namelist_t *list, unsigned int *n);

cw_rv_t (*CW_CreateSignedP7Buffer)(char *nickname, unsigned char *inbuf, unsigned int inlen, unsigned char **outbuf, unsigned int *outlen, int attached, int pem);

cw_rv_t (*CW_CreateSignedP7File)(char *nickname, char *infile, char *outfile, int attached, int pem);

cw_rv_t (*CW_VerifySignedP7Buffer)(unsigned char *inbuf, unsigned int inlen, unsigned char *conbuf, unsigned int conlen, cw_namelist_t *p7info, unsigned int *p7num, int pem);

cw_rv_t (*CW_VerifySignedP7File)(char *infile, char *confile, cw_namelist_t *p7info, unsigned int *p7num, int pem);

cw_rv_t (*CW_CreateEnvelopedP7Buffer)(char *nickname, unsigned char *inbuf, unsigned int inlen, unsigned char **outbuf, unsigned int *outlen, int pem);

cw_rv_t (*CW_CreateEnvelopedP7File)(char *nickname, char *infile, char *outfile, int pem);

cw_rv_t (*CW_UnpackP7Buffer)(unsigned char *inbuf, unsigned int inlen, unsigned char **outbuf, unsigned int *outlen, int pem);

cw_rv_t (*CW_UnpackP7File)(char *infile, char *outfile, int pem);

cw_rv_t (*CW_CreateCertificateRequestFile)(char *token, char *subject, char *keyusage, int keyparams, char *outfile, int pem);

cw_rv_t (*CW_CreateCertificateRequestBuffer)(char *token, char *subject, char *keyusage, int keyparams, unsigned char **outbuf, unsigned int *outlen, int pem);

cw_rv_t (*CW_TlsClient)(char* sCertNickname, char* sHost, char* sPortNo, char* sInStr, cw_namelist_t *list, unsigned int *n);

cw_rv_t (*CW_UnpackSMIME)(char *infile, char *outfile);

char    *(*CW_ConfigDir)(char* base);

cw_rv_t (*CW_ReadFileContent)(const char *sFileName, cw_namelist_t *list, int* len);

cw_rv_t (*CW_CertOrReqView)(char *nickname, cw_namelist_t *list, unsigned int *len, int CertOrReq);

} cw_ftable_t;


При вызове функций cw_rv_t (*CW_CreateCertificateRequestFile)(char *token, char *subject, char *keyusage, int keyparams, char *outfile, int pem) и cw_rv_t (*CW_CreateCertificateRequestBuffer)(char *token, char *subject, char *keyusage, int keyparams, unsigned char **outbuf, unsigned int *outlen, int pem) параметр keyparams определяет тип ключевой пары (ГОСТ Р 34.10-2001 или ГОСТ Р 34.10-2012), длину ключа (256 или 512), параметры ключевой пары (A,B,C,XA,XB для ГОСТ Р 34.10-2001 и ГОСТ Р 34.10-2012 с длиной ключа 256 бит, параметры A или B для ГОСТ Р 34.10-2012  с длиной ключа 512 бит) и возможность экспорта закрытого ключа.

Тип ключа задается следующим образом:

#define key_2001	0x0000	/*Генерация ключевой пары по ГОСТ Р 34.10-2001  */
#define key_2012_256	0x2000	/*Генерация ключевой пары по ГОСТ Р 34.10-2012 с длиной ключа 256 бит */
#define key_2012_512	0x4000	/*Генерация ключевой пары по ГОСТ Р 34.10-2012 с длиной ключа 512 бит */

Параметры ключевой пары задаются следующим образом:

#define	param_A		0x00
#define	param_B		0x01
#define	param_C		0x02

#define param_XA 0x03

#define param_XB 0x04

Экспортируемость закрытого ключа задается следующим образом:

#define key_not_exportable0x8000
#define key_exportable0x0000 

Например, при задании keyparams=0xC0001 (key_not_exportable | key_2012_512 | param_B) будет сгенерирована ключевая пара по ГОСТ Р 34.10-2012 с длиной ключа 512 бит с параметрами B и невозможностью экспорта закрытого ключа.

Подробное описание библиотеки входит в комплект разработчика (SDK).

Функция CW_GetTokenList возвращает, помимо внутреннего хранилища (internal), список подключенных токенов, а на платформе MS Windows этот список дополняется виртуальным токеном MS_CSP, через который ведется работа с личными сертификатами, хранящимися в различных криптопровайдерах (ПК «ЛИССИ-CSP», КриптоПро CSP и т.п.).

Функция CW_ExportPKCS12ToFile на платформе MS Windows позволяет экспортировать личные сертификаты из хранилищ КриптоПро CSP.

Получить (заказать) библиотеку LirCryptoWrapper можно здесь.

Метки: LirCryptoWrapper.
© 2002-2018. ООО "ЛИССИ-Софт". Все права защищены
Телефон: +7(495) 589-99-53
Техническая поддержка: +7(499) 110-90-40
E-mail: [email protected]