|
7 | 7 | AgentCard, |
8 | 8 | AgentCapabilities, |
9 | 9 | AgentSkill, |
| 10 | + AgentCardSignature, |
10 | 11 | ) |
11 | 12 | from a2a.utils.signing import ( |
12 | 13 | canonicalize_agent_card, |
|
16 | 17 | from typing import Any |
17 | 18 | from jose.backends.base import Key |
18 | 19 | from jose.exceptions import JOSEError |
| 20 | +from jose.utils import base64url_encode |
19 | 21 |
|
20 | 22 | import pytest |
21 | 23 | from cryptography.hazmat.primitives import asymmetric |
@@ -86,6 +88,46 @@ def test_signer_and_verifier_symmetric(sample_agent_card: AgentCard): |
86 | 88 | verifier_wrong_key(signed_card) |
87 | 89 |
|
88 | 90 |
|
| 91 | +def test_signer_and_verifier_symmetric_multiple_signatures( |
| 92 | + sample_agent_card: AgentCard, |
| 93 | +): |
| 94 | + """Test the agent card signing and verification process with symmetric key encryption. |
| 95 | + This test adds a signatures to the AgentCard before signing.""" |
| 96 | + encoded_header = base64url_encode( |
| 97 | + b'{"alg": "HS256", "kid": "old_key"}' |
| 98 | + ).decode('utf-8') |
| 99 | + sample_agent_card.signatures = [ |
| 100 | + AgentCardSignature(protected=encoded_header, signature='old_signature') |
| 101 | + ] |
| 102 | + key = 'key12345' # Using a simple symmetric key for HS256 |
| 103 | + wrong_key = 'wrongkey' |
| 104 | + |
| 105 | + agent_card_signer = create_agent_card_signer( |
| 106 | + signing_key=key, alg='HS384', kid='key1' |
| 107 | + ) |
| 108 | + signed_card = agent_card_signer(sample_agent_card) |
| 109 | + |
| 110 | + assert signed_card.signatures is not None |
| 111 | + assert len(signed_card.signatures) == 2 |
| 112 | + signature = signed_card.signatures[1] |
| 113 | + assert signature.protected is not None |
| 114 | + assert signature.signature is not None |
| 115 | + |
| 116 | + # Verify the signature |
| 117 | + verifier = create_signature_verifier(create_key_provider(key)) |
| 118 | + try: |
| 119 | + verifier(signed_card) |
| 120 | + except JOSEError: |
| 121 | + pytest.fail('Signature verification failed with correct key') |
| 122 | + |
| 123 | + # Verify with wrong key |
| 124 | + verifier_wrong_key = create_signature_verifier( |
| 125 | + create_key_provider(wrong_key) |
| 126 | + ) |
| 127 | + with pytest.raises(JOSEError): |
| 128 | + verifier_wrong_key(signed_card) |
| 129 | + |
| 130 | + |
89 | 131 | def test_signer_and_verifier_asymmetric(sample_agent_card: AgentCard): |
90 | 132 | """Test the agent card signing and verification process with an asymmetric key encryption.""" |
91 | 133 | # Generate a dummy EC private key for ES256 |
|
0 commit comments