extractSignatures method

Future<PdfSignatureExtractionReport> extractSignatures(
  1. Uint8List pdfBytes, {
  2. bool includeCertificates = true,
  3. bool includeSignatureFields = true,
  4. PdfSignaturePreparedContext? preparedContext,
})

Implementation

Future<PdfSignatureExtractionReport> extractSignatures(
  Uint8List pdfBytes, {
  bool includeCertificates = true,
  bool includeSignatureFields = true,
  PdfSignaturePreparedContext? preparedContext,
}) async {
  final context = _validator.prepareContext(
    pdfBytes,
    includeSignatureFields: includeSignatureFields,
    includeSignatureContents: true,
    baseContext: preparedContext,
  );
  final fieldByRange = context.fieldByRange;
  final ranges = context.ranges;
  final results = <PdfSignatureExtractionInfo>[];

  for (var i = 0; i < ranges.length; i++) {
    final range = ranges[i];
    final fieldInfo =
        includeSignatureFields ? fieldByRange[_byteRangeKey(range)] : null;

    final contents = context.signatureContentsAt(i) ??
        _extractContentsFromByteRange(pdfBytes, range);
    if (contents == null || contents.isEmpty) {
      results.add(PdfSignatureExtractionInfo(
        signatureIndex: i,
        signatureField: fieldInfo,
        contentsPresent: false,
        signingTime: fieldInfo?.signingTimeRaw != null
            ? _parsePdfDate(fieldInfo!.signingTimeRaw!)
            : null,
        signaturePolicyOid: null,
        signedAttrsOids: null,
        certificates: null,
        signerCertificate: null,
        message: 'Conteúdo de assinatura ausente ou inválido.',
      ));
      continue;
    }

    final signingTime = _extractSigningTimeFromCms(contents) ??
        (fieldInfo?.signingTimeRaw != null
            ? _parsePdfDate(fieldInfo!.signingTimeRaw!)
            : null);
    final signaturePolicyOid = _extractSignaturePolicyOid(contents);
    final signedAttrsOids = _extractSignedAttrsOids(contents);

    final certInfos =
        includeCertificates ? _extractCertificatesInfo(contents) : null;
    final signerCertInfo =
        includeCertificates ? _extractSignerCertificateInfo(contents) : null;

    results.add(PdfSignatureExtractionInfo(
      signatureIndex: i,
      signatureField: fieldInfo,
      contentsPresent: true,
      signingTime: signingTime,
      signaturePolicyOid: signaturePolicyOid,
      signedAttrsOids: signedAttrsOids,
      certificates: certInfos,
      signerCertificate: signerCertInfo,
      message: null,
    ));
  }

  return PdfSignatureExtractionReport(signatures: results);
}