diff --git a/src/cryptojwt/jwe/jwe_ec.py b/src/cryptojwt/jwe/jwe_ec.py index 8c6c616..ff36ff2 100644 --- a/src/cryptojwt/jwe/jwe_ec.py +++ b/src/cryptojwt/jwe/jwe_ec.py @@ -138,7 +138,7 @@ def dec_setup(self, token, key=None, **kwargs): raise Exception("Ephemeral Public Key Missing in ECDH-ES Computation") epubkey = ECKey(**self.headers["epk"]) - apu = apv = "" + apu = apv = b"" if "apu" in self.headers: apu = b64d(self.headers["apu"].encode()) if "apv" in self.headers: diff --git a/tests/test_07_jwe.py b/tests/test_07_jwe.py index ac855d0..a83cf9d 100644 --- a/tests/test_07_jwe.py +++ b/tests/test_07_jwe.py @@ -443,6 +443,32 @@ def test_ecdh_encrypt_decrypt_direct_key(): assert msg == plain +def test_ecdh_encrypt_decrypt_direct_key_wo_apu_apv(): + # Alice starts of + jwenc = JWE_EC(plain, alg="ECDH-ES", enc="A128GCM") + + # Don't supply agreement party information. + cek, encrypted_key, iv, params, ret_epk = jwenc.enc_setup(plain, key=eck_bob, apu=b"", apv=b"") + # Assert they are not randomized + assert params["apv"] == b"" + assert params["apu"] == b"" + + # Delete agreement party information + del params["apv"] + del params["apu"] + + kwargs = {"params": params, "cek": cek, "iv": iv, "encrypted_key": encrypted_key} + jwt = jwenc.encrypt(**kwargs) + + # Bob decrypts + ret_jwe = factory(jwt, alg="ECDH-ES", enc="A128GCM") + jwdec = JWE_EC() + jwdec.dec_setup(ret_jwe.jwt, key=bob) + msg = jwdec.decrypt(ret_jwe.jwt) + + assert msg == plain + + def test_ecdh_encrypt_decrypt_keywrapped_key(): jwenc = JWE_EC(plain, alg="ECDH-ES+A128KW", enc="A128GCM") cek, encrypted_key, iv, params, ret_epk = jwenc.enc_setup(plain, key=eck_bob)