Newer
Older
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getMessageFromSignature = exports.extractSignature = void 0;
const forge = __importStar(require("@vereign/node-forge"));
const errors_1 = require("./errors");
const generalUtils_1 = require("./generalUtils");
const timeUtils_1 = require("./timeUtils");
const getSignatureMeta = (signedData) => {
const str = Buffer.isBuffer(signedData) ? signedData.toString() : signedData;
const formattedSignDate = (0, timeUtils_1.formatPdfTime)((0, generalUtils_1.getMetaRegexMatch)("M")(str));
return {
reason: (0, generalUtils_1.getMetaRegexMatch)("Reason")(str),
contactInfo: (0, generalUtils_1.getMetaRegexMatch)("ContactInfo")(str),
location: (0, generalUtils_1.getMetaRegexMatch)("Location")(str),
signDate: formattedSignDate,
};
};
// const verifyCaBundle = (certs) =>
// !!certs.find((cert, i) => certs[i + 1] && certs[i + 1].issued(cert));
// const getRootCAs = () => rootCAs;
// const verifyRootCert = (chainRootInForgeFormat) =>
// !!getRootCAs().find((rootCAInPem) => {
// try {
// const rootCAInForgeCert = forge.pki.certificateFromPem(rootCAInPem);
// return (
// forge.pki.certificateToPem(chainRootInForgeFormat) === rootCAInPem ||
// rootCAInForgeCert.issued(chainRootInForgeFormat)
// );
// } catch (e) {
// return false;
// }
// });
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
const extractSignature = (pdf) => {
const pdfBuffer = (0, generalUtils_1.preparePDF)(pdf);
const { byteRanges } = (0, generalUtils_1.getByteRange)(pdfBuffer);
const signatureStr = [];
const signedData = [];
byteRanges.forEach((byteRange) => {
signedData.push(Buffer.concat([
pdfBuffer.slice(byteRange[0], byteRange[0] + byteRange[1]),
pdfBuffer.slice(byteRange[2], byteRange[2] + byteRange[3]),
]));
const signatureHex = pdfBuffer
.slice(byteRange[0] + byteRange[1] + 1, byteRange[2])
.toString("latin1");
signatureStr.push(Buffer.from(signatureHex, "hex").toString("latin1"));
});
const signatureMeta = signedData.map((sd) => getSignatureMeta(sd));
return {
byteRanges,
signatureStr,
signedData,
signatureMeta,
};
};
exports.extractSignature = extractSignature;
const getMessageFromSignature = (signature) => {
try {
const p7Asn1 = forge.asn1.fromDer(signature);
return forge.pkcs7.messageFromAsn1(p7Asn1);
}
catch (error) {
//no signature is found return empty object
if (error.message === "Too few bytes to parse DER.") {
return {};
}
throw new errors_1.AppError(error);
}
};
exports.getMessageFromSignature = getMessageFromSignature;
// export const authenticateSignature = (certs) =>
// verifyCaBundle(certs) && verifyRootCert(certs[certs.length - 1]);