Conversation
…equality
Adds an issuer-signed email-domain credential fixture and a Policy/v3 test:
a {emailDomain} requirement accepts only the exact issuer-signed domain and
rejects subdomains, suffixes, look-alikes, case, trailing-dot, zero-width and
IDNA spellings; envelope/disclosure mismatches; unsigned or duplicated
disclosures; payload tampering; another holder; the exact-email profile;
and a requirement substituted against the policy commitment. No production
code changes: the embedded policy engine already enforces this.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…a domain policy Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…credential Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Node pinned the reviewed mailbox-proof status freshness only for tinycloud.email-proof/v1, so a domain policy whose requirement omitted maxAgeSeconds would accept a domain credential for its whole issuer lifetime. Apply the same 300-second pin to tinycloud.email-domain-proof/v1 (same vct and issuer). The exact-email pin, generic Policy/v3, /delegate and /invoke are unchanged. Tests: a domain credential is accepted at 299 s and rejected at 301 s under a requirement without maxAgeSeconds; the exact pin is unchanged; an unreviewed look-alike profile is not pinned. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Author
|
Release blocked by where production's release branch lives — not merged. Production
Path forward: cherry-pick Nothing depends on this for now. It is defense-in-depth. Domain shares published by Share already carry |
This branch has not been deployed
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary (TC-500): prove email-domain policy semantics (tests only)
This PR adds no production code. It proves that the embedded Policy/v3 engine already enforces email-domain recipient shares exactly: a
{emailDomain}credential requirement is satisfied only by equality with the issuer-signed disclosure and the envelope claim.The test mints real issuer-signed SD-JWT email-domain credentials and asserts rejection for:
tinycloud.xyz.evil,eviltinycloud.xyz, uppercase, trailing dot, Cyrillic homoglyph, an IDNA spelling, zero-width suffix.It also shows that the exact domain is accepted.
Evidence:
cargo test -p tinycloud-node --lib email_domain_requirementpasses;cargo fmt --all -- --checkis clean;RUSTFLAGS=-Dwarnings cargo clippy -p tinycloud-node --all-targetsis clean. Replay, write escalation, sibling-read and tamper enforcement for domain shares are exercised end to end by the Share native joined gate against Node 1.17.1.Release: tests only; no deploy impact. Independent of the OpenCredentials, SDK and Share domain PRs.
Follow-up: freshness pin (head
4c039fa)This PR is no longer tests-only.
pinned_profile_status_freshness_secondsnow also pins 300 s fortinycloud.email-domain-proof/v1:opencredentials.email/v1and the same trusted issuer./delegateand/invokepaths are unchanged.Tests:
credential-time-invalid) under a requirement withoutmaxAgeSeconds.Evidence:
cargo test -p tinycloud-node --lib policy_v3: 27 passed. Clippy (-Dwarnings, all targets) andfmt --checkare clean.TC500_NODE_COMMIT=4c039fa) with OpenCredentials846c018: exact email, bearer, and domain legs; sibling 403, write 403, tamper 401, revoked 403, replay 401.Release: a Node release is needed for this defense-in-depth pin. Domain shares already carry
maxAgeSeconds: 300, so this can ship before or after the domain PRs.Rollback: reverting restores the prior exact-only pin; domain policies from Share still enforce 300 s through
maxAgeSeconds.