Skip to content

test(xtest): DSPX-1561 cover assertion hash input, strict manifest parsing, and binding forms - #707

Draft
dmihalcik-virtru wants to merge 1 commit into
DSPX-1561-key-selection-xtestfrom
DSPX-1561-manifest-parsing-xtest
Draft

dmihalcik-virtru wants to merge 1 commit into
DSPX-1561-key-selection-xtestfrom
DSPX-1561-manifest-parsing-xtest

Conversation

@dmihalcik-virtru

@dmihalcik-virtru dmihalcik-virtru commented Nov 9, 2026 •

Copy link
Copy Markdown
Member

Summary

Split out of #702 (draft; the complete change). Stacked on #706.

test_assertion_verification.py gains cases, on TDFs each SDK wrote, for:

  • Hash input. The hash covers the assertion as received, including unmodelled members and an object-valued statement value.
  • Strict manifest parsing, including:
    • assertions taken from the DSPX-5520 vectors;
    • case variants across the manifest on real TDFs (Payload alongside payload, URL in a key access object, SchemaVersion);
    • a positive control for the IsStreamable spelling that older Java SDKs wrote.
  • Binding forms under spec Section 5.1.

Every rejection is matched by its reported reason and has a positive control.

test_assertion_gmac_limitation.py documents a known limitation of GMAC segment integrity (spec Section 10.7). It needs the local KAS key and skips without it.

  • Feature gate. assertion_hash_raw, force-only like assertion_header_key_pinning.
  • CI. xtest.yml runs both modules in the standard and focused steps.

Testing

  • cd xtest && uv run ruff check . && uv run ruff format --check . && uv run pyright, plus the offline unit tests from check.yml.
  • XT_FORCE_SUPPORTS=assertion_header_key_pinning,assertion_hash_raw uv run pytest test_assertion_verification.py test_assertion_gmac_limitation.py --sdks "go java js" against the SDK branches.

Related pull requests

…rsing, and binding forms

Adds the Phase 0 feature gate assertion_hash_raw, force-only like
assertion_header_key_pinning; branch builds run the cases with
XT_FORCE_SUPPORTS=assertion_header_key_pinning,assertion_hash_raw.

test_assertion_verification.py gains cases that check how each SDK reads
assertions built into TDFs it wrote:
- the hash over the assertion as received, including unmodelled members
  and an object-valued statement value;
- strict manifest parsing, including assertions from the DSPX-5520
  vectors and case variants across the manifest on real TDFs (Payload
  alongside payload, URL in a key access object, SchemaVersion), with a
  positive control for the IsStreamable spelling written by older Java
  SDKs;
- spec Section 5.1 binding forms.

Every rejection is matched by its reported reason and has a positive
control.

test_assertion_gmac_limitation.py documents a known, unfixed limitation
of GMAC segment integrity for holders of the payload key (spec Section
10.7). It needs the local KAS key and skips without it. It runs in the
standard and focused xtest steps.

Signed-off-by: Dave Mihalcik <dmihalcik@virtru.com>
@coderabbitai

coderabbitai Bot commented Nov 9, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant