cadesjs
Version:
CAdESjs gives you an ability to make CAdES signatures on pure JavaScript. The libray made with latest CAdES standards in mind
143 lines (129 loc) • 4.17 kB
JavaScript
import { Attribute } from "pkijs";
import CompleteRevocationRefs from "./CompleteRevocationRefs.js";
import CrlValidatedID from "./CrlValidatedID.js";
import OcspResponsesID from "./OcspResponsesID.js";
import CrlOcspRef from "./CrlOcspRef.js";
import CRLListID from "./CRLListID.js";
import OcspListID from "./OcspListID.js";
//**************************************************************************************
// noinspection JSUnusedGlobalSymbols
export default class CompleteRevocationReferences extends CompleteRevocationRefs
{
//**********************************************************************************
/**
* Constructor for CompleteRevocationReferences class
* @param {Object} [parameters={}]
* @property {Object} [schema] asn1js parsed value
*/
constructor(parameters = {})
{
super(parameters);
}
//**********************************************************************************
/**
* Creates "complete-revocation-references" for given CMS Signed Data and signer index
* @param {SignedData} cmsSigned CMS Signed Data to make attribute for
* @param {number} signerIndex Index of signer to make attribute for
* @param {Object} parameters Additional parameters for making attribute
* @returns {Promise}
*/
fillValues(cmsSigned, signerIndex, parameters)
{
//region Initial variables
const _this = this;
let sequence = Promise.resolve();
let hashAlgorithm = "SHA-1";
let ocspResponses = []; // Array of OCSP Responses
const crlRefs = []; // CrlValidatedID;
const ocspRefs = []; // OcspResponsesID
//endregion
//region Check input parameters
if("hashAlgorithm" in parameters)
hashAlgorithm = parameters.hashAlgorithm;
if("ocspResponses" in parameters)
ocspResponses = parameters.ocspResponses;
//endregion
//region Append references for all CRLs
if("crls" in cmsSigned)
{
sequence = sequence.then(
() => {
const promises = [];
for(let i = 0; i < cmsSigned.crls.length; i++)
{
crlRefs.push(new CrlValidatedID());
promises.push(crlRefs[crlRefs.length - 1].fillValues({
hashAlgorithm,
crl: cmsSigned.crls[i]
}));
}
return Promise.all(promises);
},
error => Promise.reject(error)
);
}
//endregion
//region Append references for all OCSPs
if(ocspResponses.length)
{
sequence = sequence.then(
() => {
const promises = [];
for(let i = 0; i < ocspResponses.length; i++)
{
ocspRefs.push(new OcspResponsesID());
promises.push(ocspRefs[ocspRefs.length - 1].fillValues({
hashAlgorithm,
ocspResponse: ocspResponses[i]
}));
}
return Promise.all(promises);
},
error => Promise.reject(error)
);
}
//endregion
//region Push all values "in place"
return sequence.then(
() => {
if(crlRefs.length || ocspRefs.length)
{
_this.completeRevocationRefs.push(new CrlOcspRef());
if(crlRefs.length)
{
_this.completeRevocationRefs[_this.completeRevocationRefs.length - 1].crlids = new CRLListID({
crls: crlRefs
});
}
if(ocspRefs.length)
{
_this.completeRevocationRefs[_this.completeRevocationRefs.length - 1].ocspids = new OcspListID({
ocspResponses: ocspRefs
});
}
}
},
error => Promise.reject(error)
);
//endregion
}
//**********************************************************************************
/**
* Create "complete-revocation-references" CAdES attribute
* @param {Object} [parameters] Additional parameters for making attribute
* @returns {Attribute}
*/
makeAttribute(parameters = {})
{
//region Create and return attribute
return new Attribute({
type: "1.2.840.113549.1.9.16.2.22",
values: [
this.toSchema()
]
});
//endregion
}
//**********************************************************************************
}
//**************************************************************************************