Skip to content
This repository has been archived by the owner on Nov 13, 2023. It is now read-only.

Commit

Permalink
Support ES256K and EdDSA
Browse files Browse the repository at this point in the history
  • Loading branch information
davedoesdev committed Aug 24, 2020
1 parent 7343cb7 commit f1b4845
Show file tree
Hide file tree
Showing 26 changed files with 396 additions and 297 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down
4 changes: 2 additions & 2 deletions bench/generate_token_bench.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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

Expand Down
4 changes: 2 additions & 2 deletions bench/load_key_bench.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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
Expand Down
6 changes: 3 additions & 3 deletions bench/verify_token_bench.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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

Expand Down
95 changes: 48 additions & 47 deletions coverage/coverage.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" ?>
<coverage branch-rate="1" branches-covered="56" branches-valid="56" complexity="0" line-rate="1" lines-covered="87" lines-valid="87" timestamp="1573723579508" version="4.5.4">
<coverage branch-rate="1" branches-covered="56" branches-valid="56" complexity="0" line-rate="1" lines-covered="88" lines-valid="88" timestamp="1598304879802" version="4.5.4">
<!-- Generated by coverage.py: https://coverage.readthedocs.io -->
<!-- Based on https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd -->
<sources>
Expand Down Expand Up @@ -40,64 +40,65 @@
<line hits="1" number="88"/>
<line hits="1" number="89"/>
<line hits="1" number="90"/>
<line hits="1" number="92"/>
<line hits="1" number="100"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="141"/>
<line hits="1" number="142"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="144"/>
<line hits="1" number="146"/>
<line hits="1" number="148"/>
<line hits="1" number="150"/>
<line hits="1" number="152"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="153"/>
<line hits="1" number="154"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="155"/>
<line hits="1" number="156"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="158"/>
<line hits="1" number="91"/>
<line hits="1" number="93"/>
<line hits="1" number="101"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="142"/>
<line hits="1" number="143"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="145"/>
<line hits="1" number="147"/>
<line hits="1" number="149"/>
<line hits="1" number="151"/>
<line hits="1" number="153"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="154"/>
<line hits="1" number="155"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="156"/>
<line hits="1" number="157"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="159"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="160"/>
<line hits="1" number="161"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="162"/>
<line hits="1" number="163"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="165"/>
<line hits="1" number="166"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="161"/>
<line hits="1" number="162"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="163"/>
<line hits="1" number="164"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="166"/>
<line hits="1" number="167"/>
<line hits="1" number="168"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="169"/>
<line hits="1" number="170"/>
<line hits="1" number="172"/>
<line hits="1" number="174"/>
<line hits="1" number="169"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="170"/>
<line hits="1" number="171"/>
<line hits="1" number="173"/>
<line hits="1" number="175"/>
<line hits="1" number="177"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="178"/>
<line hits="1" number="176"/>
<line hits="1" number="178"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="179"/>
<line hits="1" number="180"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="181"/>
<line hits="1" number="182"/>
<line hits="1" number="184"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="185"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="180"/>
<line hits="1" number="181"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="182"/>
<line hits="1" number="183"/>
<line hits="1" number="185"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="186"/>
<line hits="1" number="187"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="188"/>
<line hits="1" number="189"/>
<line hits="1" number="191"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="192"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="187"/>
<line hits="1" number="188"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="189"/>
<line hits="1" number="190"/>
<line hits="1" number="192"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="193"/>
<line hits="1" number="194"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="195"/>
<line hits="1" number="196"/>
<line hits="1" number="198"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="199"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="194"/>
<line hits="1" number="195"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="196"/>
<line hits="1" number="197"/>
<line hits="1" number="199"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="200"/>
<line hits="1" number="201"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="202"/>
<line hits="1" number="203"/>
<line hits="1" number="205"/>
<line hits="1" number="209"/>
<line hits="1" number="221"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="201"/>
<line hits="1" number="202"/>
<line branch="true" condition-coverage="100% (2/2)" hits="1" number="203"/>
<line hits="1" number="204"/>
<line hits="1" number="206"/>
<line hits="1" number="210"/>
<line hits="1" number="222"/>
<line hits="1" number="223"/>
<line hits="1" number="224"/>
<line hits="1" number="225"/>
</lines>
</class>
</classes>
Expand Down
10 changes: 5 additions & 5 deletions coverage/html/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -71,28 +71,28 @@ <h1>Coverage report:
<tfoot>
<tr class="total">
<td class="name left">Total</td>
<td>87</td>
<td>88</td>
<td>0</td>
<td>0</td>

<td>56</td>
<td>0</td>

<td class="right" data-ratio="143 143">100%</td>
<td class="right" data-ratio="144 144">100%</td>
</tr>
</tfoot>
<tbody>

<tr class="file">
<td class="name left"><a href="python_jwt___init___py.html">python_jwt/__init__.py</a></td>
<td>87</td>
<td>88</td>
<td>0</td>
<td>0</td>

<td>56</td>
<td>0</td>

<td class="right" data-ratio="143 143">100%</td>
<td class="right" data-ratio="144 144">100%</td>
</tr>

</tbody>
Expand All @@ -107,7 +107,7 @@ <h1>Coverage report:
<div class="content">
<p>
<a class="nav" href="https://coverage.readthedocs.io">coverage.py v4.5.4</a>,
created at 2019-11-14 09:26
created at 2020-08-24 22:34
</p>
</div>
</div>
Expand Down
Loading

0 comments on commit f1b4845

Please sign in to comment.