|
@@ -189,9 +189,9 @@ class CPDFWorker {
|
|
|
})
|
|
|
|
|
|
messageHandler.on('GetRenderAnnot', (data) => {
|
|
|
- const { annotPtr, annotation, scale } = data
|
|
|
- const width = parseInt(annotation.rect.right * scale - annotation.rect.left * scale + 1)
|
|
|
- const height = parseInt(annotation.rect.bottom * scale - annotation.rect.top * scale + 1)
|
|
|
+ const { annotPtr, rect, scale } = data
|
|
|
+ const width = parseInt(rect.right * scale - rect.left * scale + 1)
|
|
|
+ const height = parseInt(rect.bottom * scale - rect.top * scale + 1)
|
|
|
let pixelNum = width * height
|
|
|
|
|
|
let imageBytes = pixelNum * 4
|
|
@@ -214,13 +214,14 @@ class CPDFWorker {
|
|
|
})
|
|
|
|
|
|
messageHandler.on('GetWidgetAnnotation', (data) => {
|
|
|
- const { doc, pagePtr, annotPtr, typeInt } = data
|
|
|
+ const { doc, pagePtr, annotPtr, typeInt, signaturePtrList } = data
|
|
|
|
|
|
return getWidgetAnnotation({
|
|
|
doc,
|
|
|
pagePtr,
|
|
|
annotPtr,
|
|
|
- typeInt
|
|
|
+ typeInt,
|
|
|
+ signaturePtrList
|
|
|
})
|
|
|
})
|
|
|
|
|
@@ -2180,7 +2181,8 @@ function getWidgetAnnotation({
|
|
|
doc,
|
|
|
pagePtr,
|
|
|
annotPtr,
|
|
|
- typeInt
|
|
|
+ typeInt,
|
|
|
+ signaturePtrList
|
|
|
}) {
|
|
|
// WidgetType
|
|
|
let annotationAttr = null
|
|
@@ -2391,19 +2393,30 @@ function getWidgetAnnotation({
|
|
|
annotation.color = hex
|
|
|
}
|
|
|
|
|
|
+ if (type === 6) {
|
|
|
+ for (let i = 0; i < signaturePtrList.length; i++) {
|
|
|
+ const signaturePtr = signaturePtrList[i]
|
|
|
+ const res = Module._IsSameAnnotDict(signaturePtr, annotPtr)
|
|
|
+ if (res) annotation.digitalSignaturePtr = signaturePtr
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
return annotation
|
|
|
}
|
|
|
|
|
|
async function getSignatures({
|
|
|
doc,
|
|
|
}) {
|
|
|
- const signatureList = []
|
|
|
+ const signatures = []
|
|
|
+ const signaturePtrList = []
|
|
|
const count = Module._GetSignatureCount(doc)
|
|
|
|
|
|
for (let i = 0; i < count; i++) {
|
|
|
// 获取签名指针
|
|
|
const signaturePtr = Module._InitSignature(doc, i)
|
|
|
if (signaturePtr) {
|
|
|
+ signaturePtrList.push(signaturePtr)
|
|
|
const signerList = []
|
|
|
const signature = {
|
|
|
signaturePtr,
|
|
@@ -2428,57 +2441,6 @@ async function getSignatures({
|
|
|
|
|
|
const certPtr = Module._GetSignCert(signerPtr)
|
|
|
if (certPtr) {
|
|
|
- signer.version = Module._GetSignVersion(certPtr)
|
|
|
- Module._GetSignAlgOid(certPtr)
|
|
|
- signer.signAlgOid = U8StringData
|
|
|
- signer.signAlgOidType = getSignatureAlgorithmType(signer.signAlgOid)
|
|
|
- signer.subject = []
|
|
|
- for (let i = 0; i < 7; i++) {
|
|
|
- Module._GetSignSubject(certPtr, i)
|
|
|
- signer.subject.push(U8StringData)
|
|
|
- }
|
|
|
- signer.issuer = []
|
|
|
- for (let i = 0; i < 7; i++) {
|
|
|
- Module._GetSignIssuer(certPtr, i)
|
|
|
- signer.issuer.push(U8StringData)
|
|
|
- }
|
|
|
- Module._GetSignSerialNumber(certPtr)
|
|
|
- signer.serialNumber = U8StringData
|
|
|
- Module._GetSignValidDate(certPtr, 0)
|
|
|
- signer.validDateStart = U8StringData
|
|
|
- Module._GetSignValidDate(certPtr, 1)
|
|
|
- signer.validDateEnd = U8StringData
|
|
|
-
|
|
|
- AccessInfoArray = []
|
|
|
- Module._GetAuthorityInfoAccess(certPtr)
|
|
|
- signer.sccessInfo = AccessInfoArray
|
|
|
- Module._GetSubjectKeyIdentifier(certPtr)
|
|
|
- signer.subjectKeyIdentifier = U8StringData
|
|
|
- signer.keyUsage = Module._GetKeyUsage(certPtr)
|
|
|
- PolicyArray = []
|
|
|
- Module._GetCertificatePolicies(certPtr)
|
|
|
- signer.certificatePolicies = PolicyArray
|
|
|
- Module._GetAuthorityKeyIdentifier(certPtr)
|
|
|
- signer.authorityKeyIdentifier = U8StringData
|
|
|
- CRLPointArray = []
|
|
|
- Module._GetCRLDistributionPoints(certPtr)
|
|
|
- signer.CRLDistributionPoints = CRLPointArray
|
|
|
-
|
|
|
- Module._GetBasicConstraints(certPtr)
|
|
|
- signer.basicConstraints = U8StringData
|
|
|
- Module._GetPublicKey(certPtr)
|
|
|
- signer.publicKey = U8StringData
|
|
|
- Module._GetX509Data(certPtr)
|
|
|
- signer.X509Data = U8StringData
|
|
|
- Module._GetSHA1Digest(certPtr)
|
|
|
- signer.SHA1Digest = U8StringData
|
|
|
- Module._GetMD5Digest(certPtr)
|
|
|
- signer.MD5Digest = U8StringData
|
|
|
-
|
|
|
- OCSPUrlArray = []
|
|
|
- Module._GetOCSPUrl(certPtr)
|
|
|
- signer.ocspURL = OCSPUrlArray
|
|
|
-
|
|
|
// TODO: 验证证书
|
|
|
CertArray = []
|
|
|
Module._ExportToFilePath(certPtr, 1)
|
|
@@ -2504,15 +2466,17 @@ async function getSignatures({
|
|
|
}
|
|
|
CertArray = []
|
|
|
Module._GetSignCertChain(certPtr)
|
|
|
+ CertArray.push(certPtr)
|
|
|
|
|
|
for (let k = 0; k < CertArray.length; k++) {
|
|
|
const certPtr = CertArray[k]
|
|
|
+ const certData = await getSignCertData(certPtr)
|
|
|
+
|
|
|
const certificate = {
|
|
|
- certPtr
|
|
|
+ certPtr,
|
|
|
+ ...certData
|
|
|
}
|
|
|
|
|
|
- // TODO: 获取证书信息
|
|
|
-
|
|
|
certificateList.push(certificate)
|
|
|
}
|
|
|
}
|
|
@@ -2533,31 +2497,33 @@ async function getSignatures({
|
|
|
}
|
|
|
|
|
|
// 获取签名信息
|
|
|
- Rect = {}
|
|
|
- Module._GetSignatureRect(doc, signaturePtr)
|
|
|
- signature.rect = {
|
|
|
- left: roundToDecimalPlaces(Rect.Left),
|
|
|
- top: roundToDecimalPlaces(Rect.Top),
|
|
|
- right: roundToDecimalPlaces(Rect.Right),
|
|
|
- bottom: roundToDecimalPlaces(Rect.Bottom)
|
|
|
- }
|
|
|
- Module._GetSignatureFieldName(signaturePtr)
|
|
|
- signature.fieldName = U8StringData
|
|
|
- Module._GetSignatureName(signaturePtr)
|
|
|
- signature.name = U8StringData
|
|
|
- Module._GetSignatureTime(signaturePtr)
|
|
|
- const rawDate = U8StringData
|
|
|
- signature.date = parseAdobePDFTimestamp(rawDate)
|
|
|
- Module._GetSignatureReason(signaturePtr)
|
|
|
- signature.reason = U8StringData
|
|
|
- Module._GetSignatureLocation(signaturePtr)
|
|
|
- signature.location = U8StringData
|
|
|
- signature.pageIndex = Module._GetSignaturePageIndex(signaturePtr)
|
|
|
-
|
|
|
- signatureList.push(signature)
|
|
|
+ if (SignerArray.length) {
|
|
|
+ Rect = {}
|
|
|
+ Module._GetSignatureRect(doc, signaturePtr)
|
|
|
+ signature.rect = {
|
|
|
+ left: roundToDecimalPlaces(Rect.Left),
|
|
|
+ top: roundToDecimalPlaces(Rect.Top),
|
|
|
+ right: roundToDecimalPlaces(Rect.Right),
|
|
|
+ bottom: roundToDecimalPlaces(Rect.Bottom)
|
|
|
+ }
|
|
|
+ Module._GetSignatureFieldName(signaturePtr)
|
|
|
+ signature.fieldName = U8StringData
|
|
|
+ Module._GetSignatureName(signaturePtr)
|
|
|
+ signature.name = U8StringData
|
|
|
+ Module._GetSignatureTime(signaturePtr)
|
|
|
+ const rawDate = U8StringData
|
|
|
+ signature.date = parseAdobePDFTimestamp(rawDate)
|
|
|
+ Module._GetSignatureReason(signaturePtr)
|
|
|
+ signature.reason = U8StringData
|
|
|
+ Module._GetSignatureLocation(signaturePtr)
|
|
|
+ signature.location = U8StringData
|
|
|
+ signature.pageIndex = Module._GetSignaturePageIndex(signaturePtr)
|
|
|
+ }
|
|
|
+
|
|
|
+ signatures.push(signature)
|
|
|
}
|
|
|
}
|
|
|
- return signatureList
|
|
|
+ return { signatures, signaturePtrList }
|
|
|
}
|
|
|
|
|
|
async function copyDocument(doc, password) {
|
|
@@ -3121,3 +3087,79 @@ function getSignatureAlgorithmType(signAlgOid) {
|
|
|
return 'RSA_RSA';
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+async function getSignCertData(certPtr) {
|
|
|
+ const version = Module._GetSignVersion(certPtr)
|
|
|
+ Module._GetSignAlgOid(certPtr)
|
|
|
+ const signAlgOid = U8StringData
|
|
|
+ const signAlgOidType = getSignatureAlgorithmType(signAlgOid)
|
|
|
+ const subject = []
|
|
|
+ for (let i = 0; i < 7; i++) {
|
|
|
+ Module._GetSignSubject(certPtr, i)
|
|
|
+ subject.push(U8StringData)
|
|
|
+ }
|
|
|
+ const issuer = []
|
|
|
+ for (let i = 0; i < 7; i++) {
|
|
|
+ Module._GetSignIssuer(certPtr, i)
|
|
|
+ issuer.push(U8StringData)
|
|
|
+ }
|
|
|
+ Module._GetSignSerialNumber(certPtr)
|
|
|
+ const serialNumber = U8StringData
|
|
|
+ Module._GetSignValidDate(certPtr, 0)
|
|
|
+ const validDateStart = U8StringData
|
|
|
+ Module._GetSignValidDate(certPtr, 1)
|
|
|
+ const validDateEnd = U8StringData
|
|
|
+
|
|
|
+ AccessInfoArray = []
|
|
|
+ Module._GetAuthorityInfoAccess(certPtr)
|
|
|
+ const sccessInfo = AccessInfoArray
|
|
|
+ Module._GetSubjectKeyIdentifier(certPtr)
|
|
|
+ const subjectKeyIdentifier = U8StringData
|
|
|
+ const keyUsage = Module._GetKeyUsage(certPtr)
|
|
|
+ PolicyArray = []
|
|
|
+ Module._GetCertificatePolicies(certPtr)
|
|
|
+ const certificatePolicies = PolicyArray
|
|
|
+ Module._GetAuthorityKeyIdentifier(certPtr)
|
|
|
+ const authorityKeyIdentifier = U8StringData
|
|
|
+ CRLPointArray = []
|
|
|
+ Module._GetCRLDistributionPoints(certPtr)
|
|
|
+ const CRLDistributionPoints = CRLPointArray
|
|
|
+
|
|
|
+ Module._GetBasicConstraints(certPtr)
|
|
|
+ const basicConstraints = U8StringData
|
|
|
+ Module._GetPublicKey(certPtr)
|
|
|
+ const publicKey = U8StringData
|
|
|
+ Module._GetX509Data(certPtr)
|
|
|
+ const X509Data = U8StringData
|
|
|
+ Module._GetSHA1Digest(certPtr)
|
|
|
+ const SHA1Digest = U8StringData
|
|
|
+ Module._GetMD5Digest(certPtr)
|
|
|
+ const MD5Digest = U8StringData
|
|
|
+
|
|
|
+ OCSPUrlArray = []
|
|
|
+ Module._GetOCSPUrl(certPtr)
|
|
|
+ const ocspURL = OCSPUrlArray
|
|
|
+
|
|
|
+ return {
|
|
|
+ version,
|
|
|
+ signAlgOid,
|
|
|
+ signAlgOidType,
|
|
|
+ subject,
|
|
|
+ issuer,
|
|
|
+ serialNumber,
|
|
|
+ validDateStart,
|
|
|
+ validDateEnd,
|
|
|
+ sccessInfo,
|
|
|
+ subjectKeyIdentifier,
|
|
|
+ keyUsage,
|
|
|
+ certificatePolicies,
|
|
|
+ authorityKeyIdentifier,
|
|
|
+ CRLDistributionPoints,
|
|
|
+ basicConstraints,
|
|
|
+ publicKey,
|
|
|
+ X509Data,
|
|
|
+ SHA1Digest,
|
|
|
+ MD5Digest,
|
|
|
+ ocspURL
|
|
|
+ }
|
|
|
+}
|