Skip to content

Commit cd6ea71

Browse files
committed
test: add coverage for verify kid fallback and signer_verkey check
- test_verify_uses_kid_from_jwk_when_header_has_no_kid: cover jwk.kid fallback - test_verify_returns_false_when_signer_verkey_does_not_match: cover signer_verkey rejection - Apply ruff format Signed-off-by: Patrick St-Louis <patrick.st-louis@opsecid.ca> Made-with: Cursor
1 parent 1c5933c commit cd6ea71

1 file changed

Lines changed: 35 additions & 0 deletions

File tree

acapy_agent/messaging/decorators/tests/test_attach_decorator.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import json
22
from copy import deepcopy
33
from datetime import datetime, timezone
4+
from types import SimpleNamespace
45
from unittest import TestCase
56

67
import pytest
@@ -567,3 +568,37 @@ async def test_verify_uses_kid_from_header_when_jwk_has_no_kid(self, wallet, see
567568
)
568569
assert await data.verify(wallet)
569570
assert await data.verify(wallet, signer_verkey=verkey_b58)
571+
572+
@pytest.mark.asyncio
573+
async def test_verify_uses_kid_from_jwk_when_header_has_no_kid(self, wallet, seed):
574+
"""Verify uses jwk.kid when header has no kid (fallback path)."""
575+
deco = AttachDecorator.data_base64(
576+
mapping=INDY_CRED,
577+
ident=IDENT,
578+
description=DESCRIPTION,
579+
)
580+
did_info = await wallet.create_local_did(SOV, ED25519, seed[0])
581+
await deco.data.sign(did_info.verkey, wallet)
582+
# Force fallback: header has no kid, so verify must use jwk.kid from protected
583+
deco.data.jws_.header = SimpleNamespace(kid=None)
584+
assert await deco.data.verify(wallet)
585+
assert await deco.data.verify(wallet, signer_verkey=did_info.verkey)
586+
587+
@pytest.mark.asyncio
588+
async def test_verify_returns_false_when_signer_verkey_does_not_match(
589+
self, wallet, seed
590+
):
591+
"""Verify returns False when signer_verkey is not the signing key."""
592+
deco = AttachDecorator.data_base64(
593+
mapping=INDY_CRED,
594+
ident=IDENT,
595+
description=DESCRIPTION,
596+
)
597+
did_infos = [await wallet.create_local_did(SOV, ED25519, seed[i]) for i in [0, 1]]
598+
await deco.data.sign(did_infos[0].verkey, wallet)
599+
# Sign with key 0; require key 1 -> should fail
600+
assert not await deco.data.verify(wallet, signer_verkey=did_infos[1].verkey)
601+
# No signer_verkey constraint -> should pass
602+
assert await deco.data.verify(wallet)
603+
# Correct signer_verkey -> should pass
604+
assert await deco.data.verify(wallet, signer_verkey=did_infos[0].verkey)

0 commit comments

Comments
 (0)