pub struct PdfSignature {
pub byte_range: [i64; 4],
pub contents: Vec<u8>,
pub sub_filter: Option<String>,
pub filter: Option<String>,
pub sig_type: Option<String>,
pub name: Option<String>,
pub reason: Option<String>,
pub location: Option<String>,
pub contact_info: Option<String>,
pub signing_time: Option<String>,
pub signed_data: Option<SignedData>,
pub contents_offset: Option<u64>,
}Expand description
One PDF /Sig form field’s signature dictionary, fully parsed and
ready to verify.
Fields§
§byte_range: [i64; 4]/ByteRange [a b c d] — exactly four signed integers per
ISO 32000-1 §12.8.1. The signed bytes are
pdf[a..a+b] ‖ pdf[c..c+d]. Stored as i64 (the spec says
“integer”, and Adobe-encoded files routinely overflow u32 for
large PDFs — keeping i64 matches the on-wire shape).
contents: Vec<u8>/Contents hex-decoded — the raw CMS SignedData ContentInfo
blob (DER) for adbe.pkcs7.detached / ETSI.CAdES.detached, or
the raw RFC 3161 TimeStampToken for ETSI.RFC3161.
sub_filter: Option<String>/SubFilter name — adbe.pkcs7.detached, adbe.pkcs7.sha1,
ETSI.CAdES.detached, ETSI.RFC3161, or any other handler-
specific name. None only when the dict omits it (extremely
non-conformant; we still surface the rest of the dict).
filter: Option<String>/Filter name — typically Adobe.PPKLite or Adobe.PPKMS.
None when the dict omits it.
sig_type: Option<String>/Type name — Sig (default), DocTimeStamp, or absent.
name: Option<String>Optional /Name — the human-readable signer name embedded by
the signing application (PDF text string).
reason: Option<String>Optional /Reason.
location: Option<String>Optional /Location.
contact_info: Option<String>Optional /ContactInfo.
signing_time: Option<String>Optional /M — signing-time, PDF date format D:YYYYMMDDHHmmSS.
signed_data: Option<SignedData>CMS SignedData parsed from Self::contents. Surfaced as
Some only when Self::sub_filter is one of the SubFilters
whose /Contents is a CMS ContentInfo blob — the round-21
reader does not parse RFC 3161 TimeStampTokens (those carry a
nested CMS as well, but the outer wrapper is different and the
signed message is the digest in MessageImprint, not the
/ByteRange body).
contents_offset: Option<u64>The byte offset (in the original PDF) at which the signature
dictionary’s /Contents <…> hex literal starts. Useful for
diagnostics and for round-trip rewriting (replace the placeholder
hex with a real signature, leaving everything else byte-stable).
Stored as u64 so it can address arbitrarily large PDFs.
Implementations§
Source§impl PdfSignature
impl PdfSignature
Sourcepub fn signed_message(&self, pdf: &[u8]) -> Result<Vec<u8>, PdfError>
pub fn signed_message(&self, pdf: &[u8]) -> Result<Vec<u8>, PdfError>
Compute the bytes the /ByteRange entry says were signed:
pdf[a..a+b] ‖ pdf[c..c+d]. Returns an error when any range
falls outside the input or when the byte-range integers are
negative.
Sourcepub fn is_cms_detached(&self) -> bool
pub fn is_cms_detached(&self) -> bool
true when this signature’s /SubFilter names one of the CMS-
based detached forms whose /Contents is a complete CMS
ContentInfo blob. The verifier dispatch in
crate::pubsec::verify::verify_signature applies to these.
Sourcepub fn is_doc_timestamp(&self) -> bool
pub fn is_doc_timestamp(&self) -> bool
true when this entry is a document time-stamp signature per
ISO 32000-1 §12.8.5 — i.e. the dict’s /Type is DocTimeStamp
or its /SubFilter is ETSI.RFC3161. Either marker
independently identifies a DocTimeStamp (the spec allows both
/Type /DocTimeStamp and /SubFilter /ETSI.RFC3161 —
real-world files frequently set both, but only one is required).
Trait Implementations§
Source§impl Clone for PdfSignature
impl Clone for PdfSignature
Source§fn clone(&self) -> PdfSignature
fn clone(&self) -> PdfSignature
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more