diff --git a/jwcrypto/jwk.py b/jwcrypto/jwk.py index 5637820..8572137 100644 --- a/jwcrypto/jwk.py +++ b/jwcrypto/jwk.py @@ -1504,7 +1504,10 @@ def import_keyset(self, keyset): for k, v in jwkset.items(): if k == 'keys': for jwk in v: - self['keys'].add(JWK(**jwk)) + try: + self['keys'].add(JWK(**jwk)) + except InvalidJWKType: + pass else: self[k] = v except Exception as e: # pylint: disable=broad-except diff --git a/jwcrypto/tests.py b/jwcrypto/tests.py index 58f986a..d9542fb 100644 --- a/jwcrypto/tests.py +++ b/jwcrypto/tests.py @@ -572,12 +572,26 @@ def test_import_keyset_invalid(self): '{}', '{"keys": 1}', '{"keys": [1]}', - '{"keys": [{"kty": "invalid"}]}' ] for inp in invalid_inputs: with self.assertRaises(jwk.InvalidJWKValue): ks.import_keyset(inp) + def test_import_keyset_skips_unknown_kty(self): + keyset = '{"keys": [{"kty": "unknown"}, %s]}' % json_encode( + PublicKeys['keys'][0]) + ks = jwk.JWKSet.from_json(keyset) + self.assertEqual(len(ks['keys']), 1) + + def test_import_keyset_unknown_kty_then_ec(self): + ec_key = PublicKeys['keys'][0] + keyset = '{"keys": [{"kty": "future"}, %s]}' % json_encode(ec_key) + ks = jwk.JWKSet.from_json(keyset) + self.assertEqual(len(ks['keys']), 1) + imported = list(ks['keys'])[0] + self.assertEqual(imported['kty'], 'EC') + self.assertEqual(imported['kid'], ec_key['kid']) + def test_thumbprint(self): for i in range(0, len(PublicKeys['keys'])): k = jwk.JWK(**PublicKeys['keys'][i])