Skip to content

Commit 9e4bbb2

Browse files
author
Michael Davis
committed
Refactor JWK
1 parent 9975866 commit 9e4bbb2

File tree

10 files changed

+378
-380
lines changed

10 files changed

+378
-380
lines changed

jose/jwk.py

Lines changed: 151 additions & 153 deletions
Large diffs are not rendered by default.

jose/jws.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
from collections import Mapping
77

8-
from jose.jwk import get_algorithm_object
8+
from jose import jwk
99
from jose.constants import ALGORITHMS
1010
from jose.exceptions import JWSError
1111
from jose.exceptions import JWSSignatureError
@@ -157,12 +157,15 @@ def _encode_payload(payload):
157157
return base64url_encode(payload)
158158

159159

160-
def _sign_header_and_claims(encoded_header, encoded_claims, algorithm, key):
160+
def _sign_header_and_claims(encoded_header, encoded_claims, algorithm, key_data):
161161
signing_input = b'.'.join([encoded_header, encoded_claims])
162162
try:
163-
alg_obj = get_algorithm_object(algorithm)
164-
key = alg_obj.prepare_key(key)
165-
signature = alg_obj.sign(signing_input, key)
163+
key = jwk.construct(key_data, algorithm)
164+
signature = key.sign(signing_input)
165+
166+
# alg_obj = get_algorithm_object(algorithm)
167+
# key = alg_obj.prepare_key(key)
168+
# signature = alg_obj.sign(signing_input, key)
166169
except Exception as e:
167170
raise JWSError(e)
168171

@@ -216,10 +219,9 @@ def _verify_signature(signing_input, header, signature, key='', algorithms=None)
216219
raise JWSError('The specified alg value is not allowed')
217220

218221
try:
219-
alg_obj = get_algorithm_object(alg)
220-
key = alg_obj.prepare_key(key)
222+
key = jwk.construct(key, alg)
221223

222-
if not alg_obj.verify(signing_input, key, signature):
224+
if not key.verify(signing_input, signature):
223225
raise JWSSignatureError()
224226

225227
except JWSSignatureError:

tests/algorithms/test_EC.py

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,6 @@
55
import ecdsa
66
import pytest
77

8-
9-
@pytest.fixture
10-
def alg():
11-
return ECKey(ECKey.SHA256)
12-
138
private_key = """-----BEGIN EC PRIVATE KEY-----
149
MHQCAQEEIIAK499svJugZZfsTsgL2tc7kH/CpzQbkr4g55CEWQyPoAcGBSuBBAAK
1510
oUQDQgAEsOnVqWVPfjte2nI0Ay3oTZVehCUtH66nJM8z6flUluHxhLG8ZTTCkJAZ
@@ -19,16 +14,16 @@ def alg():
1914

2015
class TestECAlgorithm:
2116

22-
def test_EC_key(self, alg):
17+
def test_EC_key(self):
2318
key = ecdsa.SigningKey.from_pem(private_key)
24-
alg.prepare_key(key)
19+
ECKey(key, ECKey.SHA256)
2520

26-
def test_string_secret(self, alg):
21+
def test_string_secret(self):
2722
key = 'secret'
2823
with pytest.raises(JOSEError):
29-
alg.prepare_key(key)
24+
ECKey(key, ECKey.SHA256)
3025

31-
def test_object(self, alg):
26+
def test_object(self):
3227
key = object()
3328
with pytest.raises(JOSEError):
34-
alg.prepare_key(key)
29+
ECKey(key, ECKey.SHA256)

tests/algorithms/test_HMAC.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,21 @@
55
import pytest
66

77

8-
@pytest.fixture
9-
def alg():
10-
return HMACKey(HMACKey.SHA256)
11-
12-
138
class TestHMACAlgorithm:
149

15-
def test_non_string_key(self, alg):
10+
def test_non_string_key(self):
1611
with pytest.raises(JOSEError):
17-
alg.prepare_key(object())
12+
HMACKey(object(), HMACKey.SHA256)
1813

19-
def test_RSA_key(self, alg):
14+
def test_RSA_key(self):
2015
key = "-----BEGIN PUBLIC KEY-----"
2116
with pytest.raises(JOSEError):
22-
alg.prepare_key(key)
17+
HMACKey(key, HMACKey.SHA256)
18+
19+
key = "-----BEGIN CERTIFICATE-----"
20+
with pytest.raises(JOSEError):
21+
HMACKey(key, HMACKey.SHA256)
22+
23+
key = "ssh-rsa"
24+
with pytest.raises(JOSEError):
25+
HMACKey(key, HMACKey.SHA256)

tests/algorithms/test_RSA.py

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,6 @@
66

77
import pytest
88

9-
10-
@pytest.fixture
11-
def alg():
12-
return RSAKey(RSAKey.SHA256)
13-
14-
159
private_key = """-----BEGIN RSA PRIVATE KEY-----
1610
MIIJKwIBAAKCAgEAtSKfSeI0fukRIX38AHlKB1YPpX8PUYN2JdvfM+XjNmLfU1M7
1711
4N0VmdzIX95sneQGO9kC2xMIE+AIlt52Yf/KgBZggAlS9Y0Vx8DsSL2HvOjguAdX
@@ -67,16 +61,15 @@ def alg():
6761

6862
class TestRSAAlgorithm:
6963

70-
def test_RSA_key(self, alg):
71-
key = RSA.importKey(private_key)
72-
alg.prepare_key(key)
64+
def test_RSA_key(self):
65+
RSAKey(private_key, RSAKey.SHA256)
7366

74-
def test_string_secret(self, alg):
67+
def test_string_secret(self):
7568
key = 'secret'
7669
with pytest.raises(JOSEError):
77-
alg.prepare_key(key)
70+
RSAKey(key, RSAKey.SHA256)
7871

79-
def test_object(self, alg):
72+
def test_object(self):
8073
key = object()
8174
with pytest.raises(JOSEError):
82-
alg.prepare_key(key)
75+
RSAKey(key, RSAKey.SHA256)

tests/algorithms/test_algorithms.py

Lines changed: 0 additions & 16 deletions
This file was deleted.

tests/algorithms/test_base.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11

2-
from jose.jwk import Key
3-
from jose.exceptions import JOSEError
2+
# from jose.jwk import Key
3+
# from jose.exceptions import JOSEError
44

5-
import pytest
5+
# import pytest
66

77

8-
@pytest.fixture
9-
def alg():
10-
return Key()
8+
# @pytest.fixture
9+
# def alg():
10+
# return Key()
1111

1212

13-
class TestBaseAlgorithm:
13+
# class TestBaseAlgorithm:
1414

15-
def test_prepare_key_is_interface(self, alg):
16-
with pytest.raises(JOSEError):
17-
alg.prepare_key('secret')
15+
# def test_prepare_key_is_interface(self, alg):
16+
# with pytest.raises(JOSEError):
17+
# alg.prepare_key('secret')
1818

19-
def test_sign_is_interface(self, alg):
20-
with pytest.raises(JOSEError):
21-
alg.sign('msg', 'secret')
19+
# def test_sign_is_interface(self, alg):
20+
# with pytest.raises(JOSEError):
21+
# alg.sign('msg', 'secret')
2222

23-
def test_verify_is_interface(self, alg):
24-
with pytest.raises(JOSEError):
25-
alg.verify('msg', 'secret', 'sig')
23+
# def test_verify_is_interface(self, alg):
24+
# with pytest.raises(JOSEError):
25+
# alg.verify('msg', 'secret', 'sig')

0 commit comments

Comments
 (0)