diff options
author | Simo Sorce <simo@redhat.com> | 2015-03-18 13:06:30 -0400 |
---|---|---|
committer | Simo Sorce <simo@redhat.com> | 2015-03-18 13:09:16 -0400 |
commit | 0435a3e3100b7f998bc1d24eafe6a8967da957b1 (patch) | |
tree | aa07a451705e88e313adf41ec8e732d43578dc16 | |
parent | 7a131df18b4cbaa78929df1a1419f25898489815 (diff) | |
download | jwcrypto-0435a3e3100b7f998bc1d24eafe6a8967da957b1.tar.gz jwcrypto-0435a3e3100b7f998bc1d24eafe6a8967da957b1.tar.xz jwcrypto-0435a3e3100b7f998bc1d24eafe6a8967da957b1.zip |
Allow unknown key parameters
Thanks to Jan Rusnacko for pointing out this flaw.
Signed-off-by: Simo Sorce <simo@redhat.com>
-rw-r--r-- | jwcrypto/jwk.py | 9 | ||||
-rw-r--r-- | jwcrypto/tests.py | 8 |
2 files changed, 17 insertions, 0 deletions
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']) |