Digitally Sign and Verify PDF Documents
Overview
Digitally sign PDF documents with a 'PKCS#12' keystore and verify their signatures. Signing produces a detached 'PKCS#7' / 'CMS' signature ('adbe.pkcs7.detached') over the document and is applied as an incremental update, so existing signatures remain valid. The cryptography and PDF manipulation are performed by a bundled, pure-'Rust' backend (the 'pdf_signer' crate); no Java runtime, 'OpenSSL', or external command-line tools are required. Visible signature appearances with custom text are supported.
- Synced the pure-Rust backend to
pdf_signerengine v0.3.2, which closes a multi-agent security review. Verification now judges the **whole document**:verify_pdf_signature()returns the attributesdocument_intact,all_validandall_trusted; a PDF whose content was changed by an unsigned incremental update after signing is no longer reported as valid overall (each signature still reportsvalidover its own byte range). Document timestamps get their ownchain_trusted; timestamp authorities must carry the RFC 3161id-kp-timeStampingpurpose before their time is trusted; revocation dated at or before the signing time is honoured even from later CRL/OCSP evidence; certificate extensions are processed per RFC 5280 §6.1.3. - New per-signature fields
is_timestampandtrusted_time. - Signing:
reason,name,locationandcontact_infowith non-ASCII text (e.g. "Aprovação") are now written as UTF-16 text strings and render correctly in every viewer; the previous trailer's/Info(Title, Author) is preserved; a second B-LT/B-LTA signature merges into the existing/DSS; the claimed signing time is written to/Mby default. Encrypted PDFs (even with an empty user password) and documents certified with DocMDPP=1are refused with a clear error instead of producing a corrupted file.
Show all changes in 0.3.0Hide the rest of the changes in 0.3.0
- Build: the vendored Rust dependency set now resolves for **rustc 1.81** (September 2024), in line with CRAN's two-year toolchain policy.
pdf_signerdeclaresrust-version = 1.81and depends onp12-keystore0.1.5 (0.2.x is edition 2024 / rustc 1.85+, and 0.2.1 needs rustc 1.88 — the cause of the 0.2.5 installation failure on CRAN's check machine);timeis 0.3.44,ureq3.2.1,getrandom0.3.1 (its later WebAssembly-only dependencies are 2024 edition, and cargo 1.81 refuses to parse any vendored 2024-edition manifest even for targets it never builds). The lockfile is resolved with cargo's MSRV-aware resolver (CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS=fallback) before vendoring, and the built tarball is installed offline with rustc 1.81.0 as part of the release checks.
From NEWS.md in the release
Install
Health
- OK13 OKNow
- OK7 OK2026-06-22
Documentation
- Help pages
- 3 (1 internal)includes a package overview page
- Examples that run
- 0%2 never run
- Exported functions with examples
- 100%
- Documented parameters
- 85%
- Return-value docs
- 100%
- Help pages citing references
- 0%
Downloads
Repository
- PRs merged (all time)
- 100%
- Median days to close, 50 most recently updated closed issues
- not measured
- Median days to close, 50 most recently updated closed PRs
- 0
Stars over time
Releases over time
Commits over time
7 development-tooling and community-health practices detected across 4 families in the upstream repository
Checks run against github.com/strategicprojects/pdfsigner on 2026-10-21.
GitHub Pages site last deployed 2026-09-30 · The repository has a site deploy workflow
This repository shows signs of AI coding tools.
- Claude Codefirst seen 2026-06-14Named in .Rbuildignore: .claude, CLAUDE.mdNamed in .gitignore: CLAUDE.mdCommits: at least 33 crediting it in the message
- Claude CodePull requests: 2 from outside contributors, first on 2026-06-16
- Claude Opus 4.823 commits · Jun to Jul 2026
- Claude Fable 5.14 commits · Sep 2026
- Claude Opus 5.54 commits · Sep 2026
- Claude Sonnet 52 commits · Jul 2026
Dependencies
Installing pdfsigner adds no packages beyond those that come with R.
Code & Tests
People & History
Package metadata
- First published
- 2026-06-21
- Total releases
- 4 / 1 yrs
- License
- GPL-3 OSI
- Copyright
- The pdfsigner package and its bundled 'pdf_signer' Rust backend are released under GPL-3. The build vendors the source of third-party Rust crates (src/rust/vendor.tar.xz) that remain under the copyright of their respective authors and are licensed under permissive terms (MIT, Apache-2.0, BSD, ISC, Zlib, Unicode-3.0, 0BSD, Unlicense or CDLA-Permissive-2.0); see the inst/AUTHORS file for the full list.
- Minimum R
- ≥ 4.2
- Download size
- 18 MB
Cite
Cite this package
Run in R for the authors' preferred citation:
citation("pdfsigner")This package has no citation file, so citation() returns this entry built from DESCRIPTION.
Cite the R Observatory
For a number measured here: a download total, a coverage figure, an archival date.
From data release v2026-10-23, which the citation names so these numbers can be found later. More on citing and the projects behind them.