attenu-guard-java 0.1.0 - Java implementation of the Agent Delegation
Chain offline verification algorithm (draft-asor-wimse-agent-delegation-chain).

Provenance
  A Java implementation of the draft's verification algorithm, by a party other
  than the draft's author. It was aligned to and differentially tested against
  the reference implementation attenu-io/attenu-guard rather than written from
  the draft alone, so it is a port in the operative sense. It also comes from
  the same party that produced the vectors in vectors/, so its agreement with
  those vectors is not independent evidence for them.
  Upstream baseline: attenu-guard e2fd094 (v0.19.1).
  Licence: Apache-2.0. LICENSE and NOTICE are upstream's own and are included.

What it does
  Offline verification steps 1-5 of the draft: JWS signature, par_hash byte
  commitment, depth bounds, authority subsumption, and time. Steps 6-8
  (holder binding, status list, actual-action authorization) are out of scope.
  Zero runtime dependencies: the library compiles against the JDK alone.

How this file is laid out
  Paths below are relative to the root of attenu-guard-java-0.1.0-src.zip. On
  the download page the same text is java/README.txt and the vectors sit one
  level up, in ../vectors/. Score.java and verify-corpus.sh are published there
  as readable copies only: both need the sources, so run them from the unzipped
  source package.

Verify against the reference corpus - one command, no silent skip
  unzip attenu-guard-java-0.1.0-src.zip && cd attenu-guard-java-0.1.0
  ./tools/verify-corpus.sh

  That builds with the JDK only, scores the vectors in this package, clones the
  reference implementation at the pinned baseline
  (attenu-guard e2fd09466f12e3dd66eba8219ef059687e023e39), scores its corpus,
  and - if Maven is installed - runs its JUnit suite with the corpus included.
    --corpus PATH     use a checkout you already have, no clone
    --no-maven        JDK only; skip the JUnit suite
    --ref REF         a different revision
    ATTENU_GUARD_URL  clone from a mirror or a local path instead of GitHub

Score the vectors in this package by hand - JDK only, no network, no Maven
  javac -d out $(find src/main/java -name '*.java')
  javac -cp out -d out tools/Score.java
  java -cp out Score vectors

Maven
  mvn -B test
      Library unit tests only. The corpus test SKIPS unless the reference
      corpus is present at ../tests/vectors, which it is not in this package.
      A green run here does NOT mean the vectors were scored: Maven reports it
      as skipped, not failed.
  mvn -B test -Dattenu.vectors=/path/to/attenu-guard/tests/vectors
      Runs the corpus test against the full upstream corpus.
  mvn -B package
      Builds target/attenu-guard-java-0.1.0.jar. No binary is published with
      this package: build your own so what you run is what you built. (Maven
      embeds timestamps, so two builds of the same sources are not
      byte-identical.)

  Do NOT point -Dattenu.vectors at the vectors/ directory in this package.
  That test asserts the corpus covers every rejection reason, and these three
  vectors are a subset, so it fails by design. Score them with the JDK-only
  path above.

Measured at packaging time
  upstream corpus attenu-guard/tests/vectors @ e2fd094 .......... 20/20
  the three vectors in vectors/ .................................... 3/3
  57 tests green against the full corpus, including the check that the corpus
  is not trivially green. Both paths were exercised offline.

Scope
  A green run is evidence of conformance to a frozen corpus. It is not a
  completeness theorem, not a production-security statement, and not a
  certification.
