Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .stomata/lessons.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
{"date": "2026-08-10", "what": "A cross-layer test was skipped in Pancake CI and the suite still reported green.", "where": "workplan/2026-08/rajat_day5_closeout_20260810.md"},
{"date": "2026-08-18", "what": "The schema drift guard passed while comparing nothing, because the mirror it compared against had been made permissive.", "where": "workplan/2026-08/rajat_import_review_20260818.md"},
{"date": "2026-08-18", "what": "The dirty-tree warning fired on every single run because generated credentials were rewritten each time, so it stopped carrying information.", "where": "app/tests/testkit/mint_test_authority_credentials.py"},
{"date": "2026-08-19", "what": "The lint ratchet counted ruff's success banner as a violation, so it reported 1 whatever the code said, and a real count of 36 rode in unnoticed across four commits.", "where": "harness/stomata/run.py"}
{"date": "2026-08-19", "what": "The lint ratchet counted ruff's success banner as a violation, so it reported 1 whatever the code said, and a real count of 36 rode in unnoticed across four commits.", "where": "harness/stomata/run.py"},
{"date": "2026-08-26", "what": "All committed grant fixtures expired on 2026-08-20 (30-day mint window). The tamper/revocation/wrong-geoid tests kept passing for six days -- the verifier rejected the credentials for expiry, not the property under test -- while a conftest docstring claimed there was no expiry cliff.", "where": "app/tests/conftest.py"}
]
},
{
Expand Down
50 changes: 47 additions & 3 deletions app/tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,55 @@
import base64
import json
import time
from pathlib import Path

import pytest

# Grant fixtures are minted by Pancake's testkit and committed here, so they
# carry a real expiry. Every one of these must be in-window for its test to
# mean anything: an expired "valid" fails outright, while an expired
# "tampered" or "revoked" is still rejected -- but for expiry rather than
# for the property under test, and the test passes while testing nothing.
# (That happened on 2026-08-20; four tests failed on every branch and the
# tamper/revocation checks had been vacuous for six days before anyone saw.)
GRANT_FIXTURES_NEEDING_VALIDITY = (
"valid.sdjwt",
"revoked.sdjwt",
"tampered.sdjwt",
"wrong_geoid.sdjwt",
)

REMINT_COMMAND = (
"PYTHONPATH=<pancake-checkout>/services python -m "
"pancake_services.grants.testkit.mint_test_credentials "
"--out app/tests/testkit/dev_keys --days 365"
)


def _grant_fixture_expiry_guard(dev_keys: Path, min_remaining_days: float = 30) -> None:
stale = []
for name in GRANT_FIXTURES_NEEDING_VALIDITY:
token = (dev_keys / name).read_text().strip().split("~")[0]
payload = token.split(".")[1]
payload += "=" * (-len(payload) % 4)
exp = json.loads(base64.urlsafe_b64decode(payload)).get("exp", 0)
remaining = (exp - time.time()) / 86400
if remaining < min_remaining_days:
stale.append(f" {name}: {remaining:.0f} day(s) of validity remaining")
if stale:
raise RuntimeError(
"Grant fixtures are expired or expiring; their tests would pass "
"vacuously or fail spuriously. Re-mint them (from a pancake "
f"checkout, run in this repo's root):\n{REMINT_COMMAND}\n"
+ "\n".join(stale)
)


@pytest.fixture(scope="session", autouse=True)
def mint_credentials():
"""Mint all credential variants fresh at test time. No dated artifacts,
no expiry cliff, and the minter is exercised on every run."""
"""Mint the authority credential variants fresh at test time, and refuse
to run against grant fixtures that are close to their expiry cliff."""
dev_keys = Path(__file__).parent / "testkit" / "dev_keys"
from app.tests.testkit.mint_test_authority_credentials import mint_authority
mint_authority(Path(__file__).parent / "testkit" / "dev_keys")
mint_authority(dev_keys)
_grant_fixture_expiry_guard(dev_keys)
2 changes: 1 addition & 1 deletion app/tests/testkit/dev_keys/dev_issuer_private.pem
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
-----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VwBCIEIAcQ2LuH7bE+C6+9Uuxnxltp8QPl954OLq+X56vzIC1w
MC4CAQAwBQYDK2VwBCIEICVj8jTrjnPmH0lVAlnEedEi53Dqkd9aHmd5tD+hy2Ps
-----END PRIVATE KEY-----
2 changes: 1 addition & 1 deletion app/tests/testkit/dev_keys/dev_issuer_public.pem
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAX78zbH0iwIvEoiZY5C3fpchJXVG/zr2goNwt9qT1sIc=
MCowBQYDK2VwAyEACY7NwOU9ftWR1syot1tnEqtMXPW7StyxFFK9/ZHDh9g=
-----END PUBLIC KEY-----
2 changes: 1 addition & 1 deletion app/tests/testkit/dev_keys/expired.sdjwt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
eyJhbGciOiJFZERTQSIsImtpZCI6InBhbmNha2UtaXNzdWVyLTEiLCJ0eXAiOiJ2YytzZC1qd3QifQ.eyJpc3MiOiJkaWQ6d2ViOnBhbmNha2UuYWdzdGFjay5vcmciLCJzdWIiOiIxZWQyMjk5MWE4NmNmNzEyM2M1N2RjZjVjNDM1ZjcyNGUxMzNiY2ZmZTJmMzA4ZDJlMDMzMTJhYjRiMmNkNjBkIiwiaWF0IjoxNzg0NjI5ODY1LCJleHAiOjE3ODQ2MjYyNjUsImp0aSI6IjAxS1kyM05CMEpXWE03NDlDMzNBWjJLQVI5IiwidmN0IjoiYWdzdGFjay5vcmcvY3JlZGVudGlhbHMvZmllbGQtYWNjZXNzLWdyYW50L3YxIiwiZ3JhbnRlZSI6Imh1Yi1hY2N0LWRldi1idXllciIsIm1hc2tpbmdfbGV2ZWwiOiJMMSIsInB1cnBvc2UiOiJldWRyLWR1ZS1kaWxpZ2VuY2UiLCJvZHJsIjp7IkBjb250ZXh0IjoiaHR0cDovL3d3dy53My5vcmcvbnMvb2RybC5qc29ubGQiLCJAdHlwZSI6IkFncmVlbWVudCIsInVpZCI6InVybjphZ3N0YWNrOmdyYW50OjAxS1kyM05CMEpXWE03NDlDMzNBWjJLQVI5IiwicGVybWlzc2lvbiI6W3sidGFyZ2V0IjoidXJuOmFnc3RhY2s6ZmllbGRsaXN0OjFlZDIyOTkxYTg2Y2Y3MTIzYzU3ZGNmNWM0MzVmNzI0ZTEzM2JjZmZlMmYzMDhkMmUwMzMxMmFiNGIyY2Q2MGQiLCJhY3Rpb24iOiJyZWFkIiwiY29uc3RyYWludCI6W3sibGVmdE9wZXJhbmQiOiJkYXRlVGltZSIsIm9wZXJhdG9yIjoibHRlcSIsInJpZ2h0T3BlcmFuZCI6IjIwMjYtMDctMjFUMDk6MzE6MDVaIn0seyJsZWZ0T3BlcmFuZCI6InB1cnBvc2UiLCJvcGVyYXRvciI6ImVxIiwicmlnaHRPcGVyYW5kIjoiZXVkci1kdWUtZGlsaWdlbmNlIn1dLCJkdXR5IjpbeyJhY3Rpb24iOiJkZWxldGUiLCJjb25zdHJhaW50IjpbeyJsZWZ0T3BlcmFuZCI6ImVsYXBzZWRUaW1lIiwib3BlcmF0b3IiOiJlcSIsInJpZ2h0T3BlcmFuZCI6IlAzMEQifV19XX1dfSwic3RhdHVzIjp7InN0YXR1c19saXN0Ijp7InVyaSI6Imh0dHBzOi8vcGFuY2FrZS5kZXYubG9jYWwvZ3JhbnRzL3N0YXR1cy1saXN0IiwiaWR4IjoyfX0sIl9zZCI6WyItVTlmcVlYc2xsZlB1S1ZQQ1YycWhXSUdFNzRXVlowMUpQYVBUWlhZQ0pjIiwiNWRTT2hGRDhaZnp1QkNRUEQ4ejNYTXQ5VHRVREdGeEZDRXBTMjdLWURLVSIsIll0UTQ4VlN6TU5mck9FRFJnUW1zd1dDY2ljMWJ3cGk2UWhsaUxLczVzdVEiXSwiX3NkX2FsZyI6InNoYS0yNTYifQ.LWqlz9wWvi7-VP2Ba_F5aHg0e4Txwd3UadCAt9w_HsA44nRRzzNcEbOZnIYG96h3Mq4xk12IwDpyD8vAkFJABQ~WyJNbFoxV0ZIeURkLUE2Nld1SXVWVWlBIiwgImZpZWxkcy4wIiwgIjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2E3ZDZiMWM1ZTlkOGY3YTZiNWM0ZDNlMmYxYTBiOWM4ZDdlNmYiXQ~WyJGaW1DRzh3amYtWVB3RXlSZzMwQ2dBIiwgImZpZWxkcy4xIiwgIjdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2EiXQ~WyJhQVR1YU8xYVVkWUVuX2E3TjhJQUFRIiwgImZpZWxkcy4yIiwgImIxYWQ0YzJmOGUzYTdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGMiXQ~
eyJhbGciOiJFZERTQSIsImtpZCI6InBhbmNha2UtaXNzdWVyLTEiLCJ0eXAiOiJ2YytzZC1qd3QifQ.eyJpc3MiOiJkaWQ6d2ViOnBhbmNha2UuYWdzdGFjay5vcmciLCJzdWIiOiIxZWQyMjk5MWE4NmNmNzEyM2M1N2RjZjVjNDM1ZjcyNGUxMzNiY2ZmZTJmMzA4ZDJlMDMzMTJhYjRiMmNkNjBkIiwiaWF0IjoxNzg3ODAzNjQ4LCJleHAiOjE3ODc4MDAwNDgsImp0aSI6IjAxTTEwUERHSjA2WUIzWFZDV1BUTkdRMVlSIiwidmN0IjoiYWdzdGFjay5vcmcvY3JlZGVudGlhbHMvZmllbGQtYWNjZXNzLWdyYW50L3YxIiwiZ3JhbnRlZSI6Imh1Yi1hY2N0LWRldi1idXllciIsIm1hc2tpbmdfbGV2ZWwiOiJMMSIsInB1cnBvc2UiOiJldWRyLWR1ZS1kaWxpZ2VuY2UiLCJvZHJsIjp7IkBjb250ZXh0IjoiaHR0cDovL3d3dy53My5vcmcvbnMvb2RybC5qc29ubGQiLCJAdHlwZSI6IkFncmVlbWVudCIsInVpZCI6InVybjphZ3N0YWNrOmdyYW50OjAxTTEwUERHSjA2WUIzWFZDV1BUTkdRMVlSIiwicGVybWlzc2lvbiI6W3sidGFyZ2V0IjoidXJuOmFnc3RhY2s6ZmllbGRsaXN0OjFlZDIyOTkxYTg2Y2Y3MTIzYzU3ZGNmNWM0MzVmNzI0ZTEzM2JjZmZlMmYzMDhkMmUwMzMxMmFiNGIyY2Q2MGQiLCJhY3Rpb24iOiJyZWFkIiwiY29uc3RyYWludCI6W3sibGVmdE9wZXJhbmQiOiJkYXRlVGltZSIsIm9wZXJhdG9yIjoibHRlcSIsInJpZ2h0T3BlcmFuZCI6IjIwMjYtMDgtMjdUMDM6MDc6MjhaIn0seyJsZWZ0T3BlcmFuZCI6InB1cnBvc2UiLCJvcGVyYXRvciI6ImVxIiwicmlnaHRPcGVyYW5kIjoiZXVkci1kdWUtZGlsaWdlbmNlIn1dLCJkdXR5IjpbeyJhY3Rpb24iOiJkZWxldGUiLCJjb25zdHJhaW50IjpbeyJsZWZ0T3BlcmFuZCI6ImVsYXBzZWRUaW1lIiwib3BlcmF0b3IiOiJlcSIsInJpZ2h0T3BlcmFuZCI6IlAzMEQifV19XX1dfSwic3RhdHVzIjp7InN0YXR1c19saXN0Ijp7InVyaSI6Imh0dHBzOi8vcGFuY2FrZS5kZXYubG9jYWwvZ3JhbnRzL3N0YXR1cy1saXN0IiwiaWR4IjoyfX0sIl9zZCI6WyJKbjdIbWFQUUJ3V0xSWE9LcFV1eHRtRFpwVWZEQ0Q4dEQ4N3lmeC1UUGQwIiwiYURNaXV2SlF4WGVSV2RRSHloVFhTdWhfcEhDWFBWcFo2cmJfSkJwOGxlWSIsIm96X1pvU3JoTV9fMzdfQ1Y3aHg1dlMxMHNlSG9KZTFkdmdFc2FhXzV3dDgiXSwiX3NkX2FsZyI6InNoYS0yNTYifQ.svoVb4Wheg0lz3pLK2RPOgs-GzlsNwiIDYhAcvHnGSXQegEo1aofSLB8aSL7_jfsqaUEnPq-1Ycrif3yhddlCA~WyIyQ3hHbHhrOU1XZm5pdlJmMERrcm1BIiwgImZpZWxkcy4wIiwgIjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2E3ZDZiMWM1ZTlkOGY3YTZiNWM0ZDNlMmYxYTBiOWM4ZDdlNmYiXQ~WyIzVzk1N2FDaTVlVy1UZDlZQXhta2JnIiwgImZpZWxkcy4xIiwgIjdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2EiXQ~WyI0YXViNlY5bURSUXJNSTd2bHV1UkZ3IiwgImZpZWxkcy4yIiwgImIxYWQ0YzJmOGUzYTdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGMiXQ~
2 changes: 1 addition & 1 deletion app/tests/testkit/dev_keys/revoked.sdjwt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
eyJhbGciOiJFZERTQSIsImtpZCI6InBhbmNha2UtaXNzdWVyLTEiLCJ0eXAiOiJ2YytzZC1qd3QifQ.eyJpc3MiOiJkaWQ6d2ViOnBhbmNha2UuYWdzdGFjay5vcmciLCJzdWIiOiIxZWQyMjk5MWE4NmNmNzEyM2M1N2RjZjVjNDM1ZjcyNGUxMzNiY2ZmZTJmMzA4ZDJlMDMzMTJhYjRiMmNkNjBkIiwiaWF0IjoxNzg0NjI5ODY1LCJleHAiOjE3ODcyMjE4NjUsImp0aSI6IjAxS1kyM05CMEpXWE03NDlDMzNBWjJLQVJBIiwidmN0IjoiYWdzdGFjay5vcmcvY3JlZGVudGlhbHMvZmllbGQtYWNjZXNzLWdyYW50L3YxIiwiZ3JhbnRlZSI6Imh1Yi1hY2N0LWRldi1idXllciIsIm1hc2tpbmdfbGV2ZWwiOiJMMSIsInB1cnBvc2UiOiJldWRyLWR1ZS1kaWxpZ2VuY2UiLCJvZHJsIjp7IkBjb250ZXh0IjoiaHR0cDovL3d3dy53My5vcmcvbnMvb2RybC5qc29ubGQiLCJAdHlwZSI6IkFncmVlbWVudCIsInVpZCI6InVybjphZ3N0YWNrOmdyYW50OjAxS1kyM05CMEpXWE03NDlDMzNBWjJLQVJBIiwicGVybWlzc2lvbiI6W3sidGFyZ2V0IjoidXJuOmFnc3RhY2s6ZmllbGRsaXN0OjFlZDIyOTkxYTg2Y2Y3MTIzYzU3ZGNmNWM0MzVmNzI0ZTEzM2JjZmZlMmYzMDhkMmUwMzMxMmFiNGIyY2Q2MGQiLCJhY3Rpb24iOiJyZWFkIiwiY29uc3RyYWludCI6W3sibGVmdE9wZXJhbmQiOiJkYXRlVGltZSIsIm9wZXJhdG9yIjoibHRlcSIsInJpZ2h0T3BlcmFuZCI6IjIwMjYtMDgtMjBUMTA6MzE6MDVaIn0seyJsZWZ0T3BlcmFuZCI6InB1cnBvc2UiLCJvcGVyYXRvciI6ImVxIiwicmlnaHRPcGVyYW5kIjoiZXVkci1kdWUtZGlsaWdlbmNlIn1dLCJkdXR5IjpbeyJhY3Rpb24iOiJkZWxldGUiLCJjb25zdHJhaW50IjpbeyJsZWZ0T3BlcmFuZCI6ImVsYXBzZWRUaW1lIiwib3BlcmF0b3IiOiJlcSIsInJpZ2h0T3BlcmFuZCI6IlAzMEQifV19XX1dfSwic3RhdHVzIjp7InN0YXR1c19saXN0Ijp7InVyaSI6Imh0dHBzOi8vcGFuY2FrZS5kZXYubG9jYWwvZ3JhbnRzL3N0YXR1cy1saXN0IiwiaWR4Ijo3fX0sIl9zZCI6WyI5LTVYWjQ5SVVzcVY1M0F1Tmh3RzQ0cVNsMXY2ZkhGdVZXcHdTSkZEcDJvIiwiWVdWTmNnNnB1NVl6Z2UwbUMtNHIzMlp4VnhTY1J0cS01YmpTWW9iMUtIayIsImMycUpHUkJIaDhiZ0d6bzlEUU54V25BRFROdFgwTU9vUm5KOFo0dk9yb1EiXSwiX3NkX2FsZyI6InNoYS0yNTYifQ._S_rkhO2ejeCw94nOfke2HcAs8V_4OE4FJXQlgIkFxnSG-v3OUsgYrECwayono3mjj9zMNgVUWsFI83RSWFoDg~WyJXMzUtZkJNcjE1ZlJNdWZja2Nfcmd3IiwgImZpZWxkcy4wIiwgIjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2E3ZDZiMWM1ZTlkOGY3YTZiNWM0ZDNlMmYxYTBiOWM4ZDdlNmYiXQ~WyI1QjUtTUwyc0tCUFo5M1Q2U1J3OXpBIiwgImZpZWxkcy4xIiwgIjdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2EiXQ~WyJwbTZjMlgxOWJOc0FqNkdrb0pxMTNBIiwgImZpZWxkcy4yIiwgImIxYWQ0YzJmOGUzYTdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGMiXQ~
eyJhbGciOiJFZERTQSIsImtpZCI6InBhbmNha2UtaXNzdWVyLTEiLCJ0eXAiOiJ2YytzZC1qd3QifQ.eyJpc3MiOiJkaWQ6d2ViOnBhbmNha2UuYWdzdGFjay5vcmciLCJzdWIiOiIxZWQyMjk5MWE4NmNmNzEyM2M1N2RjZjVjNDM1ZjcyNGUxMzNiY2ZmZTJmMzA4ZDJlMDMzMTJhYjRiMmNkNjBkIiwiaWF0IjoxNzg3ODAzNjQ4LCJleHAiOjE4MTkzMzk2NDgsImp0aSI6IjAxTTEwUERHSjA2WUIzWFZDV1BUTkdRMVlTIiwidmN0IjoiYWdzdGFjay5vcmcvY3JlZGVudGlhbHMvZmllbGQtYWNjZXNzLWdyYW50L3YxIiwiZ3JhbnRlZSI6Imh1Yi1hY2N0LWRldi1idXllciIsIm1hc2tpbmdfbGV2ZWwiOiJMMSIsInB1cnBvc2UiOiJldWRyLWR1ZS1kaWxpZ2VuY2UiLCJvZHJsIjp7IkBjb250ZXh0IjoiaHR0cDovL3d3dy53My5vcmcvbnMvb2RybC5qc29ubGQiLCJAdHlwZSI6IkFncmVlbWVudCIsInVpZCI6InVybjphZ3N0YWNrOmdyYW50OjAxTTEwUERHSjA2WUIzWFZDV1BUTkdRMVlTIiwicGVybWlzc2lvbiI6W3sidGFyZ2V0IjoidXJuOmFnc3RhY2s6ZmllbGRsaXN0OjFlZDIyOTkxYTg2Y2Y3MTIzYzU3ZGNmNWM0MzVmNzI0ZTEzM2JjZmZlMmYzMDhkMmUwMzMxMmFiNGIyY2Q2MGQiLCJhY3Rpb24iOiJyZWFkIiwiY29uc3RyYWludCI6W3sibGVmdE9wZXJhbmQiOiJkYXRlVGltZSIsIm9wZXJhdG9yIjoibHRlcSIsInJpZ2h0T3BlcmFuZCI6IjIwMjctMDgtMjdUMDQ6MDc6MjhaIn0seyJsZWZ0T3BlcmFuZCI6InB1cnBvc2UiLCJvcGVyYXRvciI6ImVxIiwicmlnaHRPcGVyYW5kIjoiZXVkci1kdWUtZGlsaWdlbmNlIn1dLCJkdXR5IjpbeyJhY3Rpb24iOiJkZWxldGUiLCJjb25zdHJhaW50IjpbeyJsZWZ0T3BlcmFuZCI6ImVsYXBzZWRUaW1lIiwib3BlcmF0b3IiOiJlcSIsInJpZ2h0T3BlcmFuZCI6IlAzMEQifV19XX1dfSwic3RhdHVzIjp7InN0YXR1c19saXN0Ijp7InVyaSI6Imh0dHBzOi8vcGFuY2FrZS5kZXYubG9jYWwvZ3JhbnRzL3N0YXR1cy1saXN0IiwiaWR4Ijo3fX0sIl9zZCI6WyI5ZE5GNXRhTGtwU0dUc3VBNWx4b0liMGZyWDN6OGpRVGZ4dFYzUkpKd08wIiwiTWlwZmtHelpacjl5S1AtRE82Q1V5VTUtd0xiZnZncG1NS3k5NElPN0JiQSIsIllYdm5RQnphQ3BqZEtyXzdEUGhQajd3TU5pVWx5ZHUwLVE1azFkMVNSc2siXSwiX3NkX2FsZyI6InNoYS0yNTYifQ.J1WixhnzqU0xUGsEPz036Vg47-vMHsB-QaRpIiNPTmYV6uteDu_vYs3a3vjYxlkk6kjcPUyLj5Wf-eUtpcHJDg~WyIyempSQ2NEcDBRSFo4bWtHWHNfRmd3IiwgImZpZWxkcy4wIiwgIjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2E3ZDZiMWM1ZTlkOGY3YTZiNWM0ZDNlMmYxYTBiOWM4ZDdlNmYiXQ~WyJENU9JbkdaMEtxUnAwY3RsOGVtWExRIiwgImZpZWxkcy4xIiwgIjdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2EiXQ~WyJ5aXZTc01qWXd1T1dnYlhHcXM0T1JnIiwgImZpZWxkcy4yIiwgImIxYWQ0YzJmOGUzYTdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGMiXQ~
2 changes: 1 addition & 1 deletion app/tests/testkit/dev_keys/status_list.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
eJzrYEAFAAiQAIk
eJztwQEJAAAAAqCmN70dgdoAAAAAAAAAAO8GIPAAgQ
2 changes: 1 addition & 1 deletion app/tests/testkit/dev_keys/tampered.sdjwt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
eyJhbGciOiJFZERTQSIsImtpZCI6InBhbmNha2UtaXNzdWVyLTEiLCJ0eXAiOiJ2YytzZC1qd3QifQ.eyJpc3MiOiAiZGlkOndlYjpwYW5jYWtlLmFnc3RhY2sub3JnIiwgInN1YiI6ICIxZWQyMjk5MWE4NmNmNzEyM2M1N2RjZjVjNDM1ZjcyNGUxMzNiY2ZmZTJmMzA4ZDJlMDMzMTJhYjRiMmNkNjBkIiwgImlhdCI6IDE3ODQ2Mjk4NjUsICJleHAiOiAxNzg3MjIxODY1LCAianRpIjogIjAxS1kyM05CMEpXWE03NDlDMzNBWjJLQVJCIiwgInZjdCI6ICJhZ3N0YWNrLm9yZy9jcmVkZW50aWFscy9maWVsZC1hY2Nlc3MtZ3JhbnQvdjEiLCAiZ3JhbnRlZSI6ICJodWItYWNjdC1hdHRhY2tlciIsICJtYXNraW5nX2xldmVsIjogIkwxIiwgInB1cnBvc2UiOiAiZXVkci1kdWUtZGlsaWdlbmNlIiwgIm9kcmwiOiB7IkBjb250ZXh0IjogImh0dHA6Ly93d3cudzMub3JnL25zL29kcmwuanNvbmxkIiwgIkB0eXBlIjogIkFncmVlbWVudCIsICJ1aWQiOiAidXJuOmFnc3RhY2s6Z3JhbnQ6MDFLWTIzTkIwSldYTTc0OUMzM0FaMktBUkIiLCAicGVybWlzc2lvbiI6IFt7InRhcmdldCI6ICJ1cm46YWdzdGFjazpmaWVsZGxpc3Q6MWVkMjI5OTFhODZjZjcxMjNjNTdkY2Y1YzQzNWY3MjRlMTMzYmNmZmUyZjMwOGQyZTAzMzEyYWI0YjJjZDYwZCIsICJhY3Rpb24iOiAicmVhZCIsICJjb25zdHJhaW50IjogW3sibGVmdE9wZXJhbmQiOiAiZGF0ZVRpbWUiLCAib3BlcmF0b3IiOiAibHRlcSIsICJyaWdodE9wZXJhbmQiOiAiMjAyNi0wOC0yMFQxMDozMTowNVoifSwgeyJsZWZ0T3BlcmFuZCI6ICJwdXJwb3NlIiwgIm9wZXJhdG9yIjogImVxIiwgInJpZ2h0T3BlcmFuZCI6ICJldWRyLWR1ZS1kaWxpZ2VuY2UifV0sICJkdXR5IjogW3siYWN0aW9uIjogImRlbGV0ZSIsICJjb25zdHJhaW50IjogW3sibGVmdE9wZXJhbmQiOiAiZWxhcHNlZFRpbWUiLCAib3BlcmF0b3IiOiAiZXEiLCAicmlnaHRPcGVyYW5kIjogIlAzMEQifV19XX1dfSwgInN0YXR1cyI6IHsic3RhdHVzX2xpc3QiOiB7InVyaSI6ICJodHRwczovL3BhbmNha2UuZGV2LmxvY2FsL2dyYW50cy9zdGF0dXMtbGlzdCIsICJpZHgiOiAzfX0sICJfc2QiOiBbIlZOaDJ3bDFjeHRnYkRrbEI5dEhkSUdZVVJ2REQ0ZlFGcnFWaVIxZjd0ZjQiLCAiZTRUdjI5a1VCdWxEMHdRa0lBRHJlY3FqSkUxdTBfQ1BoUXpSS0x3b3JIcyIsICJudlJiWkxuQl9hc21PRTRYcUxSajhTMWZWR0ZUQ2pET1FwTnI2WWNXTmJzIl0sICJfc2RfYWxnIjogInNoYS0yNTYifQ.fly83-bWgMpwskdcifuzFw-93Msy0ZjKC0W-R3hHSyUvOkZbErTIAvEZM7A2FMu_tO5v-MOVRTAHVkL8uEsMBw~WyJPZGVQTDNqejJKcDdvYUVoMi1lVUZnIiwgImZpZWxkcy4wIiwgIjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2E3ZDZiMWM1ZTlkOGY3YTZiNWM0ZDNlMmYxYTBiOWM4ZDdlNmYiXQ~WyJ2MmgzWGQ3TVdaY05IYjljN25iRGJ3IiwgImZpZWxkcy4xIiwgIjdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2EiXQ~WyJCVEpLS2RfcS1TUFZPaE1lNUtnaWNRIiwgImZpZWxkcy4yIiwgImIxYWQ0YzJmOGUzYTdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGMiXQ~
eyJhbGciOiJFZERTQSIsImtpZCI6InBhbmNha2UtaXNzdWVyLTEiLCJ0eXAiOiJ2YytzZC1qd3QifQ.eyJpc3MiOiAiZGlkOndlYjpwYW5jYWtlLmFnc3RhY2sub3JnIiwgInN1YiI6ICIxZWQyMjk5MWE4NmNmNzEyM2M1N2RjZjVjNDM1ZjcyNGUxMzNiY2ZmZTJmMzA4ZDJlMDMzMTJhYjRiMmNkNjBkIiwgImlhdCI6IDE3ODc4MDM2NDgsICJleHAiOiAxODE5MzM5NjQ4LCAianRpIjogIjAxTTEwUERHSjA2WUIzWFZDV1BUTkdRMVlUIiwgInZjdCI6ICJhZ3N0YWNrLm9yZy9jcmVkZW50aWFscy9maWVsZC1hY2Nlc3MtZ3JhbnQvdjEiLCAiZ3JhbnRlZSI6ICJodWItYWNjdC1hdHRhY2tlciIsICJtYXNraW5nX2xldmVsIjogIkwxIiwgInB1cnBvc2UiOiAiZXVkci1kdWUtZGlsaWdlbmNlIiwgIm9kcmwiOiB7IkBjb250ZXh0IjogImh0dHA6Ly93d3cudzMub3JnL25zL29kcmwuanNvbmxkIiwgIkB0eXBlIjogIkFncmVlbWVudCIsICJ1aWQiOiAidXJuOmFnc3RhY2s6Z3JhbnQ6MDFNMTBQREdKMDZZQjNYVkNXUFROR1ExWVQiLCAicGVybWlzc2lvbiI6IFt7InRhcmdldCI6ICJ1cm46YWdzdGFjazpmaWVsZGxpc3Q6MWVkMjI5OTFhODZjZjcxMjNjNTdkY2Y1YzQzNWY3MjRlMTMzYmNmZmUyZjMwOGQyZTAzMzEyYWI0YjJjZDYwZCIsICJhY3Rpb24iOiAicmVhZCIsICJjb25zdHJhaW50IjogW3sibGVmdE9wZXJhbmQiOiAiZGF0ZVRpbWUiLCAib3BlcmF0b3IiOiAibHRlcSIsICJyaWdodE9wZXJhbmQiOiAiMjAyNy0wOC0yN1QwNDowNzoyOFoifSwgeyJsZWZ0T3BlcmFuZCI6ICJwdXJwb3NlIiwgIm9wZXJhdG9yIjogImVxIiwgInJpZ2h0T3BlcmFuZCI6ICJldWRyLWR1ZS1kaWxpZ2VuY2UifV0sICJkdXR5IjogW3siYWN0aW9uIjogImRlbGV0ZSIsICJjb25zdHJhaW50IjogW3sibGVmdE9wZXJhbmQiOiAiZWxhcHNlZFRpbWUiLCAib3BlcmF0b3IiOiAiZXEiLCAicmlnaHRPcGVyYW5kIjogIlAzMEQifV19XX1dfSwgInN0YXR1cyI6IHsic3RhdHVzX2xpc3QiOiB7InVyaSI6ICJodHRwczovL3BhbmNha2UuZGV2LmxvY2FsL2dyYW50cy9zdGF0dXMtbGlzdCIsICJpZHgiOiAzfX0sICJfc2QiOiBbIk14UC1uX0FkRElyQUxHT1FSVXU0bk1UZ1dDSEd0TTNLUEhzemtRclZzZTgiLCAibm9yQ2tmOFRkOUtYNjJzSkdkR18xV0NZYWZicjZoRTVHQnRhUHl2N3lNUSIsICJzQWZwUng5aHlWajgyOWV1cnFEQVJtY09xbmNoMmo1WmYyUTNyUUxlTlBVIl0sICJfc2RfYWxnIjogInNoYS0yNTYifQ.RlM5ARWoxRGigIM2vh6_qBnFMpnJQK-66xWnzQ7K35VLYq46eZGB3TX9KEOqnR8GztvkfQftL_GujJWHeDXMCw~WyJ6aVRodVBPcGd3d0tmWjBtQVVLdXdRIiwgImZpZWxkcy4wIiwgIjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2E3ZDZiMWM1ZTlkOGY3YTZiNWM0ZDNlMmYxYTBiOWM4ZDdlNmYiXQ~WyJTZEgwWVZtaF8zRUJMa1JvaUIyWmdnIiwgImZpZWxkcy4xIiwgIjdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGNiMWFkNGMyZjhlM2EiXQ~WyJuaG9pZFRNMlpUNno4SFlrMW5kc0NnIiwgImZpZWxkcy4yIiwgImIxYWQ0YzJmOGUzYTdkNmIxYzVlOWQ4ZjdhNmI1YzRkM2UyZjFhMGI5YzhkN2U2ZjNmMWE5ZjBmMzZlNDRjMGMiXQ~
Loading
Loading