diff options
Diffstat (limited to 'custodia/message')
-rw-r--r-- | custodia/message/common.py | 1 | ||||
-rw-r--r-- | custodia/message/kem.py | 14 | ||||
-rw-r--r-- | custodia/message/simple.py | 5 |
3 files changed, 15 insertions, 5 deletions
diff --git a/custodia/message/common.py b/custodia/message/common.py index d774e3c..bbcfb2b 100644 --- a/custodia/message/common.py +++ b/custodia/message/common.py @@ -42,6 +42,7 @@ class MessageHandler(object): def __init__(self, request): self.req = request + self.name = None self.payload = None def parse(self, msg, name): diff --git a/custodia/message/kem.py b/custodia/message/kem.py index 48b756b..add1c72 100644 --- a/custodia/message/kem.py +++ b/custodia/message/kem.py @@ -215,11 +215,9 @@ class KEMClient(object): self.server_keys[KEY_USAGE_ENC], encalg) def parse_reply(self, name, message): - jwe = JWT(jwt=message, - key=self.client_keys[KEY_USAGE_ENC]) - jws = JWT(jwt=jwe.claims, - key=self.server_keys[KEY_USAGE_SIG]) - claims = json_decode(jws.claims) + claims = decode_enc_kem(message, + self.client_keys[KEY_USAGE_ENC], + self.server_keys[KEY_USAGE_SIG]) check_kem_claims(claims, name) return claims['value'] @@ -242,6 +240,12 @@ def make_enc_kem(name, value, sig_key, alg, enc_key, enc): return jwe.serialize(compact=True) +def decode_enc_kem(message, enc_key, sig_key): + jwe = JWT(jwt=message, key=enc_key) + jws = JWT(jwt=jwe.claims, key=sig_key) + return json_decode(jws.claims) + + # unit tests test_keys = ({ "kty": "RSA", diff --git a/custodia/message/simple.py b/custodia/message/simple.py index 7186d12..6482c53 100644 --- a/custodia/message/simple.py +++ b/custodia/message/simple.py @@ -28,8 +28,13 @@ class SimpleKey(MessageHandler): if not isinstance(msg, string_types): raise InvalidMessage("The 'value' attribute is not a string") + self.name = name self.payload = msg def reply(self, output): + if self.name.endswith('/'): + # directory listings are pass-through with simple messages + return output + return json.dumps({'type': 'simple', 'value': output}, separators=(',', ':')) |