|
1 | 1 | import json |
2 | 2 | from copy import deepcopy |
3 | 3 | from datetime import datetime, timezone |
| 4 | +from types import SimpleNamespace |
4 | 5 | from unittest import TestCase |
5 | 6 |
|
6 | 7 | import pytest |
@@ -567,3 +568,37 @@ async def test_verify_uses_kid_from_header_when_jwk_has_no_kid(self, wallet, see |
567 | 568 | ) |
568 | 569 | assert await data.verify(wallet) |
569 | 570 | 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