1
1
#!/usr/bin/env python3
2
2
3
3
from __future__ import print_function
4
+
4
5
import base64
5
6
import json
7
+ import os .path
6
8
import struct
7
- import pytest
8
-
9
9
from collections import Counter
10
10
11
- import requests
11
+ import pytest
12
12
from cryptography .hazmat .backends import default_backend
13
13
from cryptography .hazmat .primitives .asymmetric import rsa
14
14
from cryptography .hazmat .primitives .asymmetric .ec import generate_private_key
15
15
16
- import os .path
17
-
18
- from cryptojwt .exception import DeSerializationNotPossible , UnsupportedAlgorithm
16
+ from cryptojwt .exception import DeSerializationNotPossible
17
+ from cryptojwt .exception import UnsupportedAlgorithm
19
18
from cryptojwt .exception import WrongUsage
20
- from cryptojwt .jwk .hmac import new_sym_key
21
-
22
- from cryptojwt .utils import as_unicode , as_bytes
23
- from cryptojwt .utils import b64e
24
- from cryptojwt .utils import long2intarr
25
- from cryptojwt .utils import base64url_to_long
26
- from cryptojwt .utils import base64_to_long
27
19
from cryptojwt .jwk import JWK
28
20
from cryptojwt .jwk .ec import ECKey
21
+ from cryptojwt .jwk .ec import NIST2SEC
22
+ from cryptojwt .jwk .hmac import SYMKey
23
+ from cryptojwt .jwk .hmac import new_sym_key
24
+ from cryptojwt .jwk .hmac import sha256_digest
25
+ from cryptojwt .jwk .jwk import jwk_wrap
26
+ from cryptojwt .jwk .jwk import key_from_jwk_dict
27
+ from cryptojwt .jwk .rsa import RSAKey
29
28
from cryptojwt .jwk .rsa import import_private_rsa_key_from_file
30
29
from cryptojwt .jwk .rsa import import_public_rsa_key_from_file
31
30
from cryptojwt .jwk .rsa import import_rsa_key_from_cert_file
32
- from cryptojwt .jwk .rsa import load_x509_cert
33
31
from cryptojwt .jwk .rsa import new_rsa_key
34
- from cryptojwt .jwk . jwk import jwk_wrap
35
- from cryptojwt .jwk . jwk import key_from_jwk_dict
36
- from cryptojwt .jwk . ec import NIST2SEC
37
- from cryptojwt .jwk . rsa import RSAKey
38
- from cryptojwt .jwk . hmac import sha256_digest
39
- from cryptojwt .jwk . hmac import SYMKey
32
+ from cryptojwt .utils import as_bytes
33
+ from cryptojwt .utils import as_unicode
34
+ from cryptojwt .utils import b64e
35
+ from cryptojwt .utils import base64_to_long
36
+ from cryptojwt .utils import base64url_to_long
37
+ from cryptojwt .utils import long2intarr
40
38
41
39
__author__ = 'Roland Hedberg'
42
40
BASEDIR = os .path .abspath (os .path .dirname (__file__ ))
@@ -49,7 +47,8 @@ def full_path(local_file):
49
47
CERT = full_path ("cert.pem" )
50
48
KEY = full_path ("server.key" )
51
49
52
- N = 'wf-wiusGhA-gleZYQAOPQlNUIucPiqXdPVyieDqQbXXOPBe3nuggtVzeq7pVFH1dZz4dY2Q2LA5DaegvP8kRvoSB_87ds3dy3Rfym_GUSc5B0l1TgEobcyaep8jguRoHto6GWHfCfKqoUYZq4N8vh4LLMQwLR6zi6Jtu82nB5k8'
50
+ N = 'wf-wiusGhA' \
51
+ '-gleZYQAOPQlNUIucPiqXdPVyieDqQbXXOPBe3nuggtVzeq7pVFH1dZz4dY2Q2LA5DaegvP8kRvoSB_87ds3dy3Rfym_GUSc5B0l1TgEobcyaep8jguRoHto6GWHfCfKqoUYZq4N8vh4LLMQwLR6zi6Jtu82nB5k8'
53
52
E = 'AQAB'
54
53
55
54
JWK_0 = {"keys" : [
@@ -119,7 +118,8 @@ def test_import_rsa_key():
119
118
120
119
assert _eq (djwk .keys (), ["kty" , "e" , "n" , "p" , "q" , "d" ])
121
120
assert djwk [
122
- "n" ] == '5zbNbHIYIkGGJ3RGdRKkYmF4gOorv5eDuUKTVtuu3VvxrpOWvwnFV-NY0LgqkQSMMyVzodJE3SUuwQTUHPXXY5784vnkFqzPRx6bHgPxKz7XfwQjEBTafQTMmOeYI8wFIOIHY5i0RWR-gxDbh_D5TXuUqScOOqR47vSpIbUH-nc'
121
+ "n" ] == '5zbNbHIYIkGGJ3RGdRKkYmF4gOorv5eDuUKTVtuu3VvxrpOWvwnFV' \
122
+ '-NY0LgqkQSMMyVzodJE3SUuwQTUHPXXY5784vnkFqzPRx6bHgPxKz7XfwQjEBTafQTMmOeYI8wFIOIHY5i0RWR-gxDbh_D5TXuUqScOOqR47vSpIbUH-nc'
123
123
assert djwk ['e' ] == 'AQAB'
124
124
125
125
@@ -149,8 +149,10 @@ def test_serialize_rsa_priv_key():
149
149
150
150
ECKEY = {
151
151
"crv" : "P-521" ,
152
- "x" : u'AekpBQ8ST8a8VcfVOTNl353vSrDCLLJXmPk06wTjxrrjcBpXp5EOnYG_NjFZ6OvLFV1jSfS9tsz4qUxcWceqwQGk' ,
153
- "y" : u'ADSmRA43Z1DSNx_RvcLI87cdL07l6jQyyBXMoxVg_l2Th-x3S1WDhjDly79ajL4Kkd0AZMaZmh9ubmf63e3kyMj2' ,
152
+ "x" :
153
+ u'AekpBQ8ST8a8VcfVOTNl353vSrDCLLJXmPk06wTjxrrjcBpXp5EOnYG_NjFZ6OvLFV1jSfS9tsz4qUxcWceqwQGk' ,
154
+ "y" : u'ADSmRA43Z1DSNx_RvcLI87cdL07l6jQyyBXMoxVg_l2Th'
155
+ u'-x3S1WDhjDly79ajL4Kkd0AZMaZmh9ubmf63e3kyMj2' ,
154
156
"d" : u'AY5pb7A0UFiB3RELSD64fTLOSV_jazdF7fLYyuTw8lOfRhWg6Y6rUrPAxerEzgdRhajnu0ferB0d53vM9mE15j2C'
155
157
}
156
158
@@ -372,7 +374,7 @@ def test_encryption_key():
372
374
assert _v == 'xCo9VhtommCTGMWi-RyWB14GQqHAGC86vweU_Pi62X8'
373
375
374
376
ek = sha256_digest (
375
- 'YzE0MjgzNmRlODI5Yzg2MGYyZTRjNGE0NTZlMzBkZDRiNzJkNDA5MzUzNjM0ODkzM2E2MDk3ZWY' )[:16 ]
377
+ 'YzE0MjgzNmRlODI5Yzg2MGYyZTRjNGE0NTZlMzBkZDRiNzJkNDA5MzUzNjM0ODkzM2E2MDk3ZWY' )[:16 ]
376
378
assert as_unicode (b64e (ek )) == 'yf_UUkAFZ8Pn_prxPPgu9w'
377
379
378
380
sk = SYMKey (
@@ -433,14 +435,14 @@ def test_get_asym_key_all():
433
435
# Now it can only be used for signing and signature verification
434
436
assert rsakey .appropriate_for ('sign' )
435
437
assert rsakey .appropriate_for ('verify' )
436
- for usage in ['encrypt' ,'decrypt' ]:
438
+ for usage in ['encrypt' , 'decrypt' ]:
437
439
assert rsakey .appropriate_for (usage ) is None
438
440
439
441
rsakey .use = 'enc'
440
442
# Now it can only be used for encrypting and decrypting
441
443
assert rsakey .appropriate_for ('encrypt' )
442
444
assert rsakey .appropriate_for ('decrypt' )
443
- for usage in ['sign' ,'verify' ]:
445
+ for usage in ['sign' , 'verify' ]:
444
446
assert rsakey .appropriate_for (usage ) is None
445
447
446
448
@@ -481,13 +483,6 @@ def test_get_hmac_key_for_encrypt_HS512():
481
483
assert key .appropriate_for ('encrypt' , 'HS512' )
482
484
483
485
484
- # def test_load_x509_cert(httpserver):
485
- # _cert = open(CERT).read()
486
- # httpserver.serve_content(_cert)
487
- # key_spec = load_x509_cert(httpserver.url, requests.request, {})
488
- # assert set(key_spec.keys()) == {'rsa'}
489
-
490
-
491
486
def test_new_rsa_key ():
492
487
key = new_rsa_key ()
493
488
assert isinstance (key , RSAKey )
@@ -573,6 +568,7 @@ def test_cmp_jwk():
573
568
574
569
assert _j1 == _j2
575
570
571
+
576
572
def test_appropriate ():
577
573
_j1 = JWK (use = 'sig' , kid = '1' , alg = 'RS512' )
578
574
@@ -595,7 +591,9 @@ def test_thumbprint_rsa():
595
591
jwk = key_from_jwk_dict ({
596
592
"kty" : "RSA" ,
597
593
"e" : "AQAB" ,
598
- "n" : "3xIyjRLL1LYi2FULhN6koVwtsaixgXa5TBOMcq2EMsk_Fq-tSXmxA8ATYcUnuSGX3PGJ5pHwIF42eesIzQV5ypYklF0sLAkmkXow_TMDX0qoc4rdfc2prq-mzPWwGcYoRsjDKiSUFOUSKB41zQ6sMY2k4BWZVo1bEL0CVpVct1DDhqSME6uUKex9T2AbwWNvwFacrwJaWyKixBhiPSwVBn7dUWDnJiM39_4Lnw6JnriXcli-aJlPuXm5F_qspXL4Pfn9nR5Z9j9Qf7NFif7nVRyg8cx7OYTbbsoIbMYYG-boVPLL7ebEBZVIUysqH_WkNJlkl5m7gAs5DB_KfMx18Q" ,
594
+ "n" : "3xIyjRLL1LYi2FULhN6koVwtsaixgXa5TBOMcq2EMsk_Fq"
595
+ "-tSXmxA8ATYcUnuSGX3PGJ5pHwIF42eesIzQV5ypYklF0sLAkmkXow_TMDX0qoc4rdfc2prq"
596
+ "-mzPWwGcYoRsjDKiSUFOUSKB41zQ6sMY2k4BWZVo1bEL0CVpVct1DDhqSME6uUKex9T2AbwWNvwFacrwJaWyKixBhiPSwVBn7dUWDnJiM39_4Lnw6JnriXcli-aJlPuXm5F_qspXL4Pfn9nR5Z9j9Qf7NFif7nVRyg8cx7OYTbbsoIbMYYG-boVPLL7ebEBZVIUysqH_WkNJlkl5m7gAs5DB_KfMx18Q" ,
599
597
})
600
598
thumbprint = "Q1wZMrouq_iCnG7mr2y03Zxf7iE9mie-y_Mfh9-Cgk0"
601
599
assert (jwk .thumbprint ('SHA-256' ).decode ()) == thumbprint
0 commit comments