async-cadesplugin-extended
Version:
Расширенный функционал API для работы с cadesplugin
108 lines (93 loc) • 3.88 kB
JavaScript
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// NOTE Imports
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
import * as constants from './constants';
const {
XML_DSIG_GOST: {
XmlDsigGost2012Url256,
XmlDsigGost2012Url256Digest,
XmlDsigGost2012Url512,
XmlDsigGost2012Url512Digest,
XmlDsigGost3410Url,
XmlDsigGost3411Url,
},
CADESCOM: {
CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED,
CADESCOM_XML_SIGNATURE_TYPE_ENVELOPING,
CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE,
}
} = constants;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// NOTE Functions
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* @function template
* @param {String} signAlgorithm алгоритм подписи
*/
function template(signAlgorithm) {
/**
* @function doHashAlgorithm
* @param {String} hashAlgorithm алгоритм хэширования
*/
return function doHashAlgorithm(hashAlgorithm) {
return {
signAlgorithm,
hashAlgorithm,
};
};
}
/**
* @function xmlSitnatureType
* @param {Number} CADESCOM_XML_SIGNATURE_TYPE тип подписи XML кокумента
* @returns {Number}
* @throws {Error}
* @description выбирает значение константы для типа подписи XML документа
*/
const doXmlSitnatureType = function doXmlSitnatureType(CADESCOM_XML_SIGNATURE_TYPE) {
switch (CADESCOM_XML_SIGNATURE_TYPE) {
case 0:
// Вложенная подпись
return CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED;
case 1:
// Оборачивающая подпись
return CADESCOM_XML_SIGNATURE_TYPE_ENVELOPING;
/**
* @todo тип подписи CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE на данном этапе не поддерживается
* @description при выдове данного пипа будет ошибка
*/
case 2:
// Подпись по шаблону
return CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE;
default:
throw new Error('Тип подписи не поддерживается');
}
}
/**
* @function doXmlSitnatureAlgorithm
* @param {String} value алгоритм сертификата
* @returns {Object}
* @throws {Error}
* @description определяет алгоритм подписания XML документа в зависимости от алгоритма сертификата
*/
const doXmlSitnatureAlgorithm = function doXmlSitnatureAlgorithm(value) {
switch (value) {
case '1.2.643.2.2.19':
// алгоритм ГОСТ Р 34.10-2001
return template(XmlDsigGost3410Url)(XmlDsigGost3411Url);
case '1.2.643.7.1.1.1.1':
// алгоритм ГОСТ Р 34.10-2012 256 бит
return template(XmlDsigGost2012Url256)(XmlDsigGost2012Url256Digest);
case '1.2.643.7.1.1.1.2':
// алгоритм ГОСТ Р 34.10-2012 512 бит
return template(XmlDsigGost2012Url512)(XmlDsigGost2012Url512Digest);
default:
throw new Error('Сертификат не соответствует ГОСТ Р 34.10-2012 (256 или 512 бит) или ГОСТ Р 34.10-2001');
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// NOTE Exports
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
export {
doXmlSitnatureType,
doXmlSitnatureAlgorithm,
}