wimsey-httpsig
The WIMSE HTTP Message Signatures binding.
An RFC 9421 HTTP Message Signatures implementation and the WIMSE profile of it. The caller signs the outgoing request — including the header carrying its WIT — with its proof-of-possession key, so an intermediary can read the request but cannot alter anything the signature covers.
The RFC 9421 signature base is verified byte-for-byte against the worked example in Section 2.5, and verification reuses the received parameter substring verbatim rather than re-serializing it.
The WIMSE profile (Section 3 of the http-signature draft) narrows RFC 9421
considerably, and is enforced by opting in with VerifyConfig::wimse_profile:
@methodand@request-targetmust be covered, plusContent-Type,Content-Digest,Authorization,Txn-TokenandWorkload-Identity-Tokenwhenever the message carries them;created,expires,nonceandtagare mandatory, withtagfixed towimse-workload-to-workload;wimse-audis mandatory on a request and names the service it is for;keyidandalgare forbidden — the key travels in the WIT, and itscnfJWK pins the algorithm.
With the profile off, the crate is a plain RFC 9421 implementation.
Part of wimsey, a vendor-neutral reference
implementation of the IETF WIMSE
workload-identity drafts, in Rust.
Pre-alpha. The specs are Internet-Drafts, not RFCs. This crate pins one revision; see
SPEC-MAP.mdfor the pin and for the requirements it does not yet meet.
All signing is EdDSA over Ed25519, which is deterministic, so output is
byte-for-byte reproducible. Time is injected rather than read from a clock, so
verification is reproducible too. Cross-implementation test vectors live in
conformance/.
Licensed under Apache-2.0.