SDK contract
TrustPlane Auth SDKs are caller-side signing helpers. They help a caller build request material,
hash the body, canonicalize transcript-v1, sign that transcript, and return headers that a
TrustPlane Auth verifier can check.
They are not verifiers, policy engines, enrollment systems, brokers, Control API clients, or gateway plugins. Verification, route policy, replay protection, bundle freshness, enrollment, governance, and gateway integration remain separate responsibilities.
Core rule
An SDK signs exactly what the verifier independently rebuilds.
That means the SDK must use the same transcript-v1 canonicalization contract as conformance
vectors and adapters. The verifier does not trust caller-provided transcript fields just because
they appear in an SDK request object. It rebuilds the transcript from the HTTP request, selected
headers, body hash, nonce, route context, passport, and policy context, then verifies the proof
against that independently rebuilt material.
Passport-bound fields
Passport-bound fields must come from the passport. They must not be repaired, inferred, normalized, defaulted, or overridden from caller input before signing.
Passport-bound fields include:
audjtiiatcnf.kidcnf.key_bindingcnf.public_key_b64url
Caller-provided values for these fields may be accepted only as optional consistency checks. For example, a caller may pass an expected audience so the SDK can fail early if the passport audience is different. The caller value must not replace the passport value.
Missing, conflicting, or non-canonical passport-bound claims must fail before signing. The SDK should return a clear local error instead of producing a proof that a verifier must later reject.
Signer-class boundary
Raw local Ed25519 signing is software only. A local SDK holding an Ed25519 private key may sign
software-bound request proofs when the passport binds to the matching public key and declares:
{
"cnf": {
"key_binding": "software",
"public_key_b64url": "..."
}
}
Stronger signer classes require their own signing paths:
hardware_localrequires hardware-backed local signing.remote_kmsrequires a KMS-backed signing path.attested_workloadrequires a broker, hardware, workload-attestation, or equivalent attested signing path.
An SDK must not satisfy hardware_local, remote_kms, or attested_workload by raw local
software signing. If a passport declares one of those stronger classes, a raw local signing helper
must fail before signing.
Request helpers versus signing
BuildRequest and lower-level request-material helpers may still build arbitrary conformance
vectors. They are useful for fixtures, negative tests, compatibility checks, and adapter
debugging.
SignRequest must be stricter. Before producing headers, it must check that passport-bound
claims are present, canonical, non-conflicting, and compatible with the signing key and signing
path. The stricter behavior keeps SDK output aligned with what a verifier can independently
rebuild and accept.