Skip to main content

Crate structured_ltv

Crate structured_ltv 

Source
Expand description

Format-neutral long-term signature validation facts.

EN 319 102-1 defines path validation at a time, revocation material bound to path members, timestamp generation intervals and the coverage of validation material by archive timestamps once for every AdES format. This crate implements those facts over structured-pkix and structured-cms processors and the caller’s source::Query; XAdES, CAdES and PAdES layers say only where the material and timestamps were written. No XML or PDF type crosses it, and no fact is a trust verdict.

  • source: the document owner’s identities and the current query.
  • timestamp: retained token checks, generation intervals, signature-time association and the complete token obligations of one scope.
  • pki: actor paths, status binding, the authority closure and the participant census derived from the format’s receipts.
  • material: incorporated artifacts, their uses and archive coverage.
  • baseline: compositions over the format’s stage reports.

§Issuers

The receipts a format asserts from its own checks (a checked timestamp, its signer, an archive input’s coverage, the token census, the material index, the participant census) carry an issuer type I, and constructing one takes a value of I. A format defines its issuer as a type only it can construct, so a caller of the format cannot relabel evidence or supply a fabricated receipt to the format’s own APIs. Facts derived from receipts keep their issuer, and receipts of different issuers do not combine:

struct Cades;
fn bind<Q: Query<Id = usize, Document = u8, Generation = u8>>(
    coverage: &Coverage<usize, u8, u8, Memory, Cades>,
    evidence: &Verified<usize, u8, u8, Cades>,
    query: &Q,
) {
    let _ = coverage.covers(evidence, 0, query);
}
ⓘ
struct Cades;
struct Pades;
fn bind<Q: Query<Id = usize, Document = u8, Generation = u8>>(
    coverage: &Coverage<usize, u8, u8, Memory, Cades>,
    evidence: &Verified<usize, u8, u8, Pades>,
    query: &Q,
) {
    let _ = coverage.covers(evidence, 0, query);
}

§Examples

A document owner implements source::Source over its own identities; the source::Scope of one operation then funds every check and refuses a rewritten document.

use core::cell::Cell;
use std::sync::Arc;
use structured_asn1::memory::{Memory, MemoryAccount};
use structured_ltv::material::Coverage;
use structured_ltv::source::{Query, Scope, ScopeError, Snapshot, Source};
use structured_ltv::timestamp::Purpose;

// A CMS signature whose unsigned attributes are identified by ordinal.
struct SignerInfo {
    generation: Cell<u8>,
}
impl Source for SignerInfo {
    type Id = usize;
    type Document = u8;
    type Generation = u8;
    fn snapshot(&self) -> Snapshot<u8, u8> {
        Snapshot { document: 1, generation: self.generation.get() }
    }
}
// The format's issuer: its private field keeps other crates from creating one.
#[derive(Clone, Copy)]
pub struct Cades(());

let source = SignerInfo { generation: Cell::new(1) };
let memory = Memory::new(Arc::new(MemoryAccount::new(4096, 10_000)));
let query = Scope::new(&source, source.snapshot(), &memory);
// Attribute 3 lies in archive attribute 5's input; attribute 7 does not.
let mut items = memory.map();
items.try_insert(3, true).unwrap();
let coverage = Coverage::new(Cades(()), source.snapshot(), 0, 5, Purpose::Archive, items);
assert_eq!(coverage.selects(3, &query), Ok(true));
assert_eq!(coverage.selects(7, &query), Ok(false));
source.generation.set(2);
assert_eq!(query.admit(3, 1), Err(ScopeError::Changed { node: 3 }));

Modules§

baseline
Composition of source-bound long-term facts over a format’s stage reports.
credential
Format-owner authentication of an original protected credential.
material
Exact incorporated validation material and its coverage by archive inputs.
pki
Original certificate-path facts for validation-material accounting.
source
Original source identity shared by every long-term validation fact.
timestamp
Retained mathematical timestamp evidence with its original source identity.