Skip to content

Commit e218ee3

Browse files
committed
fix: wrong type of kid in jwe for v1
Signed-off-by: Daniel Bluhm <[email protected]>
1 parent 892b614 commit e218ee3

File tree

3 files changed

+12
-5
lines changed

3 files changed

+12
-5
lines changed

didcomm_messaging/crypto/backend/askar.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,10 @@ def kid(self) -> str:
130130
"""Get the key ID."""
131131
return self._kid
132132

133+
def as_public_key(self) -> AskarKey:
134+
"""Return AskarKey representation."""
135+
return AskarKey(self.key, self.kid)
136+
133137

134138
class AskarCryptoService(CryptoService[AskarKey, AskarSecretKey]):
135139
"""CryptoService backend implemented using Askar."""
@@ -413,4 +417,4 @@ async def get_secret_by_kid(self, kid: str) -> Optional[AskarSecretKey]:
413417
return None
414418

415419
# cached_property doesn't play nice with pyright
416-
return AskarKey(key_entry.key, kid) # type: ignore
420+
return AskarSecretKey(key_entry.key, kid) # type: ignore

didcomm_messaging/v1/crypto/askar.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,14 @@ async def pack_message(
5858
# avoid converting to bytes object: this way the only copy is zeroed afterward
5959
# tell type checking it's bytes to make it happy
6060
cek_b = cast(bytes, key_get_secret_bytes(cek._handle))
61-
sender_vk = from_key.kid if from_key else None
61+
sender_vk = (
62+
self.public_key_to_v1_kid(from_key.as_public_key()) if from_key else None
63+
)
6264
sender_xk = from_key.key.convert_key(KeyAlg.X25519) if from_key else None
6365

6466
for target_vk in to_verkeys:
6567
target_xk = target_vk.key.convert_key(KeyAlg.X25519)
68+
target_vk_kid = self.public_key_to_v1_kid(target_vk)
6669
if sender_vk and sender_xk:
6770
enc_sender = crypto_box.crypto_box_seal(target_xk, sender_vk)
6871
nonce = crypto_box.random_nonce()
@@ -72,7 +75,7 @@ async def pack_message(
7275
encrypted_key=enc_cek,
7376
header=OrderedDict(
7477
[
75-
("kid", target_vk.kid),
78+
("kid", target_vk_kid),
7679
("sender", self.b64url.encode(enc_sender)),
7780
("iv", self.b64url.encode(nonce)),
7881
]
@@ -82,7 +85,7 @@ async def pack_message(
8285
else:
8386
enc_cek = crypto_box.crypto_box_seal(target_xk, cek_b)
8487
builder.add_recipient(
85-
JweRecipient(encrypted_key=enc_cek, header={"kid": target_vk.kid})
88+
JweRecipient(encrypted_key=enc_cek, header={"kid": target_vk_kid})
8689
)
8790
builder.set_protected(
8891
OrderedDict(

tests/v1/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ async def bob_key(store: Store):
8181
kid = base58.b58encode(key.get_public_bytes()).decode()
8282
async with store.session() as session:
8383
await session.insert_key(kid, key)
84-
return AskarKey(key, kid)
84+
yield AskarKey(key, kid)
8585

8686

8787
@pytest.fixture

0 commit comments

Comments
 (0)