Redaction irreversibility evidence

RedactProof (Popsall Ltd) · Test date: 25 July 2026 · Overall result: PASS

Method. Redacted PDFs were produced through RedactProof's real export pipeline (browser automation drives the actual application: upload, automatic detection, approval of every detection, export), capturing the exact redacted strings as recovery targets. Each exported file was then attacked with recovery engines that share no code with RedactProof's export pipeline or its inspection tooling:

Recovery engineOriginWhat it attempts
pdftotext (xpdf 4.06)Glyph & Cog, C++Text-layer extraction
pypdf 6.14.2Independent pure-Python parserText-layer extraction
PDFium (pypdfium2)Chromium's PDF engineText-layer extraction and page rendering
Raw byte searchNo PDF parser at allSearches the raw file bytes and every decompressed stream for UTF-8, UTF-16LE and hex-string encodings of the redacted text (catches stale or orphaned objects)
Structural inspectionpypdf object walkConfirms no form fields (AcroForm) survive, and that no annotation or document-metadata value (DocInfo/XMP) contains redacted content
OCR reconstructionPDFium render at 300 dpi + Tesseract OCRAttempts to read text back out of the burned pixels

Controls. To prove absence is meaningful (i.e. the export is not simply blank), extraction engines must recover the visible text layer where one is expected, and OCR must recover legible page text on every file. Both controls held on all fixtures.

Result: paid-tier export (OCR-restored text layer)

Source: bank account form sample · 4 redacted strings · SHA-256 e2ac2cf46a23df0f…

Note: this export is two pages - the redacted document plus the appended verification-certificate page (per the export settings used). The higher character counts below include the certificate page's own text; per document page, recovery results match the free-tier export. The single link annotation is the certificate's verification URL.

Recovery engineResultDetail
pdftotext (xpdf)PASS1,270 chars extracted; 0 redacted strings recovered
pypdfPASS1,270 chars extracted; 0 redacted strings recovered
PDFiumPASS1,270 chars extracted; 0 redacted strings recovered
Raw byte searchPASS0 redacted strings recovered
Structural inspectionPASSNo form fields; single link annotation (certificate URL); no redacted content in metadata
OCR reconstructionPASS1,302 chars OCRed; 0 redacted strings recovered

Result: free-tier export (flattened, no text layer)

Source: bank account form sample · 4 redacted strings · SHA-256 249e0cab966708b7…

Recovery engineResultDetail
pdftotext (xpdf)PASS31 chars extracted; 0 redacted strings recovered
pypdfPASS31 chars extracted; 0 redacted strings recovered
PDFiumPASS31 chars extracted; 0 redacted strings recovered
Raw byte searchPASS0 redacted strings recovered
Structural inspectionPASSNo form fields; single link annotation (certificate URL); no redacted content in metadata
OCR reconstructionPASS581 chars OCRed; 0 redacted strings recovered

Scope and limitations

This run covered the free-tier export path and the paid-tier export path with OCR-restored text layer, exporting from a text-layer PDF source. Reveal-mode and filled-form export paths are scheduled for future runs. Testing verifies that confirmed redactions are permanently applied to exported files; it does not certify that automated detection identifies every sensitive item (human review remains required) or that redaction decisions were legally correct.