Repository navigation
feat(agent): device identity enrollment and channel #2000
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
410 commits
Select commit
Hold shift + click to select a range
064fefd
test(agent-identity-httpsig): mark where each expected value comes from
CBenoit 841dcf6
test(agent-identity-httpsig): check a failed channel opening never re…
CBenoit b852384
test(agent-identity-httpsig): cite the vector pass rule and the expir…
CBenoit 0434f37
test(agent-identity-httpsig): open the channel path for URLs with sev…
CBenoit d50abfa
test(agent-identity-httpsig): cite the channel URL slash rule
CBenoit 27f26e3
docs(agent-identity): audit each rotation completion exactly once
CBenoit cc08b9b
docs(agent-identity): treat an undecodable first message as no Hello
CBenoit 8e9b1f9
docs(agent-identity): give every contract section a stable anchor
CBenoit 79f73a8
docs(agent-identity): close a stream on an undecodable message
CBenoit 9625b49
test(agent-identity-mock): treat an undecodable first channel message…
CBenoit a10f220
fix(agent-identity-mock): close a stream on an undecodable message wi…
CBenoit 12599a7
chore(deps): point the lock file at webpki-roots 1.0.10
CBenoit 589b738
docs(agent-identity): bound channel envelopes at 64 KiB
CBenoit 3665c2b
docs(agent-identity): keep every config within one channel envelope
CBenoit d8fc9dc
docs(agent-identity): drop the redundant prefix from contract anchors
CBenoit 98ed6ec
docs(agent-identity-conformance): state the per-authority harness rules
CBenoit 87f8f9c
docs(agent-identity): say the renewal anchor's load time is not persi…
CBenoit e3f0ae1
docs(agent-identity): keep DVLS configs within the channel limit
CBenoit 613feec
refactor(agent-identity): name the trust stop after stored identities
CBenoit 3d93ea1
fix(agent): stop identity while an identity.json is untrusted
CBenoit 5ef2394
refactor(agent-identity): drop the untrusted identity file fallbacks
CBenoit 88177ba
perf(agent): check identity.json without opening it for its data
CBenoit 9535739
test(agent-identity): mark the oracles of the authority directory tests
CBenoit cc5b70d
feat(agent-identity-mock): bound channel envelopes and configs at 64 KiB
CBenoit b16d110
docs(agent-identity): refuse oversize settings and retry blocked enro…
CBenoit 996bbfe
test(agent-identity-conformance): run checks on fitting authorities
CBenoit 390ce41
test(agent-identity-conformance): decide expiry by the certificates
CBenoit 31788ad
test(agent-identity-conformance): tie expiry checks to the observed leaf
CBenoit 19f48cc
test(agent-identity-conformance): skip continuity checks on short leaves
CBenoit 0e1ad24
docs(agent-identity-conformance): keep authority secrets out of descr…
CBenoit 9fafef2
test(device-key): drop checks that only checked themselves
CBenoit b34d86e
test(device-key): assert what the governing documents decide
CBenoit 115b4dd
test(device-key): drop the no-trace check from the invalid-name test
CBenoit c131c01
test(device-key): cover operations the intent decides but no test rea…
CBenoit f9b954a
test(device-key): mark where each test's expected values come from
CBenoit 954dece
test(device-key): restore leftover recognition for the longest key name
CBenoit a93add6
test(device-key): check the key descriptor's meaning rather than its …
CBenoit a5f28ed
test(device-key): drop the minimum-wait checks from the key-directory…
CBenoit 866df8b
test(device-key): mark the remaining tests and assertions
CBenoit 10ebb3c
docs(device-key): state the file backend's directory rules and cleanu…
CBenoit b513266
test(agent-identity-conformance): check undecodable and oversized cha…
CBenoit 934c41b
docs(device-key): scope cleanup to the crate's naming scheme
CBenoit 54711d8
test(device-key): ground directory and cleanup tests in the intent
CBenoit 3647d35
test(device-key): keep the uppercase temporary name distinct
CBenoit b4cd351
test(device-key): check that files outside the naming scheme survive
CBenoit eec947e
docs(device-key): never block or read without bound on unexpected ent…
CBenoit d0c18f6
test(agent-channel-client): drop checks that guard nothing
CBenoit c1b7a26
test(agent-channel-client): pin closing, handshake and timing rules
CBenoit be4583e
test(agent-channel-client): cover rules no test exercised
CBenoit 6481cb4
test(agent-channel-client): mark where each expected value comes from
CBenoit fd05d37
test(agent-channel-client): accept an envelope of the contract's size
CBenoit 46a78fb
test(agent-channel-client): give the opening timeout test room
CBenoit 18592a5
test(agent-channel-client): mark the unsupported proxy scheme test
CBenoit b60f5e0
docs(agent-identity): never bypass a configured proxy
CBenoit a1b2971
docs(agent-channel-client): close on a server message it cannot trust
CBenoit dcebf27
fix(agent-channel-client): close on a server message it can't trust
CBenoit ca83e91
docs(agent-channel-client): ignore only well-identified messages befo…
CBenoit 1552a86
docs(agent-identity): say what clears the DVLS config-size warning
CBenoit 9c58ba5
fix(device-key): keep unexpected key-store entries from blocking or v…
CBenoit 7ed8621
docs(device-key): bound the size of a key file the file backend reads
CBenoit 270def2
docs(agent-identity): state temporary cleanup and Windows replace ret…
CBenoit 54102dd
docs(agent-identity): let revocation win over expiry before Hello
CBenoit a336eb3
docs(agent-identity-mock): state scoped app keys and what reset keeps
CBenoit 6bb3854
docs(agent-identity): connect directly under Windows proxy auto-confi…
CBenoit e486c7d
docs(agent-installer): state when the MSI enrolls and how failures be…
CBenoit cfd73c2
docs(agent): state the key-backend-unavailable system event
CBenoit 03f7654
docs(agent-identity-conformance): fault-injection tests are N/A on DVLS
CBenoit 569316e
docs(device-key): list and delete keys that break the access rule
CBenoit 64158ac
ci: restore fail-fast for the tests matrix
CBenoit b2900d9
docs(agent): say when an agent notices the channel back on
CBenoit 8ad0b72
test(agent-identity): cite contract anchors in channel and signer mar…
CBenoit 950eb7c
test(agent-installer): mark the oracles of the Agent Identity tests
CBenoit 63e93fd
test(agent-identity): mark the source of each test's expected value
CBenoit 2ed5858
test(agent-identity): compare the token hash and CSR algorithm with o…
CBenoit ceffe55
test(agent-identity): cover the gaps mutation testing found in identi…
CBenoit 8949251
test(agent-identity): name the change type of the stored-format test
CBenoit ab6cf81
test(agent-identity): mark the temporary-file and replace-retry tests
CBenoit 180673e
test(agent-identity): check an overflowing Retry-After against the 1 …
CBenoit 747f2d8
test(agent): mark the oracle sources of Agent Identity tests
CBenoit 06867d5
test(device-key): refuse a key file another account owns, as root
CBenoit 8627d4d
ci: run the root-only device-key tests as root
CBenoit f99755d
test(agent-identity-conformance): mark test oracles
CBenoit 6212b6c
test(agent-identity-mock): mark where each expected value comes from
CBenoit 804490d
test(agent-identity-mock): require 500 for an enrollment whose config…
CBenoit 0b7456c
test(agent-identity-mock): cover rules no test exercised
CBenoit 965c422
test(agent-identity-mock): refuse a channel opening that repeats a si…
CBenoit d554e04
test(agent-identity-mock): mark the tests the mock intent and contrac…
CBenoit 1981159
test(agent-identity-mock): cover the channel handshake rules no test …
CBenoit d66b60d
test(agent-identity-mock): assert only the config revision rules the …
CBenoit a6e9d16
docs(agent-identity): link the contract's short anchors
CBenoit 881f7cc
test(http-client-proxy): mark test oracles
CBenoit 010ca6d
test(agent-identity-conformance): drop a session retry test no DVLS r…
CBenoit e9d6334
docs(agent-identity): reserve key_storage in enroll and renew responses
CBenoit 14556e5
fix(agent): fail identity requests on a Manual proxy they can't use
CBenoit 56c8e60
test(agent-identity-conformance): mark the conformance tests with the…
CBenoit 7d5d530
test(agent-identity-conformance): mark the agent conformance tests wi…
CBenoit e093657
test(agent): assert only the key-name prefix form at config load
CBenoit 7abe8ed
test(agent): cite the identity intent for the key-backend event
CBenoit 1b91740
test(agent-installer): cite the MSI intent for the enroll and cleanup…
CBenoit a0dc2a0
fix(agent): warn once per run about Windows proxy auto-configuration
CBenoit ba125d3
fix(agent): skip the auto-configuration warning when a proxy is in use
CBenoit 3a4cc73
test(device-key): pin machine-key refusals and the key file size bound
CBenoit 2671464
test(device-key): say which checks refuse a key of another algorithm
CBenoit b28cdaf
docs(agent-identity): state how unusable and auto-configured proxies …
CBenoit 898360d
docs(agent-identity-conformance): name the tests for every coverage item
CBenoit 58dace1
test(agent-identity-conformance): assert outcomes instead of message …
CBenoit 9524edb
test(agent-identity-conformance): skip renewal checks on short leaves
CBenoit 629674a
test(device-key): list and delete a key file that breaks the access rule
CBenoit 60305da
fix(agent): read a system proxy without a scheme as an HTTP proxy
CBenoit 845f269
fix(agent-identity-mock): advertise the address the mock listens on
CBenoit 6e206ab
fix(agent): read a proxy without a scheme as an HTTP proxy for every …
CBenoit 691502d
docs(agent-identity): state what revocation actually guarantees
CBenoit 865f402
docs(agent-identity): cite DVLS's intent in the RDM repository
CBenoit 017a53d
docs(agent-channel-client): spread reconnects after a long-lived stream
CBenoit 909e0a9
docs(agent-identity): let an authority implement the signature profil…
CBenoit feaea39
ci: verify the Agent Identity test vectors independently
CBenoit 1703489
fix(agent): refuse to store an identity past its 2 MiB size limit
CBenoit 0b05644
fix(agent-channel-client): back off a non-gRPC 5xx response as an outage
CBenoit 0c16404
fix(agent-channel-client): restart the backoff only after a long-live…
CBenoit cb42e66
test(agent-channel-client): leave the stable-time test room for a sch…
CBenoit ae50719
fix(agent): never connect directly around a system proxy that can't b…
CBenoit bfec9f7
fix(agent): fail identity requests on a system proxy they can't use
CBenoit fbdffb8
fix(agent-channel-client): refuse server messages larger than an enve…
CBenoit 8bcdb89
fix(agent): bound the agent channel notices an identity queues
CBenoit 1940ae3
docs(agent): state how channel notices are coalesced
CBenoit 34c468a
docs(agent-identity): hash secret bytes, refuse URL credentials
CBenoit 798a5bf
docs(agent-identity): bound token reach and state least privilege
CBenoit 5ac316f
docs(agent-identity): refuse a known authority from another URL
CBenoit a18a1d9
docs(agent-installer): accept the enrollment token from a file
CBenoit 0b04b12
Merge remote-tracking branch 'origin/master' into cbenoit-agent-ident…
CBenoit fb5e086
docs(agent-identity): revoke tokens and drop their config
CBenoit 3aca60c
docs(agent-identity): assign settings after enrollment
CBenoit d0decfc
docs(agent-identity-mock): mirror only what the tester uses
CBenoit 6917c6d
docs(agent-identity-conformance): speak of revoked tokens
CBenoit f54d0c3
docs(agent-installer): say when the token file is read and refused
CBenoit bb151dc
docs(agent-identity-mock): state how token revocation answers
CBenoit 17cfc50
docs(agent-identity): read token and channel URLs as text
CBenoit da8d4e1
refactor(agent-identity): write key-slot changes through Store::update
CBenoit 8ffe21e
refactor(agent-identity): delete unused store and token code
CBenoit 11f23e9
test(agent): cite the channel intent for coalesced notices
CBenoit b085e31
refactor(agent-identity-mock): fold PushKind into a cloneable StreamPush
CBenoit 21db848
refactor(agent-identity-mock): end channel streams through one termin…
CBenoit e7cf461
test(agent): check the notice flood only against the intent's bound
CBenoit 1729547
refactor(agent-installer): load installer strings in one place
CBenoit add5714
feat(agent-installer): read enrollment token from a file
CBenoit e9ed8a3
docs(agent): note plaintext pending files on Linux and macOS
CBenoit be01753
docs(agent-installer): say an upgrade reads the token file again
CBenoit cd48f92
test(agent): compare the coalesced config with a literal
CBenoit e6d1c3f
test(agent-identity-conformance): check refused channel openings with…
CBenoit d06024e
test(agent-identity-conformance): audit the SYSTEM agent's files with…
CBenoit 92904ce
test(agent-identity-conformance): share the agent case scaffolding
CBenoit e290a11
refactor(agent-identity): store an enrolled identity under one lock
CBenoit 23f6968
fix(agent): refuse a known authority from another URL
CBenoit 6d3d1ab
refactor(agent-identity): keep the unchecked identity writes to tests
CBenoit 9695cce
fix(agent): refuse a token whose base URL holds credentials
CBenoit 698bbdc
fix(agent-identity-mock): refuse a token for a base URL with credentials
CBenoit d1e16b8
test(agent-identity-mock): pin the hash a token is looked up by
CBenoit bf83dbe
refactor(agent): read Windows security descriptors in one place
CBenoit 6e38b60
refactor(agent): share the private Unix file helpers
CBenoit 2ec47a0
docs(agent): mark the untested properties of the shared file helpers
CBenoit c1e2f79
test(agent): check that only a protected, non-null DACL is read
CBenoit dc50f3c
test(agent): refuse a DACL holding a deny entry
CBenoit df320bd
docs(agent): mark the macOS ownership and ACL checks as untested
CBenoit 78935e9
test(agent-identity): check credential base URLs with other malformed…
CBenoit d9e997d
fix(agent): read any `@` in a token's authority as a user name
CBenoit 9acc80a
fix(agent): ignore a channel URL that holds credentials
CBenoit 8b37141
fix(agent-identity-mock): drop the enrollment token config
CBenoit b41c7b0
fix(agent-identity-mock): revoke enrollment tokens
CBenoit 9d851ec
test(agent-identity-mock): cite only what decides the 422 test
CBenoit 8c40516
docs(agent-identity): revoke tokens to keep a device out
CBenoit 393373c
fix(agent-identity-mock): report a revoked token as Revoked
CBenoit cb1b581
test(agent-identity-mock): cite what decides the envelope-limit enroll
CBenoit 9440ca6
fix(agent-identity-mock): read a token's base URL as text
CBenoit 5b16311
test(agent-identity-mock): cite what decides the token state and dele…
CBenoit 47dd5d5
fix(agent): read token and channel URLs as text
CBenoit 5373704
docs(agent-identity): link the channel URL rule to its contract anchor
CBenoit 8f02214
test(agent-identity): refuse a stored base URL with an upper-case scheme
CBenoit 7d741b1
test(agent-identity-conformance): drop the token config check
CBenoit 2edb5e5
test(agent-identity-conformance): revoke tokens instead of deleting
CBenoit 0795f40
docs(agent-identity-conformance): quote the canonical secret rule
CBenoit 858c030
test(agent-identity-conformance): reject a token URL with a user name
CBenoit 65bfabd
test(agent-identity-conformance): check the revoked enrollment's marker
CBenoit de2755b
test(agent-identity-conformance): read a token's URL as text
CBenoit 9541027
test(agent-identity-conformance): check what revocation keeps
CBenoit 117626c
docs(agent-identity-conformance): name the text-read URL forms
CBenoit 4215cfe
test(agent-identity-conformance): name a missing rejection marker
CBenoit ccc174e
test(agent-identity-conformance): trim the base URL before a path @
CBenoit a487845
test(agent-identity-conformance): cite DVLS's intent on token revocation
CBenoit 7c9578d
test(agent-identity-conformance): compare the whole revoked token
CBenoit b932e04
test(agent-identity): check three more RFC 5280 rules on a claimed chain
CBenoit 7a81460
test(agent): skip the SDDL descriptor tests under Miri
CBenoit 2712d77
docs(agent-identity): pin chain signatures to P-256
CBenoit 2798649
docs(agent-identity): say how a moved authority's chain is checked
CBenoit f0ead2e
docs(agent-identity): bind certificates to the enrollment URL
CBenoit 4154a3e
docs(agent-identity): refuse relayed enrollments by URL
CBenoit a68bb8c
docs(agent-identity): refuse a wrong enrollment URL permanently
CBenoit 607eeb1
docs(agent-identity-mock): say what a set fault changes
CBenoit 9e9fc16
docs(agent-identity): compare the enrollment URL as text
CBenoit 1a6c504
docs(agent-identity): give the enrollment URL extension a usable OID
CBenoit 4f43eec
docs(agent-identity-mock): call the token's field its status
CBenoit fea9317
docs(agent-identity): list CSRs among the shared vectors
CBenoit bc59d97
docs(agent-identity): say when a CSR names no enrollment URL
CBenoit c48cea8
docs(agent-identity): word the enrollment order like the CSR rule
CBenoit 58b7cf2
feat(agent): verify P-384 CA signatures on a moved authority
CBenoit 18ebee5
fix(agent): require a chain signature's algorithm in its signed part
CBenoit 40a2e45
test(agent-identity): say the digest helper also signs unpaired digests
CBenoit b8d98de
feat(agent): request the enrollment URL in identity CSRs
CBenoit 338da22
feat(agent): record enrollments refused for their URL
CBenoit a2ef6b0
feat(agent): refuse enrollment certificates naming another URL
CBenoit e07c6e4
fix(agent-identity-mock): name the enrollment URL in issued leaves
CBenoit 14e50ed
fix(agent-identity-mock): refuse an enrollment CSR naming another URL
CBenoit c365fdd
feat(agent): refuse enrollment tokens with a non-ASCII URL
CBenoit 5ab0a76
docs(agent): explain enrollments refused for their URL
CBenoit 862678b
test(agent-identity-mock): pin the CSR reader's stop and one URL exte…
CBenoit 473cbf0
refactor(agent-identity-mock): look up the renewed identity with get
CBenoit 3686bff
test(agent-identity-mock): name the reader case whose length runs int…
CBenoit 3609c3a
feat(agent-identity-mock): add a fault shaping the enrolled leaf's URL
CBenoit c090aef
test(agent-identity-conformance): check the enrollment URL binding
CBenoit 134da37
test(agent-identity-conformance): allow one in-flight check-in after …
CBenoit d3bdd0d
test(agent-identity-conformance): reject a non-ASCII token URL
CBenoit 1e11615
test(agent-identity-conformance): name the token's URL in enrollment …
CBenoit 15973fd
test(agent-identity-conformance): pin the chain check's algorithm ref…
CBenoit 9b8b8d5
test(agent-identity-conformance): check CSR signatures and leaf URL r…
CBenoit 5e56356
fix(agent-identity-mock): refuse a wrong enrollment URL with token_ur…
CBenoit a527e90
feat(agent): treat token_url_mismatch as a permanent refusal
CBenoit 135e940
test(agent-identity-conformance): take a new key for each rewritable CSR
CBenoit b3f002f
test(agent-identity-conformance): widen the enrollment URL cases
CBenoit 9ad2e11
test(agent-identity-conformance): expect token_url_mismatch for a wro…
CBenoit edbf223
test(agent-identity-conformance): ground the URL text cases in the co…
CBenoit 37532a0
refactor(agent-identity-mock): name a token's status as DVLS does
CBenoit d917184
test(agent-identity-conformance): read a token's status as DVLS names it
CBenoit 92de67b
test(agent-identity): drop the duplicate credential base URL test
CBenoit b59fef1
docs(agent-identity-conformance): cite the contract for the enrollmen…
CBenoit 456f3e7
docs(agent-identity-conformance): say why the refusal vectors isolate…
CBenoit b26f804
test(agent): check the CSR's URL extension against the contract OID
CBenoit cb27a7c
test(agent-identity): request the enrollment URL in the CSR vectors
CBenoit 26c660c
test(agent-identity): keep a CSR vector's expected as its check result
CBenoit 973fd24
test(agent-identity-conformance): refuse CSRs that name no enrollment…
CBenoit c64f874
fix(agent-identity-mock): read no URL from a CSR repeating the extension
CBenoit 67837d3
fix(agent-identity-mock): refuse a token for a non-ASCII base URL
CBenoit 8357ea4
test(agent-identity-mock): mark the CSR reader's stop as the mock's c…
CBenoit c0ceaf2
fix(agent-identity-mock): name no URL when the CSR reader loses framing
CBenoit 8ec7216
test(agent-identity-mock): quote the CSR naming no URL and vary renew…
CBenoit 0bbf72c
fix(agent-identity-mock): refuse high-tag-number tags in the CSR reader
CBenoit ada7c5d
test(agent-identity-mock): renew with two URLs other than the mock's
CBenoit 15fc491
docs(agent-identity-mock): say exactly which framing the CSR reader a…
CBenoit 4ccc006
Merge remote-tracking branch 'origin/master' into cbenoit-agent-ident…
CBenoit 500569a
test(agent-identity): find a runner's session members by session ID
CBenoit 7a09e16
test(agent-identity): skip PID 0 when ending a runner's session
CBenoit a18c3f6
docs(agent-identity): let a token carry recognized assignments
CBenoit File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nothing runs
docs/agent-identity/verify_vectors.py.docs/agent-identity/INTENT.agent-identity.md(Conformance) says the script recomputes every vector with an independent library "so that an error in the vectors cannot pass unnoticed into every implementation that agrees with them". No workflow calls it, so an incorrectly edited vector would pass the Rust tests (which agree with the vectors) and only a manual run would catch it.Suggestion: add a step (anywhere convenient, e.g. near here) that installs
cryptographyand runspython3 -I docs/agent-identity/verify_vectors.py, and optionally its--self-testmode.Note
Human-tuned, LLM-assisted content.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed in feaea39: a CI job runs
verify_vectors.pyand its self-test with a pinnedcryptographyand fails the build on any mismatch.Note
Human-tuned, LLM-assisted content.