From 0435a3e3100b7f998bc1d24eafe6a8967da957b1 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Wed, 18 Mar 2015 13:06:30 -0400 Subject: Allow unknown key parameters Thanks to Jan Rusnacko for pointing out this flaw. Signed-off-by: Simo Sorce --- jwcrypto/jwk.py | 9 +++++++++ jwcrypto/tests.py | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/jwcrypto/jwk.py b/jwcrypto/jwk.py index 8583ff1..95a05a4 100644 --- a/jwcrypto/jwk.py +++ b/jwcrypto/jwk.py @@ -142,6 +142,14 @@ class JWK(object): while name in names: names.remove(name) + # Unknown key parameters are allowed + # Let's just store them out of the way + self._unknown = dict() + for name in names: + self._unknown[name] = kwargs[name] + while name in names: + names.remove(name) + if len(names) != 0: raise InvalidJWKValue('Unknown key parameters: %s' % names) @@ -152,6 +160,7 @@ class JWK(object): d = dict() d.update(self._params) d.update(self._key) + d.update(self._unknown) return json.dumps(d) @property diff --git a/jwcrypto/tests.py b/jwcrypto/tests.py index e17a295..888ad39 100644 --- a/jwcrypto/tests.py +++ b/jwcrypto/tests.py @@ -634,3 +634,11 @@ class TestJWE(unittest.TestCase): def test_A5(self): E = jwe.JWE() E.deserialize(E_A5_ex) + + +class ConformanceTests(unittest.TestCase): + + def test_unknown_key_params(self): + key = jwk.JWK(kty='oct', k='secret', unknown='mystery') + # pylint: disable=protected-access + self.assertEqual('mystery', key._unknown['unknown']) -- cgit