From f1b4845665e42c1d74cda847d3e701e428e63a79 Mon Sep 17 00:00:00 2001 From: David Halls Date: Mon, 24 Aug 2020 22:36:05 +0100 Subject: [PATCH] Support ES256K and EdDSA --- README.md | 2 +- bench/generate_token_bench.py | 4 +- bench/load_key_bench.py | 4 +- bench/verify_token_bench.py | 6 +- coverage/coverage.xml | 95 ++--- coverage/html/index.html | 10 +- coverage/html/python_jwt___init___py.html | 356 +++++++++--------- coverage/html/status.json | 2 +- docs/_build/doctrees/environment.pickle | Bin 11037 -> 10213 bytes docs/_build/doctrees/index.doctree | Bin 70872 -> 59591 bytes docs/_build/html/.buildinfo | 2 +- .../html/_static/documentation_options.js | 2 +- docs/_build/html/genindex.html | 6 +- docs/_build/html/index.html | 6 +- docs/_build/html/objects.inv | 2 +- docs/_build/html/py-modindex.html | 6 +- docs/_build/html/search.html | 6 +- docs/_build/html/searchindex.js | 2 +- docs/conf.py | 4 +- python_jwt/__init__.py | 1 + requirements.txt | 2 +- setup.py | 4 +- test/alg_none_verification_vows.py | 4 +- test/fixtures.py | 146 +++++-- test/jose_interop_vows.py | 15 +- test/pem_as_hmac_key_vows.py | 6 +- 26 files changed, 396 insertions(+), 297 deletions(-) diff --git a/README.md b/README.md index e16ff3d..beffb3a 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Module for generating and verifying [JSON Web Tokens](http://self-issued.info/do - **Note:** From version 2.0.1 the namespace has changed from `jwt` to `python_jwt`, in order to avoid conflict with [PyJWT](https://github.com/jpadilla/pyjwt). - **Note:** Versions 1.0.0 and later fix [a vulnerability](https://www.timmclean.net/2015/02/25/jwt-alg-none.html) in JSON Web Token verification so please upgrade if you're using this functionality. The API has changed so you will need to update your application. [verify_jwt](http://rawgit.davedoesdev.com/davedoesdev/python-jwt/master/docs/_build/html/index.html#python_jwt.verify_jwt) now requires you to specify which signature algorithms are allowed. - Uses [jwcrypto](https://jwcrypto.readthedocs.io) to do the heavy lifting. -- Supports [__RS256__, __RS384__, __RS512__](http://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-14#section-3.3), [__PS256__, __PS384__, __PS512__](http://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-14#section-3.5), [__HS256__, __HS384__, __HS512__](http://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-14#section-3.2) and [__none__](http://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-14#section-3.6) signature algorithms. +- Supports [__RS256__, __RS384__, __RS512__](https://tools.ietf.org/html/rfc7518#section-3.3), [__PS256__, __PS384__, __PS512__](https://tools.ietf.org/html/rfc7518#section-3.5), [__HS256__, __HS384__, __HS512__](https://tools.ietf.org/html/rfc7518#section-3.2), [__ES256__, __ES384__, __ES512__](https://tools.ietf.org/html/rfc7518#section-3.4), [__ES256K__](https://tools.ietf.org/html/draft-ietf-cose-webauthn-algorithms-05#section-3.2), [__EdDSA__](https://tools.ietf.org/html/rfc8037#section-3.1) and [__none__](http://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-14#section-3.6) signature algorithms. - Unit tests, including tests for interoperability with [jose](https://github.com/panva/jose). - Supports Python 2,7 and 3.6+. **Note:** [generate_jwt](http://rawgit.davedoesdev.com/davedoesdev/python-jwt/master/docs/_build/html/index.html#python_jwt.generate_jwt) returns the token as a Unicode string, even on Python 2.7. diff --git a/bench/generate_token_bench.py b/bench/generate_token_bench.py index 1341df4..b14f901 100755 --- a/bench/generate_token_bench.py +++ b/bench/generate_token_bench.py @@ -5,7 +5,7 @@ # pylint: disable=wrong-import-position,wrong-import-order from datetime import timedelta from bench.unitbench import Benchmark -from test.fixtures import payload, priv_keys, priv_key, algs +from test.fixtures import payload, priv_keys, algs from bench.reporter import Reporter import python_jwt as jwt @@ -25,7 +25,7 @@ def make_bench_generate_token(alg): """ Return function which will generate token for particular algorithm """ def f(_): """ Generate token """ - privk = priv_keys[alg].get('default', priv_key) + privk = priv_keys[alg]['python-jwt'] jwt.generate_jwt(payload, privk, alg, timedelta(seconds=5)) return f diff --git a/bench/load_key_bench.py b/bench/load_key_bench.py index 8fc66c2..3c7bb09 100755 --- a/bench/load_key_bench.py +++ b/bench/load_key_bench.py @@ -4,7 +4,7 @@ # pylint: disable=wrong-import-position,wrong-import-order from bench.unitbench import Benchmark -from test.fixtures import priv_pem, to_bytes_2and3 +from test.fixtures import rsa_priv_pem, to_bytes_2and3 from bench.reporter import Reporter from jwcrypto.jwk import JWK @@ -21,7 +21,7 @@ def repeats(self): def bench_RSA(self): """ Import key """ - JWK.from_pem(to_bytes_2and3(priv_pem)) + JWK.from_pem(to_bytes_2and3(rsa_priv_pem)) if __name__ == "__main__": #pylint: disable=W0402 diff --git a/bench/verify_token_bench.py b/bench/verify_token_bench.py index b8b4350..6e0a34b 100755 --- a/bench/verify_token_bench.py +++ b/bench/verify_token_bench.py @@ -5,7 +5,7 @@ # pylint: disable=wrong-import-position,wrong-import-order from datetime import timedelta from bench.unitbench import Benchmark -from test.fixtures import payload, priv_keys, priv_key, pub_keys, pub_key, algs +from test.fixtures import payload, priv_keys, pub_keys, algs from bench.reporter import Reporter import python_jwt as jwt @@ -23,11 +23,11 @@ def repeats(self): #pylint: disable=W0621 def make_bench_verify_token(alg): """ Return function which will generate token for particular algorithm """ - privk = priv_keys[alg].get('default', priv_key) + privk = priv_keys[alg]['python-jwt'] token = jwt.generate_jwt(payload, privk, alg, timedelta(days=1)) def f(_): """ Verify token """ - pubk = pub_keys[alg].get('default', pub_key) + pubk = pub_keys[alg]['python-jwt'] jwt.verify_jwt(token, pubk, [alg]) return f diff --git a/coverage/coverage.xml b/coverage/coverage.xml index 5b3666f..7d04680 100644 --- a/coverage/coverage.xml +++ b/coverage/coverage.xml @@ -1,5 +1,5 @@ - + @@ -40,64 +40,65 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - + + + + + - - - - + + + + - - + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - + + + + + + + diff --git a/coverage/html/index.html b/coverage/html/index.html index 7b0502b..f981f27 100644 --- a/coverage/html/index.html +++ b/coverage/html/index.html @@ -71,28 +71,28 @@

Coverage report: Total - 87 + 88 0 0 56 0 - 100% + 100% python_jwt/__init__.py - 87 + 88 0 0 56 0 - 100% + 100% @@ -107,7 +107,7 @@

Coverage report:

coverage.py v4.5.4, - created at 2019-11-14 09:26 + created at 2020-08-24 22:34

diff --git a/coverage/html/python_jwt___init___py.html b/coverage/html/python_jwt___init___py.html index 2a69866..192cab4 100644 --- a/coverage/html/python_jwt___init___py.html +++ b/coverage/html/python_jwt___init___py.html @@ -30,8 +30,8 @@

Coverage for python_jwt/__init__.py : Show keyboard shortcuts

- 87 statements   - 87 run + 88 statements   + 88 run 0 missing 0 excluded @@ -159,17 +159,17 @@

88

89

90

-

91

-

92

-

93

+

91

+

92

+

93

94

95

96

97

98

99

-

100

-

101

+

100

+

101

102

103

104

@@ -209,76 +209,76 @@

138

139

140

-

141

+

141

142

-

143

-

144

-

145

-

146

-

147

-

148

-

149

-

150

-

151

-

152

+

143

+

144

+

145

+

146

+

147

+

148

+

149

+

150

+

151

+

152

153

154

155

156

-

157

-

158

+

157

+

158

159

160

161

162

163

-

164

-

165

+

164

+

165

166

167

168

169

170

-

171

-

172

-

173

-

174

+

171

+

172

+

173

+

174

175

-

176

-

177

+

176

+

177

178

179

180

181

182

-

183

-

184

+

183

+

184

185

186

187

188

189

-

190

-

191

+

190

+

191

192

193

194

195

196

-

197

-

198

+

197

+

198

199

200

201

202

203

-

204

-

205

-

206

+

204

+

205

+

206

207

208

-

209

-

210

+

209

+

210

211

212

213

@@ -289,10 +289,11 @@

218

219

220

-

221

+

221

222

223

224

+

225

@@ -384,142 +385,143 @@

signature = '' 

else: 

token = JWS(json_encode(claims)) 

-

token.add_signature(priv_key, protected=header) 

-

signature = json_decode(token.serialize())['signature'] 

-

 

-

return u'%s.%s.%s' % ( 

-

base64url_encode(json_encode(header)), 

-

base64url_encode(json_encode(claims)), 

-

signature 

-

) 

-

 

-

#pylint: disable=R0912,too-many-locals 

-

 

-

def verify_jwt(jwt, 

-

pub_key=None, 

-

allowed_algs=None, 

-

iat_skew=timedelta(), 

-

checks_optional=False, 

-

ignore_not_implemented=False): 

-

""" 

-

Verify a JSON Web Token. 

-

 

-

:param jwt: The JSON Web Token to verify. 

-

:type jwt: str or unicode 

-

 

-

:param pub_key: The public key to be used to verify the token. Note: if you pass ``None`` and **allowed_algs** contains ``none`` then the token's signature will not be verified. 

-

:type pub_key: `jwcrypto.jwk.JWK <https://jwcrypto.readthedocs.io/en/latest/jwk.html>`_ 

-

 

-

:param allowed_algs: Algorithms expected to be used to sign the token. The ``in`` operator is used to test membership. 

-

:type allowed_algs: list or NoneType (meaning an empty list) 

-

 

-

:param iat_skew: The amount of leeway to allow between the issuer's clock and the verifier's clock when verifiying that the token was generated in the past. Defaults to no leeway. 

-

:type iat_skew: datetime.timedelta 

-

 

-

:param checks_optional: If ``False``, then the token must contain the **typ** header property and the **iat**, **nbf** and **exp** claim properties. 

-

:type checks_optional: bool 

-

 

-

:param ignore_not_implemented: If ``False``, then the token must *not* contain the **jku**, **jwk**, **x5u**, **x5c** or **x5t** header properties. 

-

:type ignore_not_implemented: bool 

-

 

-

:rtype: tuple 

-

:returns: ``(header, claims)`` if the token was verified successfully. The token must pass the following tests: 

-

 

-

- Its header must contain a property **alg** with a value in **allowed_algs**. 

-

- Its signature must verify using **pub_key** (unless its algorithm is ``none`` and ``none`` is in **allowed_algs**). 

-

- If the corresponding property is present or **checks_optional** is ``False``: 

-

 

-

- Its header must contain a property **typ** with the value ``JWT``. 

-

- Its claims must contain a property **iat** which represents a date in the past (taking into account :obj:`iat_skew`). 

-

- Its claims must contain a property **nbf** which represents a date in the past. 

-

- Its claims must contain a property **exp** which represents a date in the future. 

-

 

-

:raises: If the token failed to verify. 

-

""" 

-

if allowed_algs is None: 

-

allowed_algs = [] 

-

 

-

if not isinstance(allowed_algs, list): 

-

# jwcrypto only supports list of allowed algorithms 

-

raise _JWTError('allowed_algs must be a list') 

-

 

-

header, claims, _ = jwt.split('.') 

-

 

-

parsed_header = json_decode(base64url_decode(header)) 

-

 

-

alg = parsed_header.get('alg') 

-

if alg is None: 

-

raise _JWTError('alg header not present') 

-

if alg not in allowed_algs: 

-

raise _JWTError('algorithm not allowed: ' + alg) 

-

 

-

if not ignore_not_implemented: 

-

for k in parsed_header: 

-

if k not in JWSHeaderRegistry: 

-

raise _JWTError('unknown header: ' + k) 

-

if not JWSHeaderRegistry[k].supported: 

-

raise _JWTError('header not implemented: ' + k) 

-

 

-

if pub_key: 

-

token = JWS() 

-

token.allowed_algs = allowed_algs 

-

token.deserialize(jwt, pub_key) 

-

elif 'none' not in allowed_algs: 

-

raise _JWTError('no key but none alg not allowed') 

-

 

-

parsed_claims = json_decode(base64url_decode(claims)) 

-

 

-

utcnow = datetime.utcnow() 

-

now = timegm(utcnow.utctimetuple()) 

-

 

-

typ = parsed_header.get('typ') 

-

if typ is None: 

-

if not checks_optional: 

-

raise _JWTError('typ header not present') 

-

elif typ != 'JWT': 

-

raise _JWTError('typ header is not JWT') 

-

 

-

iat = parsed_claims.get('iat') 

-

if iat is None: 

-

if not checks_optional: 

-

raise _JWTError('iat claim not present') 

-

elif iat > timegm((utcnow + iat_skew).utctimetuple()): 

-

raise _JWTError('issued in the future') 

-

 

-

nbf = parsed_claims.get('nbf') 

-

if nbf is None: 

-

if not checks_optional: 

-

raise _JWTError('nbf claim not present') 

-

elif nbf > now: 

-

raise _JWTError('not yet valid') 

-

 

-

exp = parsed_claims.get('exp') 

-

if exp is None: 

-

if not checks_optional: 

-

raise _JWTError('exp claim not present') 

-

elif exp <= now: 

-

raise _JWTError('expired') 

-

 

-

return parsed_header, parsed_claims 

-

 

-

#pylint: enable=R0912 

-

 

-

def process_jwt(jwt): 

-

""" 

-

Process a JSON Web Token without verifying it. 

-

 

-

Call this before :func:`verify_jwt` if you need access to the header or claims in the token before verifying it. For example, the claims might identify the issuer such that you can retrieve the appropriate public key. 

-

 

-

:param jwt: The JSON Web Token to verify. 

-

:type jwt: str or unicode 

-

 

-

:rtype: tuple 

-

:returns: ``(header, claims)`` 

-

""" 

-

header, claims, _ = jwt.split('.') 

-

parsed_header = json_decode(base64url_decode(header)) 

-

parsed_claims = json_decode(base64url_decode(claims)) 

-

return parsed_header, parsed_claims 

+

token.allowed_algs = [header['alg']] 

+

token.add_signature(priv_key, protected=header) 

+

signature = json_decode(token.serialize())['signature'] 

+

 

+

return u'%s.%s.%s' % ( 

+

base64url_encode(json_encode(header)), 

+

base64url_encode(json_encode(claims)), 

+

signature 

+

) 

+

 

+

#pylint: disable=R0912,too-many-locals 

+

 

+

def verify_jwt(jwt, 

+

pub_key=None, 

+

allowed_algs=None, 

+

iat_skew=timedelta(), 

+

checks_optional=False, 

+

ignore_not_implemented=False): 

+

""" 

+

Verify a JSON Web Token. 

+

 

+

:param jwt: The JSON Web Token to verify. 

+

:type jwt: str or unicode 

+

 

+

:param pub_key: The public key to be used to verify the token. Note: if you pass ``None`` and **allowed_algs** contains ``none`` then the token's signature will not be verified. 

+

:type pub_key: `jwcrypto.jwk.JWK <https://jwcrypto.readthedocs.io/en/latest/jwk.html>`_ 

+

 

+

:param allowed_algs: Algorithms expected to be used to sign the token. The ``in`` operator is used to test membership. 

+

:type allowed_algs: list or NoneType (meaning an empty list) 

+

 

+

:param iat_skew: The amount of leeway to allow between the issuer's clock and the verifier's clock when verifiying that the token was generated in the past. Defaults to no leeway. 

+

:type iat_skew: datetime.timedelta 

+

 

+

:param checks_optional: If ``False``, then the token must contain the **typ** header property and the **iat**, **nbf** and **exp** claim properties. 

+

:type checks_optional: bool 

+

 

+

:param ignore_not_implemented: If ``False``, then the token must *not* contain the **jku**, **jwk**, **x5u**, **x5c** or **x5t** header properties. 

+

:type ignore_not_implemented: bool 

+

 

+

:rtype: tuple 

+

:returns: ``(header, claims)`` if the token was verified successfully. The token must pass the following tests: 

+

 

+

- Its header must contain a property **alg** with a value in **allowed_algs**. 

+

- Its signature must verify using **pub_key** (unless its algorithm is ``none`` and ``none`` is in **allowed_algs**). 

+

- If the corresponding property is present or **checks_optional** is ``False``: 

+

 

+

- Its header must contain a property **typ** with the value ``JWT``. 

+

- Its claims must contain a property **iat** which represents a date in the past (taking into account :obj:`iat_skew`). 

+

- Its claims must contain a property **nbf** which represents a date in the past. 

+

- Its claims must contain a property **exp** which represents a date in the future. 

+

 

+

:raises: If the token failed to verify. 

+

""" 

+

if allowed_algs is None: 

+

allowed_algs = [] 

+

 

+

if not isinstance(allowed_algs, list): 

+

# jwcrypto only supports list of allowed algorithms 

+

raise _JWTError('allowed_algs must be a list') 

+

 

+

header, claims, _ = jwt.split('.') 

+

 

+

parsed_header = json_decode(base64url_decode(header)) 

+

 

+

alg = parsed_header.get('alg') 

+

if alg is None: 

+

raise _JWTError('alg header not present') 

+

if alg not in allowed_algs: 

+

raise _JWTError('algorithm not allowed: ' + alg) 

+

 

+

if not ignore_not_implemented: 

+

for k in parsed_header: 

+

if k not in JWSHeaderRegistry: 

+

raise _JWTError('unknown header: ' + k) 

+

if not JWSHeaderRegistry[k].supported: 

+

raise _JWTError('header not implemented: ' + k) 

+

 

+

if pub_key: 

+

token = JWS() 

+

token.allowed_algs = allowed_algs 

+

token.deserialize(jwt, pub_key) 

+

elif 'none' not in allowed_algs: 

+

raise _JWTError('no key but none alg not allowed') 

+

 

+

parsed_claims = json_decode(base64url_decode(claims)) 

+

 

+

utcnow = datetime.utcnow() 

+

now = timegm(utcnow.utctimetuple()) 

+

 

+

typ = parsed_header.get('typ') 

+

if typ is None: 

+

if not checks_optional: 

+

raise _JWTError('typ header not present') 

+

elif typ != 'JWT': 

+

raise _JWTError('typ header is not JWT') 

+

 

+

iat = parsed_claims.get('iat') 

+

if iat is None: 

+

if not checks_optional: 

+

raise _JWTError('iat claim not present') 

+

elif iat > timegm((utcnow + iat_skew).utctimetuple()): 

+

raise _JWTError('issued in the future') 

+

 

+

nbf = parsed_claims.get('nbf') 

+

if nbf is None: 

+

if not checks_optional: 

+

raise _JWTError('nbf claim not present') 

+

elif nbf > now: 

+

raise _JWTError('not yet valid') 

+

 

+

exp = parsed_claims.get('exp') 

+

if exp is None: 

+

if not checks_optional: 

+

raise _JWTError('exp claim not present') 

+

elif exp <= now: 

+

raise _JWTError('expired') 

+

 

+

return parsed_header, parsed_claims 

+

 

+

#pylint: enable=R0912 

+

 

+

def process_jwt(jwt): 

+

""" 

+

Process a JSON Web Token without verifying it. 

+

 

+

Call this before :func:`verify_jwt` if you need access to the header or claims in the token before verifying it. For example, the claims might identify the issuer such that you can retrieve the appropriate public key. 

+

 

+

:param jwt: The JSON Web Token to verify. 

+

:type jwt: str or unicode 

+

 

+

:rtype: tuple 

+

:returns: ``(header, claims)`` 

+

""" 

+

header, claims, _ = jwt.split('.') 

+

parsed_header = json_decode(base64url_decode(header)) 

+

parsed_claims = json_decode(base64url_decode(claims)) 

+

return parsed_header, parsed_claims 

@@ -530,7 +532,7 @@

« index     coverage.py v4.5.4, - created at 2019-11-14 09:26 + created at 2020-08-24 22:34

diff --git a/coverage/html/status.json b/coverage/html/status.json index e569428..a37a22e 100644 --- a/coverage/html/status.json +++ b/coverage/html/status.json @@ -1 +1 @@ -{"files":{"python_jwt___init___py":{"index":{"relative_filename":"python_jwt/__init__.py","html_filename":"python_jwt___init___py.html","nums":[1,87,0,0,56,0,0]},"hash":"a30ce36e7e59434b21d32b6904df4aee"}},"version":"4.5.4","settings":"fd659caad95e8103c8432140d3fc963a","format":1} \ No newline at end of file +{"files":{"python_jwt___init___py":{"index":{"relative_filename":"python_jwt/__init__.py","html_filename":"python_jwt___init___py.html","nums":[1,88,0,0,56,0,0]},"hash":"beb62ca86f41669adde5fabffb6a95e2"}},"version":"4.5.4","settings":"fd659caad95e8103c8432140d3fc963a","format":1} \ No newline at end of file diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index 5936be643295e124da4c8e21a140b28306ec3297..4e33badc18291f0ff2e75aee72b6c8167d2c2a77 100644 GIT binary patch literal 10213 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 literal 70872 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 - Index — python-jwt 3.2.6 documentation + Index — python-jwt 3.3.0 documentation @@ -27,7 +27,7 @@

Navigation

  • modules |
  • - + @@ -105,7 +105,7 @@

    Navigation

  • modules |
  • - + @@ -219,7 +219,7 @@

    Navigation

  • modules |
  • - + @@ -91,7 +91,7 @@

    Navigation

  • modules |
  • - + @@ -86,7 +86,7 @@

    Navigation

  • modules |
  • - +