summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2015-03-18 13:06:30 -0400
committerSimo Sorce <simo@redhat.com>2015-03-18 13:09:16 -0400
commit0435a3e3100b7f998bc1d24eafe6a8967da957b1 (patch)
treeaa07a451705e88e313adf41ec8e732d43578dc16
parent7a131df18b4cbaa78929df1a1419f25898489815 (diff)
downloadjwcrypto-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.py9
-rw-r--r--jwcrypto/tests.py8
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'])