@@ -1099,6 +1099,49 @@ class PDFDocument {
1099
1099
} ) ;
1100
1100
}
1101
1101
1102
+ #collectSignatureCertificates(
1103
+ fields ,
1104
+ collectedSignatureCertificates ,
1105
+ visited = new RefSet ( )
1106
+ ) {
1107
+ if ( ! Array . isArray ( fields ) ) {
1108
+ return ;
1109
+ }
1110
+ for ( let field of fields ) {
1111
+ if ( field instanceof Ref ) {
1112
+ if ( visited . has ( field ) ) {
1113
+ continue ;
1114
+ }
1115
+ visited . put ( field ) ;
1116
+ }
1117
+ field = this . xref . fetchIfRef ( field ) ;
1118
+ if ( ! ( field instanceof Dict ) ) {
1119
+ continue ;
1120
+ }
1121
+ if ( field . has ( "Kids" ) ) {
1122
+ this . #collectSignatureCertificates(
1123
+ field . get ( "Kids" ) ,
1124
+ collectedSignatureCertificates ,
1125
+ visited
1126
+ ) ;
1127
+ continue ;
1128
+ }
1129
+ const isSignature = isName ( field . get ( "FT" ) , "Sig" ) ;
1130
+ if ( ! isSignature ) {
1131
+ continue ;
1132
+ }
1133
+ const value = field . get ( "V" ) ;
1134
+ if ( ! ( value instanceof Dict ) ) {
1135
+ continue ;
1136
+ }
1137
+ const subFilter = value . get ( "SubFilter" ) ;
1138
+ if ( ! ( subFilter instanceof Name ) ) {
1139
+ continue ;
1140
+ }
1141
+ collectedSignatureCertificates . add ( subFilter . name ) ;
1142
+ }
1143
+ }
1144
+
1102
1145
get _xfaStreams ( ) {
1103
1146
const { acroForm } = this . catalog ;
1104
1147
if ( ! acroForm ) {
@@ -1414,6 +1457,20 @@ class PDFDocument {
1414
1457
// specification).
1415
1458
const sigFlags = acroForm . get ( "SigFlags" ) ;
1416
1459
const hasSignatures = ! ! ( sigFlags & 0x1 ) ;
1460
+ if ( typeof PDFJSDev !== "undefined" && PDFJSDev . test ( "MOZCENTRAL" ) ) {
1461
+ if ( hasSignatures ) {
1462
+ const collectedSignatureCertificates = new Set ( ) ;
1463
+ this . #collectSignatureCertificates(
1464
+ fields ,
1465
+ collectedSignatureCertificates
1466
+ ) ;
1467
+ if ( collectedSignatureCertificates . size > 0 ) {
1468
+ formInfo . collectedSignatureCertificates = Array . from (
1469
+ collectedSignatureCertificates
1470
+ ) ;
1471
+ }
1472
+ }
1473
+ }
1417
1474
const hasOnlyDocumentSignatures =
1418
1475
hasSignatures && this . #hasOnlyDocumentSignatures( fields ) ;
1419
1476
formInfo . hasAcroForm = hasFields && ! hasOnlyDocumentSignatures ;
@@ -1441,6 +1498,11 @@ class PDFDocument {
1441
1498
IsSignaturesPresent : formInfo . hasSignatures ,
1442
1499
} ;
1443
1500
1501
+ if ( typeof PDFJSDev !== "undefined" && PDFJSDev . test ( "MOZCENTRAL" ) ) {
1502
+ docInfo . collectedSignatureCertificates =
1503
+ formInfo . collectedSignatureCertificates ?? null ;
1504
+ }
1505
+
1444
1506
let infoDict ;
1445
1507
try {
1446
1508
infoDict = xref . trailer . get ( "Info" ) ;
0 commit comments