2017-01-17 13:22:49 +03:00
webpackJsonpCryptoPro ( [ 2 ] , [
/* 0 */ ,
/* 1 */ ,
/* 2 */ ,
2017-06-08 16:55:04 +03:00
/* 3 */ ,
/* 4 */ ,
/* 5 */
2017-01-17 13:22:49 +03:00
/***/ function ( module , exports , _ _webpack _require _ _ ) {
2017-06-08 16:55:04 +03:00
var bowser = _ _webpack _require _ _ ( 1 ) ;
2017-01-17 13:22:49 +03:00
var oids = _ _webpack _require _ _ ( 6 ) ;
var subjectNameTagsTranslations = [
{ possibleNames : [ 'UnstructuredName' ] , translation : 'Неструктурированное имя' } ,
{ possibleNames : [ 'CN' ] , translation : 'Владелец' } ,
{ possibleNames : [ 'SN' ] , translation : 'Фамилия' } ,
{ possibleNames : [ 'G' ] , translation : 'Имя Отчество' } ,
{ possibleNames : [ 'C' ] , translation : 'Страна' } ,
{ possibleNames : [ 'S' ] , translation : 'Регион' } ,
{ possibleNames : [ 'STREET' ] , translation : 'Адрес' } ,
{ possibleNames : [ 'O' ] , translation : 'Компания' } ,
{ possibleNames : [ 'OU' ] , translation : 'Отдел/подразделение' } ,
{ possibleNames : [ 'T' ] , translation : 'Должность' } ,
{ possibleNames : [ 'ОГРН' , 'OGRN' ] , translation : 'ОГРН' } ,
{ possibleNames : [ 'ОГРНИП' , 'OGRNIP' ] , translation : 'ОГРНИП' } ,
{ possibleNames : [ 'СНИЛС' , 'SNILS' ] , translation : 'СНИЛС' } ,
{ possibleNames : [ 'ИНН' , 'INN' ] , translation : 'ИНН' } ,
{ possibleNames : [ 'E' ] , translation : 'Email' } ,
{ possibleNames : [ 'L' ] , translation : 'Город' }
] ,
issuerNameTagsTranslations = [
{ possibleNames : [ 'UnstructuredName' ] , translation : 'Неструктурированное имя' } ,
{ possibleNames : [ 'CN' ] , translation : 'Удостоверяющий центр' } ,
{ possibleNames : [ 'S' ] , translation : 'Регион' } ,
{ possibleNames : [ 'C' ] , translation : 'Страна' } ,
{ possibleNames : [ 'STREET' ] , translation : 'Адрес' } ,
{ possibleNames : [ 'O' ] , translation : 'Компания' } ,
{ possibleNames : [ 'OU' ] , translation : 'Тип' } ,
{ possibleNames : [ 'T' ] , translation : 'Должность' } ,
{ possibleNames : [ 'ОГРН' , 'OGRN' ] , translation : 'ОГРН' } ,
{ possibleNames : [ 'ОГРНИП' , 'OGRNIP' ] , translation : 'ОГРНИП' } ,
{ possibleNames : [ 'СНИЛС' , 'SNILS' ] , translation : 'СНИЛС' } ,
{ possibleNames : [ 'ИНН' , 'INN' ] , translation : 'ИНН' } ,
{ possibleNames : [ 'E' ] , translation : 'Email' } ,
{ possibleNames : [ 'L' ] , translation : 'Город' }
] ;
/ * *
* Парсит информацию из строки с информацией о сертификате
* * /
function parseCertInfo ( tags , infoString ) {
/ * *
* Пример входной строки :
*
T = Генеральный директор , UnstructuredName = "INN=7811514257/KPP=781101001/OGRN=1127847087884" ,
STREET = "Крыленко, д.3, лит.Б" , CN = Король Анатолий Евгеньевич , G = Анатолий Евгеньевич , SN = Король ,
OU = Администрация , O = "О О О " "Аксиома" "" , L = Санкт - Петербург , S = 78 г . Санкт - Петербург , C = RU , E = korol @ sferasro . ru ,
INN = 007811514257 , OGRN = 1127847087884 , SNILS = 11617693460
* * /
var result = infoString . match ( /([а -яА-Яa-zA-Z0-9\.]+)=(?:("[^"]+?")|(.+?))(?:,|$)/g ) ;
if ( result ) {
result = result . map ( function ( group ) {
/ * *
* Пример входной строки :
*
UnstructuredName = "INN=7811514257/KPP=781101001/OGRN=1127847087884" ,
* * /
var parts = group . match ( /^([а -яА-Яa-zA-Z0-9\.]+)=(.+?),?$/ ) ,
title = parts && parts [ 1 ] ,
descr = parts && parts [ 2 ] ,
translated = false ,
oidTitle ;
// Если тайтл содержит ОИД, пытаемся расшифровать
if ( /^OID./ . test ( title ) ) {
oidTitle = title . match ( /^OID\.(.*)/ ) ;
if ( oidTitle && oidTitle [ 1 ] ) {
oidTitle = oids [ oidTitle [ 1 ] ] ;
if ( oidTitle ) {
title = oidTitle ;
}
}
}
// Вырезаем лишние кавычки
descr = descr . replace ( /^"(.*)"/ , '$1' ) ;
descr = descr . replace ( /"{2}/g , '"' ) ;
tags . some ( function ( tag ) {
return tag . possibleNames . some ( function ( possible ) {
var match = possible === title ;
if ( match ) {
title = tag . translation ;
translated = true ;
}
return match ;
} ) ;
} ) ;
return {
title : title ,
descr : descr ,
translated : translated
} ;
} ) ;
}
return result ;
}
/ * *
* Возвращает дату в формате ( dd . mm . yyyy hh : mm : ss ) из строки , формата , используемого плагином cryptoPro
* * /
function getReadableDate ( date ) {
date = new Date ( date ) ;
return ( [
date . getDate ( ) ,
date . getMonth ( ) + 1 ,
date . getFullYear ( )
] . join ( '.' ) + ' ' + [
date . getHours ( ) ,
date . getMinutes ( ) ,
date . getSeconds ( )
] . join ( ':' ) ) . replace ( /\b(\d)\b/g , '0$1' ) ;
}
/ * *
* Преобразует дату для IE
* * /
function getDateObj ( dateObj ) {
return bowser . msie ? dateObj . getVarDate ( ) : dateObj ;
}
/ * *
* Подготавливает информацию о сертификатах
* * /
function prepareCertsInfo ( items ) {
return items . map ( function ( c ) {
2017-10-09 18:54:46 +03:00
c . name = c . subjectName . match ( /CN=(.+?)(?:,|$)/ ) ;
2017-01-17 13:22:49 +03:00
// Удалось ли вытащить Common Name
if ( c . name && c . name [ 1 ] ) {
c . name = c . name [ 1 ] ;
}
c . validFrom = getReadableDate ( c . validFrom ) ;
c . validTo = getReadableDate ( c . validTo ) ;
c . label = c . name + ' (до ' + c . validTo + ')' ;
return c ;
} ) ;
}
/ * *
* Возвращает расшифрованные ОИД ' ы
* * /
function getDecodedExtendedKeyUsage ( ) {
var that = this ;
return new Promise ( function ( resolve ) {
that . getExtendedKeyUsage ( ) . then ( function ( certOids ) {
resolve ( certOids . reduce ( function ( oidsLst , oid ) {
oid = {
id : oid ,
descr : oids [ oid ] || null
} ;
if ( oid . descr ) {
oidsLst . unshift ( oid ) ;
} else {
oidsLst . push ( oid ) ;
}
return oidsLst ;
} , [ ] ) ) ;
} ) ;
} ) ;
}
/ * *
* Проверка наличия ОИД 'а (ОИД' ов ) у сертификата
*
* @ param { String | Array } oids - ОИД ' ы для проверки
* @ returns { Promise } с отложенным результатом типа { Boolean }
* * /
function hasExtendedKeyUsage ( oids ) {
var that = this ;
return new Promise ( function ( resolve ) {
that . getExtendedKeyUsage ( ) . then ( function ( certOids ) {
var result ;
if ( Array . isArray ( oids ) ) {
result = oids . every ( function ( oidToCheck ) {
return certOids . some ( function ( certOid ) {
return certOid === oidToCheck ;
} ) ;
} ) ;
} else {
result = certOids . some ( function ( certOid ) {
return certOid === oids ;
} ) ;
}
resolve ( result ) ;
} ) ;
} ) ;
}
/ * *
* Выводит информацию о системе пользователя
* * /
function getEnvInfo ( ) {
var parsed = bowser . _detect ( navigator . userAgent ) ,
info = {
browserName : parsed . name ,
browserVersion : parsed . version
} ;
if ( parsed . mac ) {
info . os = 'Mac' ;
} else if ( parsed . windows ) {
info . os = 'Windows' ;
} else if ( parsed . linux ) {
info . os = 'Linux' ;
}
return info ;
}
/ * *
* Подходящая ли версия CSP
* * /
function isValidCSPVersion ( version ) {
version = version . match ( /\d+?\b(?:\.\d+)?/ ) ;
return version >= 3.6 ;
}
/ * *
* Подходящая ли версия cades плагина
* * /
function isValidCadesVersion ( version ) {
version = version . split ( '.' ) . reduce ( function ( verInfo , number , i ) {
if ( i === 0 ) {
verInfo . major = number ;
} else if ( i === 1 ) {
verInfo . minor = number ;
} else if ( i === 2 ) {
verInfo . patch = number ;
}
return verInfo ;
} , { } ) ;
if ( version . major < 2 ) {
return false ;
}
return version . patch >= 12438 ;
}
module . exports = {
subjectNameTagsTranslations : subjectNameTagsTranslations ,
issuerNameTagsTranslations : issuerNameTagsTranslations ,
parseCertInfo : parseCertInfo ,
getReadableDate : getReadableDate ,
getDateObj : getDateObj ,
prepareCertsInfo : prepareCertsInfo ,
getDecodedExtendedKeyUsage : getDecodedExtendedKeyUsage ,
hasExtendedKeyUsage : hasExtendedKeyUsage ,
getEnvInfo : getEnvInfo ,
isValidCSPVersion : isValidCSPVersion ,
isValidCadesVersion : isValidCadesVersion
} ;
/***/ } ,
/* 6 */
/***/ function ( module , exports ) {
module . exports = {
'1.2.840.113549.1.9.2' : 'Неструктурированное имя' ,
'1.2.643.3.141.1.1' : 'Р Н С ФСС' ,
'1.2.643.3.141.1.2' : 'КП ФСС' ,
'1.2.643.3.131.1.1' : 'ИНН' ,
'1.3.6.1.5.5.7.3.2' : 'Проверка подлинности клиента' ,
'1.3.6.1.5.5.7.3.4' : 'Защищенная электронная почта' ,
'1.2.643.3.8.100.1' : 'Сертификат типа "ekey-ГОСТ"' ,
'1.2.643.3.8.100.1.1' : 'Общее использование в системах ИОК без права заверения финансовых документов' ,
'1.2.643.3.8.100.1.2' : 'Передача отчетности по Т К С ' ,
'1.2.643.3.8.100.1.3' : 'Оформление взаимных обязательств, соглашений, договоров, актов и т.п.' ,
'1.2.643.3.8.100.1.4' : 'Внутрикорпоративный документооборот' ,
'1.2.643.3.8.100.1.5' : 'Использование в системах электронной торговли' ,
'1.2.643.3.8.100.1.6' : 'Использование в торгово-закупочной системе "ЭЛЕКТРА"' ,
'1.2.643.6.2.1.7.2' : 'Использование физическим лицом в отношениях, связанных с возникновением, исполнением (осуществлением) и прекращением гражданских прав и обязанностей в отношении инвестиционных паев паевых инвестиционных фондов, в том числе отношения, связанные с учетом и/или фиксацией прав на инвестиционные паи паевых инвестиционных фондов' ,
'1.2.643.6.2.1.7.1' : 'Использование единоличным исполнительным органом юридического лица или уполномоченными представителями юридического лица в отношениях, связанных с возникновением, исполнением (осуществлением) и прекращением гражданских и иных прав и обязанностей в сфере негосударственного пенсионного обеспечения, негосударственного пенсионного страхования, в сфере деятельности паевых инвестиционных фондов, акционерных инвестиционных фондов, профессиональных участников рынка ценных бумаг, а также связанной с обслуживанием указанной деятельности услуг кредитных и иных организаций' ,
'1.3.6.1.4.1.29919.21' : 'Использование в системе Портал государственных закупок Ростовской области "Рефери".' ,
'1.2.643.3.2.100.65.13.11' : 'Использование в системе АИС "Госзакупки" Сахалинской области.' ,
'1.2.643.3.8.100.1.7' : 'Использование в системе Портал государственных закупок Ставропольского края.' ,
'1.2.643.3.8.100.1.8' : 'Использование в Единой системе электронной торговли B2B-Center и B2G.' ,
'1.2.643.3.8.100.1.9' : 'Для участия в электронных торгах и подписания государственного контракта в электронной площадке О А О «ЕЭТП» уполномоченными лицами участников размещения государственного или муниципального заказа' ,
'1.2.643.3.8.100.1.10' : 'Для участия в электронных торгах и подписания государственного контракта в информационных системах Тендерного комитета города Москвы уполномоченными лицами участников размещения государственного заказа города Москвы' ,
'1.2.643.3.8.100.1.11' : 'Подписание электронных документов в автоматизированной информационной системе размещения государственного и муниципального заказа Саратовской области' ,
'1.2.643.3.8.100.1.12' : 'Использование в системе государственного заказа Иркутской области' ,
'1.2.643.3.8.100.1.13' : 'Использование в электронной торговой площадке агентства государственного заказа Красноярского края' ,
'1.3.6.1.4.1.24138.1.1.8.1' : 'Обеспечение юридической значимости в Системе "Электронная Торговая Площадка"' ,
'1.2.643.3.8.100.1.14' : 'Использование в электронной торговой площадке "Тендер"' ,
'1.2.643.6.3' : 'Использование в электронных торговых системах и в программном обеспечении, связанным с обменом электронных сообщений' ,
'1.2.643.2.2.34.6' : 'Пользователь Центра Регистрации' ,
'1.2.643.2.39.1.1' : 'Использование в программных продуктах системы "1С :Предприятие 8"' ,
'1.2.643.5.1.24.2.1.3' : 'Формирование документов для получения государственных услуг в сфере ведения государственного кадастра недвижимости с о стороны заявителя' ,
'1.2.643.5.1.24.2.1.3.1' : 'Формирование кадастровым инженером документов для получения государственных услуг в сфере ведения государственного кадастра недвижимости с о стороны заявителя' ,
'1.2.643.5.1.24.2.2.2' : 'Формирование документов как результата оказания услуги с о стороны органов регистрации прав' ,
'1.2.643.5.1.24.2.2.3' : 'Формирование документов для получения государственных услуг в сфере государственной регистрации прав на недвижимое имущество и сделок с ним с о стороны заявителя' ,
'1.2.643.6.3.1.1' : 'Использование на электронных площадок отобранных для проведения аукционах в электронной форме' ,
'1.2.643.6.3.1.2.1' : 'Тип участника - Юридическое лицо' ,
'1.2.643.6.3.1.2.2' : 'Тип участника - Физическое лицо' ,
'1.2.643.6.3.1.2.3' : 'Тип участника - Индивидуальный предприниматель' ,
'1.2.643.6.3.1.3.1' : 'Участник размещения заказа' ,
'1.2.643.6.3.1.4.1' : 'Администратор организации' ,
'1.2.643.6.3.1.4.2' : 'Уполномоченный специалист' ,
'1.2.643.6.3.1.4.3' : 'Специалист с правом подписи контракта' ,
'1.3.643.3.8.100.15' : 'Использование в ЭТП "uTender"'
} ;
/***/ } ,
/* 7 */
/***/ function ( module , exports ) {
module . exports = {
// CAPICOM_STORE_LOCATION enumeration
StoreLocation : {
CAPICOM _MEMORY _STORE : 0 ,
CAPICOM _LOCAL _MACHINE _STORE : 1 ,
CAPICOM _CURRENT _USER _STORE : 2 ,
CAPICOM _ACTIVE _DIRECTORY _USER _STORE : 3 ,
CAPICOM _SMART _CARD _USER _STORE : 4
} ,
// CAPICOM_STORE_OPEN_MODE enumeration
StoreOpenMode : {
CAPICOM _STORE _OPEN _READ _ONLY : 0 ,
CAPICOM _STORE _OPEN _READ _WRITE : 1 ,
CAPICOM _STORE _OPEN _MAXIMUM _ALLOWED : 2 ,
CAPICOM _STORE _OPEN _EXISTING _ONLY : 128 ,
CAPICOM _STORE _OPEN _INCLUDE _ARCHIVED : 256
} ,
// CAPICOM_CERTIFICATE_FIND_TYPE enumeration
CertFindType : {
CAPICOM _CERTIFICATE _FIND _SHA1 _HASH : 0 ,
CAPICOM _CERTIFICATE _FIND _SUBJECT _NAME : 1 ,
CAPICOM _CERTIFICATE _FIND _ISSUER _NAME : 2 ,
CAPICOM _CERTIFICATE _FIND _ROOT _NAME : 3 ,
CAPICOM _CERTIFICATE _FIND _TEMPLATE _NAME : 4 ,
CAPICOM _CERTIFICATE _FIND _EXTENSION : 5 ,
CAPICOM _CERTIFICATE _FIND _EXTENDED _PROPERTY : 6 ,
CAPICOM _CERTIFICATE _FIND _APPLICATION _POLICY : 7 ,
CAPICOM _CERTIFICATE _FIND _CERTIFICATE _POLICY : 8 ,
CAPICOM _CERTIFICATE _FIND _TIME _VALID : 9 ,
CAPICOM _CERTIFICATE _FIND _TIME _NOT _YET _VALID : 10 ,
CAPICOM _CERTIFICATE _FIND _TIME _EXPIRED : 11 ,
CAPICOM _CERTIFICATE _FIND _KEY _USAGE : 12
} ,
Time : {
AUTHENTICATED _ATTRIBUTE _SIGNING _TIME : 0
} ,
Check : {
CHECK _NONE : 0 ,
CHECK _TRUSTED _ROOT : 1 ,
CHECK _TIME _VALIDITY : 2 ,
CHECK _SIGNATURE _VALIDITY : 4 ,
CHECK _ONLINE _REVOCATION _STATUS : 8 ,
CHECK _OFFLINE _REVOCATION _STATUS : 16 ,
TRUST _IS _NOT _TIME _VALID : 1 ,
TRUST _IS _NOT _TIME _NESTED : 2 ,
TRUST _IS _REVOKED : 4 ,
TRUST _IS _NOT _SIGNATURE _VALID : 8 ,
TRUST _IS _NOT _VALID _FOR _USAGE : 16 ,
TRUST _IS _UNTRUSTED _ROOT : 32 ,
TRUST _REVOCATION _STATUS _UNKNOWN : 64 ,
TRUST _IS _CYCLIC : 128 ,
TRUST _IS _PARTIAL _CHAIN : 65536 ,
TRUST _CTL _IS _NOT _TIME _VALID : 131072 ,
TRUST _CTL _IS _NOT _SIGNATURE _VALID : 262144 ,
TRUST _CTL _IS _NOT _VALID _FOR _USAGE : 524288 ,
} ,
// CAPICOM_PROPID enumeration
PropId : {
CAPICOM _PROPID _UNKNOWN : 0 ,
CAPICOM _PROPID _KEY _PROV _HANDLE : 1 ,
CAPICOM _PROPID _KEY _PROV _INFO : 2 ,
CAPICOM _PROPID _SHA1 _HASH : 3 ,
CAPICOM _PROPID _HASH _PROP : 3 ,
CAPICOM _PROPID _MD5 _HASH : 4 ,
CAPICOM _PROPID _KEY _CONTEXT : 5 ,
CAPICOM _PROPID _KEY _SPEC : 6 ,
CAPICOM _PROPID _IE30 _RESERVED : 7 ,
CAPICOM _PROPID _PUBKEY _HASH _RESERVED : 8 ,
CAPICOM _PROPID _ENHKEY _USAGE : 9 ,
CAPICOM _PROPID _CTL _USAGE : 9 ,
CAPICOM _PROPID _NEXT _UPDATE _LOCATION : 10 ,
CAPICOM _PROPID _FRIENDLY _NAME : 11 ,
CAPICOM _PROPID _PVK _FILE : 12 ,
CAPICOM _PROPID _DESCRIPTION : 13 ,
CAPICOM _PROPID _ACCESS _STATE : 14 ,
CAPICOM _PROPID _SIGNATURE _HASH : 15 ,
CAPICOM _PROPID _SMART _CARD _DATA : 16 ,
CAPICOM _PROPID _EFS : 17 ,
CAPICOM _PROPID _FORTEZZA _DATA : 18 ,
CAPICOM _PROPID _ARCHIVED : 19 ,
CAPICOM _PROPID _KEY _IDENTIFIER : 20 ,
CAPICOM _PROPID _AUTO _ENROLL : 21 ,
CAPICOM _PROPID _PUBKEY _ALG _PARA : 22 ,
CAPICOM _PROPID _CROSS _CERT _DIST _POINTS : 23 ,
CAPICOM _PROPID _ISSUER _PUBLIC _KEY _MD5 _HASH : 24 ,
CAPICOM _PROPID _SUBJECT _PUBLIC _KEY _MD5 _HASH : 25 ,
CAPICOM _PROPID _ENROLLMENT : 26 ,
CAPICOM _PROPID _DATE _STAMP : 27 ,
CAPICOM _PROPID _ISSUER _SERIAL _NUMBER _MD5 _HASH : 28 ,
CAPICOM _PROPID _SUBJECT _NAME _MD5 _HASH : 29 ,
CAPICOM _PROPID _EXTENDED _ERROR _INFO : 30 ,
CAPICOM _PROPID _RENEWAL : 64 ,
CAPICOM _PROPID _ARCHIVED _KEY _HASH : 65 ,
CAPICOM _PROPID _FIRST _RESERVED : 66 ,
CAPICOM _PROPID _LAST _RESERVED : 0x00007FFF ,
CAPICOM _PROPID _FIRST _USER : 0x00008000 ,
CAPICOM _PROPID _LAST _USER : 0x0000FFFF
} ,
// CADESCOM_XML_SIGNATURE_TYPE enumeration
SignatureType : {
CADESCOM _XML _SIGNATURE _TYPE _ENVELOPED : 0 ,
CADESCOM _XML _SIGNATURE _TYPE _ENVELOPING : 1 ,
CADESCOM _XML _SIGNATURE _TYPE _TEMPLATE : 2
} ,
// CADESCOM_HASH_ALGORITHM enumeration
HashAlgorithm : {
CADESCOM _HASH _ALGORITHM _CP _GOST _3411 : 100 ,
CADESCOM _HASH _ALGORITHM _MD2 : 1 ,
CADESCOM _HASH _ALGORITHM _MD4 : 2 ,
CADESCOM _HASH _ALGORITHM _MD5 : 3 ,
CADESCOM _HASH _ALGORITHM _SHA _256 : 4 ,
CADESCOM _HASH _ALGORITHM _SHA _384 : 5 ,
CADESCOM _HASH _ALGORITHM _SHA _512 : 6 ,
CADESCOM _HASH _ALGORITHM _SHA1 : 0
} ,
CadesType : {
CADESCOM _CADES _DEFAULT : 0 ,
CADESCOM _CADES _BES : 1 ,
CADESCOM _CADES _X _LONG _TYPE _1 : 0x5d
} ,
ContentEncoding : {
CADESCOM _BASE64 _TO _BINARY : 0x01 ,
CADESCOM _STRING _TO _UCS2LE : 0x00
} ,
StoreNames : {
CAPICOM _MY _STORE : 'My'
} ,
Chain : {
CAPICOM _CERTIFICATE _INCLUDE _CHAIN _EXCEPT _ROOT : 0 ,
CAPICOM _CERTIFICATE _INCLUDE _WHOLE _CHAIN : 1 ,
CAPICOM _CERTIFICATE _INCLUDE _END _ENTITY _ONLY : 2
} ,
GostXmlDSigUrls : {
XmlDsigGost3410Url : 'urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411' ,
XmlDsigGost3411Url : 'urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411' ,
XmlDsigGost3410UrlObsolete : 'http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411' ,
XmlDsigGost3411UrlObsolete : 'http://www.w3.org/2001/04/xmldsig-more#gostr3411'
}
} ;
/***/ } ,
/* 8 */
/***/ function ( module , exports , _ _webpack _require _ _ ) {
2017-06-08 16:55:04 +03:00
var cryptoCommon = _ _webpack _require _ _ ( 5 ) ,
2017-01-17 13:22:49 +03:00
cryptoConstants = _ _webpack _require _ _ ( 7 ) ,
2017-06-08 16:55:04 +03:00
_certListCache ;
2017-01-17 13:22:49 +03:00
2017-06-08 16:55:04 +03:00
function Certificate ( item ) {
this . _cert = item . _cert ;
this . thumbprint = item . thumbprint ;
this . subjectName = item . subjectName ;
this . issuerName = item . issuerName ;
this . validFrom = item . validFrom ;
this . validTo = item . validTo ;
}
2017-01-17 13:22:49 +03:00
2017-06-08 16:55:04 +03:00
/ * *
* Проверяет , валиден ли сертификат
* * /
Certificate . prototype . isValid = function isValid ( ) {
var cert = this . _cert ;
2017-01-17 13:22:49 +03:00
2017-06-08 16:55:04 +03:00
return new Promise ( function ( resolve , reject ) {
var result ;
2017-01-17 13:22:49 +03:00
2017-06-08 16:55:04 +03:00
try {
result = cert . IsValid ( ) ;
result = result . Result ;
} catch ( err ) {
reject ( 'Ошибка при проверке сертификата: ' , err . message ) ;
return ;
}
2017-01-17 13:22:49 +03:00
2017-06-08 16:55:04 +03:00
resolve ( result ) ;
} ) ;
} ;
2017-01-17 13:22:49 +03:00
2017-06-08 16:55:04 +03:00
/ * *
* Достает указанное свойство у сертификата
* * /
Certificate . prototype . getProp = function ( propName ) {
var cert = this . _cert ;
2017-01-17 13:22:49 +03:00
2017-06-08 16:55:04 +03:00
return new Promise ( function ( resolve , reject ) {
var result ;
2017-01-17 13:22:49 +03:00
2017-06-08 16:55:04 +03:00
try {
result = cert [ propName ] ;
} catch ( err ) {
reject ( 'Ошибка при обращении к свойству сертификата: ' , err . message ) ;
return ;
}
2017-01-17 13:22:49 +03:00
2017-06-08 16:55:04 +03:00
resolve ( result ) ;
} ) ;
} ;
/ * *
* Экспорт base64 представления сертификата пользователя
* * /
Certificate . prototype . exportBase64 = function exportBase64 ( ) {
var cert = this . _cert ;
return new Promise ( function ( resolve , reject ) {
var base64 ;
try {
base64 = cert . Export ( 0 ) ;
} catch ( err ) {
reject ( 'Ошибка при экспорте сертификата: ' , err . message ) ;
return ;
}
resolve ( base64 ) ;
} ) ;
} ;
/ * *
* Возвращает информацию о б алгоритме
* * /
Certificate . prototype . getAlgorithm = function getAlgorithm ( ) {
var cert = this . _cert ;
return new Promise ( function ( resolve , reject ) {
var result = { } ,
algorithm ;
try {
algorithm = cert . PublicKey ( ) ;
algorithm = algorithm . Algorithm ;
result . algorithm = algorithm . FriendlyName ;
result . oid = algorithm . Value ;
} catch ( err ) {
reject ( 'Ошибка при получении алгоритма: ' , err . message ) ;
return ;
}
resolve ( result ) ;
} ) ;
} ;
/ * *
* Разбирает SubjectName сертификата по тэгам
* * /
Certificate . prototype . getOwnerInfo = function getOwnerInfo ( ) {
return getCertInfo . call ( this , cryptoCommon . subjectNameTagsTranslations , 'SubjectName' ) ;
} ;
/ * *
* Разбирает IssuerName сертификата по тэгам
* * /
Certificate . prototype . getIssuerInfo = function getIssuerInfo ( ) {
return getCertInfo . call ( this , cryptoCommon . issuerNameTagsTranslations , 'IssuerName' ) ;
} ;
/ * *
* Получение OID сертификата
* Возвращает массив OID ( улучшенного ключа )
* * /
Certificate . prototype . getExtendedKeyUsage = function getExtendedKeyUsage ( ) {
var cert = this . _cert ;
return new Promise ( function ( resolve , reject ) {
var OIDS = [ ] ,
count ,
item ;
try {
count = cert . ExtendedKeyUsage ( ) ;
count = count . EKUs ;
count = count . Count ;
if ( count > 0 ) {
while ( count > 0 ) {
item = cert . ExtendedKeyUsage ( ) ;
item = item . EKUs ;
item = item . Item ( count ) ;
item = item . OID ;
OIDS . push ( item ) ;
count -- ;
}
}
} catch ( err ) {
reject ( 'Ошибка при получении ОИД\'ов: ' , err . message ) ;
return ;
}
resolve ( OIDS ) ;
} ) ;
} ;
Certificate . prototype . getDecodedExtendedKeyUsage = cryptoCommon . getDecodedExtendedKeyUsage ;
Certificate . prototype . hasExtendedKeyUsage = cryptoCommon . hasExtendedKeyUsage ;
2017-01-17 13:22:49 +03:00
/ * *
* Проверяет корректность настроек ЭП на машине
* * /
function isValidEDSSettings ( ) {
return new Promise ( function ( resolve , reject ) {
var result ;
try {
result = cadesplugin . CreateObject ( 'CAdESCOM.About' ) ;
} catch ( error ) {
reject ( 'Настройки ЭП на данной машине не верны' ) ;
}
resolve ( ) ;
} ) ;
}
/ * *
* Получить сертификат в формате cades по хэшу
* * /
function getCadesCert ( hash ) {
return new Promise ( function ( resolve , reject ) {
var oStore = cadesplugin . CreateObject ( 'CAdESCOM.Store' ) ,
certs ,
certCnt ,
cert ;
if ( ! oStore ) {
reject ( 'Н е удалось получить доступ к хранилищу сертификатов' ) ;
return ;
}
// Открываем хранилище
try {
oStore . Open (
cadesplugin . CAPICOM _CURRENT _USER _STORE ,
cadesplugin . CAPICOM _MY _STORE ,
cadesplugin . CAPICOM _STORE _OPEN _MAXIMUM _ALLOWED
) ;
} catch ( err ) {
reject ( 'Ошибка при открытии хранилища: ' + err . message ) ;
return ;
}
// Получаем доступ к сертификатам
try {
certs = oStore . Certificates ;
certCnt = certs . Count ;
} catch ( err ) {
reject ( 'Ошибка получения списка сертификатов: ' + err . message ) ;
return ;
}
if ( ! certCnt ) {
reject ( 'Нет доступных сертификатов' ) ;
return ;
}
// Получаем сертификат по хэшу
try {
certs = certs . Find ( cadesplugin . CAPICOM _CERTIFICATE _FIND _SHA1 _HASH , hash ) ;
if ( certs . Count ) {
cert = certs . Item ( 1 ) ;
} else {
2017-01-30 16:01:10 +03:00
throw new Error ( hash ) ;
2017-01-17 13:22:49 +03:00
}
} catch ( err ) {
reject ( 'Н е удалось получить сертификат по хэшу: ' + err . message ) ;
return ;
}
oStore . Close ( ) ;
resolve ( cert ) ;
} ) ;
}
/ * *
* Разбирает информацию сертификата по тэгам
* * /
function getCertInfo ( tags , propName ) {
var cert = this . _cert ;
return new Promise ( function ( resolve , reject ) {
var propInfo ;
try {
propInfo = cert [ propName ] ;
} catch ( err ) {
reject ( 'Ошибка при извлечении данных из сертификата: ' , err . message ) ;
return ;
}
resolve ( cryptoCommon . parseCertInfo ( tags , propInfo ) ) ;
} ) ;
}
/ * *
* Возвращает список сертификатов , доступных в системе
*
* @ param { Boolean } [ resetCache = false ] -- нужно ли сбросить кэш списка сертификатов
* @ returns { Promise } -- с о списком сертификатов { Array }
* * /
function getCertsList ( resetCache ) {
return new Promise ( function ( resolve , reject ) {
if ( ! resetCache && _certListCache ) {
resolve ( _certListCache ) ;
return ;
}
var oStore = cadesplugin . CreateObject ( 'CAdESCOM.Store' ) ,
result = [ ] ,
certs ,
count ,
item ;
// Открываем хранилище
try {
oStore . Open (
cadesplugin . CAPICOM _CURRENT _USER _STORE ,
cadesplugin . CAPICOM _MY _STORE ,
cadesplugin . CAPICOM _STORE _OPEN _MAXIMUM _ALLOWED
) ;
} catch ( err ) {
reject ( 'Ошибка при открытии хранилища: ' + err . message ) ;
return ;
}
// Получаем доступ к сертификатам
try {
certs = oStore . Certificates ;
if ( certs ) {
certs = certs . Find ( cadesplugin . CAPICOM _CERTIFICATE _FIND _TIME _VALID ) ;
/ * *
* Н е рассматриваются сертификаты , в которых отсутствует закрытый ключ
* или не действительны на данный момент
* * /
certs = certs . Find (
cadesplugin . CAPICOM _CERTIFICATE _FIND _EXTENDED _PROPERTY ,
cryptoConstants . PropId . CAPICOM _PROPID _KEY _PROV _INFO
) ;
count = certs . Count ;
}
} catch ( err ) {
reject ( 'Ошибка получения списка сертификатов: ' + err . message ) ;
return ;
}
if ( ! count ) {
reject ( 'Нет доступных сертификатов' ) ;
return ;
}
try {
while ( count ) {
item = certs . Item ( count ) ;
2017-06-08 16:55:04 +03:00
result . push ( new Certificate ( {
2017-01-17 13:22:49 +03:00
_cert : item ,
thumbprint : item . Thumbprint ,
subjectName : item . SubjectName ,
issuerName : item . IssuerName ,
validFrom : item . ValidFromDate ,
validTo : item . ValidToDate
} ) ) ;
count -- ;
}
} catch ( err ) {
reject ( 'Ошибка обработки сертификатов: ' + err . message ) ;
return ;
}
oStore . Close ( ) ;
_certListCache = cryptoCommon . prepareCertsInfo ( result ) ;
resolve ( _certListCache ) ;
} ) ;
}
/ * *
* Получить сертификат по хэшу
* * /
function getCert ( hash ) {
return new Promise ( function ( resolve , reject ) {
if ( ! hash ) {
reject ( 'Хэш не указан' ) ;
return ;
}
getCertsList ( ) . then ( function ( list ) {
var foundCert ;
list . some ( function ( cert ) {
if ( hash === cert . thumbprint ) {
foundCert = cert ;
return true ;
}
} ) ;
if ( foundCert ) {
resolve ( foundCert ) ;
} else {
reject ( 'Сертификат с хэшем: "' + hash + '" не найден' ) ;
}
} , reject ) ;
} ) ;
}
/ * *
* Создает подпись base64 строки по hash ' у сертификата
*
* @ param { String } hash -- fingerprint ( thumbprint ) сертификата
* @ param { String } dataBase64 -- строковые данные в формате base64
2017-01-17 15:25:37 +03:00
* @ param { Boolean } signType -- тип подписи открепленная ( true ) / присоединенная ( false ) ( default : true )
2017-01-17 13:22:49 +03:00
* @ returns { Promise } -- обещание , которое зарезолвится с данными о подписи { String }
* * /
function signData ( hash , dataBase64 , signType ) {
2017-01-17 15:25:37 +03:00
signType = typeof signType === 'undefined' ? true : Boolean ( signType ) ;
2017-01-17 13:22:49 +03:00
return new Promise ( function ( resolve , reject ) {
getCadesCert ( hash ) . then ( function ( cert ) {
var clientTime = new Date ( ) ,
oAttrs = cadesplugin . CreateObject ( 'CADESCOM.CPAttribute' ) ,
oSignedData = cadesplugin . CreateObject ( 'CAdESCOM.CadesSignedData' ) ,
oSigner = cadesplugin . CreateObject ( 'CAdESCOM.CPSigner' ) ,
attrs ,
signature ;
clientTime = cryptoCommon . getDateObj ( clientTime ) ;
try {
oAttrs . Name = cryptoConstants . Time . AUTHENTICATED _ATTRIBUTE _SIGNING _TIME ;
oAttrs . Value = clientTime ;
} catch ( err ) {
reject ( 'Ошибка при установке данных подписи: ' + err . message ) ;
return ;
}
// Задаем настройки для подписи
try {
oSigner . Certificate = cert ;
attrs = oSigner . AuthenticatedAttributes2 ;
attrs . Add ( oAttrs ) ;
oSignedData . ContentEncoding = cadesplugin . CADESCOM _BASE64 _TO _BINARY ;
oSignedData . Content = dataBase64 ;
oSigner . Options = cadesplugin . CAPICOM _CERTIFICATE _INCLUDE _END _ENTITY _ONLY ;
} catch ( err ) {
reject ( 'Н е удалось установить настройки для подписи: ' + err . message ) ;
return ;
}
try {
signature = oSignedData . SignCades (
oSigner ,
cadesplugin . CADESCOM _CADES _BES ,
2017-01-17 15:25:37 +03:00
signType
2017-01-17 13:22:49 +03:00
) ;
} catch ( err ) {
reject ( 'Н е удалось создать подпись: ' + err . message ) ;
return ;
}
resolve ( signature ) ;
2017-01-30 15:20:20 +03:00
} , reject ) ;
2017-01-17 13:22:49 +03:00
} ) ;
}
/ * *
* Создает подпись XML строки по hash ' у сертификата
*
* @ param { String } hash -- fingerprint ( thumbprint ) сертификата
* @ param { String } dataXML -- данные в формате XML
* @ returns { Promise } -- обещание , которое зарезолвится с данными о подписи { String }
* * /
function signDataXML ( hash , dataXML ) {
return new Promise ( function ( resolve , reject ) {
getCadesCert ( hash ) . then ( function ( cert ) {
var oSigner = cadesplugin . CreateObject ( 'CAdESCOM.CPSigner' ) ,
signerXML = cadesplugin . CreateObject ( 'CAdESCOM.SignedXML' ) ,
cnts = cryptoConstants ,
signature ;
// Задаем настройки для подписи
try {
oSigner . Certificate = cert ;
// Добавляем данные для подписи
signerXML . Content = dataXML ;
// Устанавливаем тип подписи
signerXML . SignatureType = cnts . SignatureType . CADESCOM _XML _SIGNATURE _TYPE _ENVELOPED ;
// Устанавливаем алгоритм подписи
signerXML . SignatureMethod = cnts . GostXmlDSigUrls . XmlDsigGost3410Url ;
// Устанавливаем алгоритм хэширования
signerXML . DigestMethod = cnts . GostXmlDSigUrls . XmlDsigGost3411Url ;
} catch ( err ) {
reject ( 'Н е удалось установить настройки для подписи: ' + err . message ) ;
return ;
}
try {
signature = signerXML . Sign ( oSigner ) ;
} catch ( err ) {
reject ( 'Н е удалось создать подпись: ' + err . message ) ;
return ;
}
resolve ( signature ) ;
2017-01-30 15:20:20 +03:00
} , reject ) ;
2017-01-17 13:22:49 +03:00
} ) ;
}
/ * *
* Возвращает информацию о версии CSP и плагина
* * /
function getSystemInfo ( ) {
var sysInfo = cryptoCommon . getEnvInfo ( ) ;
return new Promise ( function ( resolve , reject ) {
var e ;
try {
e = cadesplugin . CreateObject ( 'CAdESCOM.About' ) ;
sysInfo . cadesVersion = e . PluginVersion ;
// Возможен вызов в ранних версиях в виде sysInfo.cspVersion = e.CSPVersion('', 75);
sysInfo . cspVersion = e . CSPVersion ( ) ;
if ( ! sysInfo . cadesVersion ) {
sysInfo . cadesVersion = e . Version ;
}
sysInfo . cadesVersion = sysInfo . cadesVersion . toString ( ) ;
sysInfo . cspVersion = sysInfo . cspVersion . toString ( ) ;
resolve ( sysInfo ) ;
} catch ( err ) {
reject ( 'Ошибка при получении информации о системе: ' , err . message ) ;
}
} ) ;
}
/ * *
* Promise обертка для синхронного вызова проверки версии CSP
* * /
function isValidCSPVersion ( version ) {
return new Promise ( function ( resolve ) {
resolve ( cryptoCommon . isValidCSPVersion ( version ) ) ;
} ) ;
}
/ * *
* Promise обертка для синхронного вызова проверки версии плагина
* * /
function isValidCadesVersion ( version ) {
return new Promise ( function ( resolve ) {
resolve ( cryptoCommon . isValidCadesVersion ( version ) ) ;
} ) ;
}
module . exports = {
isValidEDSSettings : isValidEDSSettings ,
getCertsList : getCertsList ,
getCert : getCert ,
signData : signData ,
signDataXML : signDataXML ,
getSystemInfo : getSystemInfo ,
isValidCSPVersion : isValidCSPVersion ,
isValidCadesVersion : isValidCadesVersion
} ;
/***/ }
] ) ;
//# sourceMappingURL=2.crypto-pro.js.map