1010from didcomm_messaging .crypto .jwe import JweBuilder , JweEnvelope , JweRecipient
1111from didcomm_messaging .multiformats import multibase , multicodec
1212
13- from .base import V1CryptoService , V1UnpackResult , RecipData
13+ from .base import V1CryptoService , V1CryptoUnpackResult , RecipData
1414
1515try :
1616 import nacl .bindings
@@ -60,7 +60,7 @@ def key(self) -> str:
6060 @property
6161 def kid (self ) -> str :
6262 """Get the key ID."""
63- return self . key
63+ raise NotImplementedError ()
6464
6565 @property
6666 def multikey (self ) -> str :
@@ -69,22 +69,21 @@ def multikey(self) -> str:
6969 multicodec .wrap ("ed25519-pub" , base58 .b58decode (self .key )), "base58btc"
7070 )
7171
72- @property
73- def key_bytes (self ) -> bytes :
74- """Get the bytes of the key."""
75- return self .value
76-
7772
7873class NaclV1CryptoService (V1CryptoService [EdPublicKey , KeyPair ]):
7974 """V1 crypto service using pynacl."""
8075
81- def kid_to_public_key (self , kid : str ):
76+ def v1_kid_to_public_key (self , kid : str ):
8277 """Get a public key from a kid.
8378
8479 In DIDComm v1, kids are the base58 encoded keys.
8580 """
8681 return EdPublicKey (base58 .b58decode (kid ))
8782
83+ def public_key_to_v1_kid (self , key : EdPublicKey ) -> str :
84+ """Convert a public key into a v1 kid representation."""
85+ return base58 .b58encode (key .value ).decode ()
86+
8887 @classmethod
8988 def verification_method_to_public_key (cls , vm : VerificationMethod ) -> EdPublicKey :
9089 """Convert a verification method to a public key."""
@@ -120,19 +119,20 @@ async def pack_message(
120119 encrypted_key = enc_cek ,
121120 header = OrderedDict (
122121 [
123- ("kid" , target_vk . kid ),
122+ ("kid" , self . public_key_to_v1_kid ( target_vk ) ),
124123 ("sender" , self .b64url .encode (enc_sender )),
125124 ("iv" , self .b64url .encode (nonce )),
126125 ]
127126 ),
128127 )
129128 )
130129 else :
131- enc_sender = None
132- nonce = None
133130 enc_cek = nacl .bindings .crypto_box_seal (cek , target_xk )
134131 builder .add_recipient (
135- JweRecipient (encrypted_key = enc_cek , header = {"kid" : target_vk .kid })
132+ JweRecipient (
133+ encrypted_key = enc_cek ,
134+ header = {"kid" : self .public_key_to_v1_kid (target_vk )},
135+ )
136136 )
137137
138138 builder .set_protected (
@@ -180,15 +180,15 @@ def _extract_payload_key(self, recip_key: KeyPair, recip_data: RecipData):
180180
181181 async def unpack_message (
182182 self , wrapper : JweEnvelope , recip_key : KeyPair , recip_data : RecipData
183- ) -> V1UnpackResult :
183+ ) -> V1CryptoUnpackResult :
184184 """Decode a message using DIDCvomm v1 'unpack' algorithm."""
185185 cek , sender_vk = self ._extract_payload_key (recip_key , recip_data )
186186
187187 payload_bin = wrapper .ciphertext + wrapper .tag
188188 message = nacl .bindings .crypto_aead_chacha20poly1305_ietf_decrypt (
189189 payload_bin , wrapper .protected_b64 , wrapper .iv , cek
190190 )
191- return V1UnpackResult (message , recip_key .kid , sender_vk )
191+ return V1CryptoUnpackResult (message , recip_key .kid , sender_vk )
192192
193193
194194class InMemSecretsManager (SecretsManager [KeyPair ]):
@@ -206,7 +206,7 @@ def _create_keypair(self, seed: Optional[bytes] = None) -> Tuple[bytes, bytes]:
206206 """Create a keypair."""
207207 if seed :
208208 if not isinstance (seed , bytes ):
209- raise ValueError ("Seed value is not a string or bytes" )
209+ raise ValueError ("Seed value is not bytes" )
210210 if len (seed ) != 32 :
211211 raise ValueError ("Seed value must be 32 bytes in length" )
212212 else :
0 commit comments