1
1
# pylint: disable=missing-docstring,no-self-use
2
2
import json
3
3
import os
4
+ from pathlib import Path
4
5
import shutil
5
6
import time
6
- from pathlib import Path
7
7
8
+ from cryptography .hazmat .primitives .asymmetric import rsa
8
9
import pytest
9
10
import requests
10
11
import responses
11
- from cryptography .hazmat .primitives .asymmetric import rsa
12
12
13
13
from cryptojwt .exception import UnknownKeyType
14
14
from cryptojwt .jwk .ec import ECKey
@@ -53,8 +53,8 @@ def full_path(local_file):
53
53
"e" : "AQAB" ,
54
54
"kid" : "abc" ,
55
55
"n" : "wf-wiusGhA-gleZYQAOPQlNUIucPiqXdPVyieDqQbXXOPBe3nuggtVzeq7pVFH1dZz4dY"
56
- "2Q2LA5DaegvP8kRvoSB_87ds3dy3Rfym_GUSc5B0l1TgEobcyaep8jguRoHto6GWHfCfK"
57
- "qoUYZq4N8vh4LLMQwLR6zi6Jtu82nB5k8" ,
56
+ "2Q2LA5DaegvP8kRvoSB_87ds3dy3Rfym_GUSc5B0l1TgEobcyaep8jguRoHto6GWHfCfK"
57
+ "qoUYZq4N8vh4LLMQwLR6zi6Jtu82nB5k8" ,
58
58
}
59
59
]
60
60
}
@@ -63,11 +63,11 @@ def full_path(local_file):
63
63
"keys" : [
64
64
{
65
65
"n" : "zkpUgEgXICI54blf6iWiD2RbMDCOO1jV0VSff1MFFnujM4othfMsad7H1kRo50YM5S"
66
- "_X9TdvrpdOfpz5aBaKFhT6Ziv0nhtcekq1eRl8mjBlvGKCE5XGk-0LFSDwvqgkJoFY"
67
- "Inq7bu0a4JEzKs5AyJY75YlGh879k1Uu2Sv3ZZOunfV1O1Orta-NvS-aG_jN5cstVb"
68
- "CGWE20H0vFVrJKNx0Zf-u-aA-syM4uX7wdWgQ-owoEMHge0GmGgzso2lwOYf_4znan"
69
- "LwEuO3p5aabEaFoKNR4K6GjQcjBcYmDEE4CtfRU9AEmhcD1kleiTB9TjPWkgDmT9MX"
70
- "sGxBHf3AKT5w" ,
66
+ "_X9TdvrpdOfpz5aBaKFhT6Ziv0nhtcekq1eRl8mjBlvGKCE5XGk-0LFSDwvqgkJoFY"
67
+ "Inq7bu0a4JEzKs5AyJY75YlGh879k1Uu2Sv3ZZOunfV1O1Orta-NvS-aG_jN5cstVb"
68
+ "CGWE20H0vFVrJKNx0Zf-u-aA-syM4uX7wdWgQ-owoEMHge0GmGgzso2lwOYf_4znan"
69
+ "LwEuO3p5aabEaFoKNR4K6GjQcjBcYmDEE4CtfRU9AEmhcD1kleiTB9TjPWkgDmT9MX"
70
+ "sGxBHf3AKT5w" ,
71
71
"e" : "AQAB" ,
72
72
"kty" : "RSA" ,
73
73
"kid" : "rsa1" ,
@@ -87,11 +87,11 @@ def full_path(local_file):
87
87
"kid" : "kriMPdmBvx68skT8-mPAB3BseeA" ,
88
88
"kty" : "RSA" ,
89
89
"n" : "kSCWg6q9iYxvJE2NIhSyOiKvqoWCO2GFipgH0sTSAs5FalHQosk9ZNTztX0ywS"
90
- "_AHsBeQPqYygfYVJL6_EgzVuwRk5txr9e3n1uml94fLyq_AXbwo9yAduf4dCHT"
91
- "P8CWR1dnDR-Qnz_4PYlWVEuuHHONOw_blbfdMjhY-C_BYM2E3pRxbohBb3x__C"
92
- "fueV7ddz2LYiH3wjz0QS_7kjPiNCsXcNyKQEOTkbHFi3mu0u13SQwNddhcynd_"
93
- "GTgWN8A-6SN1r4hzpjFKFLbZnBt77ACSiYx-IHK4Mp-NaVEi5wQtSsjQtI--Xs"
94
- "okxRDqYLwus1I1SihgbV_STTg5enufuw" ,
90
+ "_AHsBeQPqYygfYVJL6_EgzVuwRk5txr9e3n1uml94fLyq_AXbwo9yAduf4dCHT"
91
+ "P8CWR1dnDR-Qnz_4PYlWVEuuHHONOw_blbfdMjhY-C_BYM2E3pRxbohBb3x__C"
92
+ "fueV7ddz2LYiH3wjz0QS_7kjPiNCsXcNyKQEOTkbHFi3mu0u13SQwNddhcynd_"
93
+ "GTgWN8A-6SN1r4hzpjFKFLbZnBt77ACSiYx-IHK4Mp-NaVEi5wQtSsjQtI--Xs"
94
+ "okxRDqYLwus1I1SihgbV_STTg5enufuw" ,
95
95
"use" : "sig" ,
96
96
"x5c" : [
97
97
"MIIDPjCCAiqgAwIBAgIQsRiM0jheFZhKk49YD0SK1TAJBgUrDgMCHQUAMC0xKz"
@@ -121,11 +121,11 @@ def full_path(local_file):
121
121
"kid" : "MnC_VZcATfM5pOYiJHMba9goEKY" ,
122
122
"kty" : "RSA" ,
123
123
"n" : "vIqz-4-ER_vNWLON9yv8hIYV737JQ6rCl6XfzOC628seYUPf0TaGk91CFxefhz"
124
- "h23V9Tkq-RtwN1Vs_z57hO82kkzL-cQHZX3bMJD-GEGOKXCEXURN7VMyZWMAuz"
125
- "QoW9vFb1k3cR1RW_EW_P-C8bb2dCGXhBYqPfHyimvz2WarXhntPSbM5XyS5v5y"
126
- "Cw5T_Vuwqqsio3V8wooWGMpp61y12NhN8bNVDQAkDPNu2DT9DXB1g0CeFINp_K"
127
- "AS_qQ2Kq6TSvRHJqxRR68RezYtje9KAqwqx4jxlmVAQy0T3-T-IAbsk1wRtWDn"
128
- "dhO6s1Os-dck5TzyZ_dNOhfXgelixLUQ" ,
124
+ "h23V9Tkq-RtwN1Vs_z57hO82kkzL-cQHZX3bMJD-GEGOKXCEXURN7VMyZWMAuz"
125
+ "QoW9vFb1k3cR1RW_EW_P-C8bb2dCGXhBYqPfHyimvz2WarXhntPSbM5XyS5v5y"
126
+ "Cw5T_Vuwqqsio3V8wooWGMpp61y12NhN8bNVDQAkDPNu2DT9DXB1g0CeFINp_K"
127
+ "AS_qQ2Kq6TSvRHJqxRR68RezYtje9KAqwqx4jxlmVAQy0T3-T-IAbsk1wRtWDn"
128
+ "dhO6s1Os-dck5TzyZ_dNOhfXgelixLUQ" ,
129
129
"use" : "sig" ,
130
130
"x5c" : [
131
131
"MIIC4jCCAcqgAwIBAgIQQNXrmzhLN4VGlUXDYCRT3zANBgkqhkiG9w0BAQsFADAtMSswKQYDVQQDEyJhY2NvdW50cy5hY2Nlc3Njb"
@@ -152,12 +152,12 @@ def full_path(local_file):
152
152
{
153
153
"e" : "AQAB" ,
154
154
"issuer" : "https://login.microsoftonline.com/9188040d-6c67-4c5b"
155
- "-b112-36a304b66dad/v2.0/" ,
155
+ "-b112-36a304b66dad/v2.0/" ,
156
156
"kid" : "GvnPApfWMdLRi8PDmisFn7bprKg" ,
157
157
"kty" : "RSA" ,
158
158
"n" : "5ymq_xwmst1nstPr8YFOTyD1J5N4idYmrph7AyAv95RbWXfDRqy8CMRG7sJq"
159
- "-UWOKVOA4MVrd_NdV-ejj1DE5MPSiG"
160
- "-mZK_5iqRCDFvPYqOyRj539xaTlARNY4jeXZ0N6irZYKqSfYACjkkKxbLKcijSu1pJ48thXOTED0oNa6U" ,
159
+ "-UWOKVOA4MVrd_NdV-ejj1DE5MPSiG"
160
+ "-mZK_5iqRCDFvPYqOyRj539xaTlARNY4jeXZ0N6irZYKqSfYACjkkKxbLKcijSu1pJ48thXOTED0oNa6U" ,
161
161
"use" : "sig" ,
162
162
"x5c" : [
163
163
"MIICWzCCAcSgAwIBAgIJAKVzMH2FfC12MA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVib"
@@ -181,12 +181,13 @@ def full_path(local_file):
181
181
{
182
182
"e" : "AQAB" ,
183
183
"issuer" : "https://login.microsoftonline.com/9188040d-6c67-4c5b"
184
- "-b112-36a304b66dad/v2.0/" ,
184
+ "-b112-36a304b66dad/v2.0/" ,
185
185
"kid" : "dEtpjbEvbhfgwUI-bdK5xAU_9UQ" ,
186
186
"kty" : "RSA" ,
187
- "n" : "x7HNcD9ZxTFRaAgZ7-gdYLkgQua3zvQseqBJIt8Uq3MimInMZoE9QGQeSML7qZPlowb5BUakdLI70ayM4vN36--0ht8-oCHhl8Yj"
188
- "GFQkU-Iv2yahWHEP-1EK6eOEYu6INQP9Lk0HMk3QViLwshwb"
189
- "-KXVD02jdmX2HNdYJdPyc0c" ,
187
+ "n" :
188
+ "x7HNcD9ZxTFRaAgZ7-gdYLkgQua3zvQseqBJIt8Uq3MimInMZoE9QGQeSML7qZPlowb5BUakdLI70ayM4vN36--0ht8-oCHhl8Yj"
189
+ "GFQkU-Iv2yahWHEP-1EK6eOEYu6INQP9Lk0HMk3QViLwshwb"
190
+ "-KXVD02jdmX2HNdYJdPyc0c" ,
190
191
"use" : "sig" ,
191
192
"x5c" : [
192
193
"MIICWzCCAcSgAwIBAgIJAL3MzqqEFMYjMA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVib"
@@ -278,7 +279,7 @@ def test_ignore_unknown_types():
278
279
kb = KeyBundle (
279
280
{
280
281
"kid" : "q-H9y8iuh3BIKZBbK6S0mH_isBlJsk"
281
- "-u6VtZ5rAdBo5fCjjy3LnkrsoK_QWrlKB08j_PcvwpAMfTEDHw5spepw" ,
282
+ "-u6VtZ5rAdBo5fCjjy3LnkrsoK_QWrlKB08j_PcvwpAMfTEDHw5spepw" ,
282
283
"use" : "sig" ,
283
284
"alg" : "EdDSA" ,
284
285
"kty" : "OKP" ,
@@ -618,14 +619,16 @@ def test_loads_1():
618
619
"kty" : "RSA" ,
619
620
"use" : "sig" ,
620
621
"e" : "AQAB" ,
621
- "n" : "wf-wiusGhA-gleZYQAOPQlNUIucPiqXdPVyieDqQbXXOPBe3nuggtVzeq7pVFH1dZz4dY2Q2LA5DaegvP8kRvoSB_87ds3dy3Rfym_GUSc5B0l1TgEobcyaep8jguRoHto6GWHfCfKqoUYZq4N8vh4LLMQwLR6zi6Jtu82nB5k8" ,
622
+ "n" :
623
+ "wf-wiusGhA-gleZYQAOPQlNUIucPiqXdPVyieDqQbXXOPBe3nuggtVzeq7pVFH1dZz4dY2Q2LA5DaegvP8kRvoSB_87ds3dy3Rfym_GUSc5B0l1TgEobcyaep8jguRoHto6GWHfCfKqoUYZq4N8vh4LLMQwLR6zi6Jtu82nB5k8" ,
622
624
"kid" : "1" ,
623
625
},
624
626
{
625
627
"kty" : "RSA" ,
626
628
"use" : "enc" ,
627
629
"e" : "AQAB" ,
628
- "n" : "wf-wiusGhA-gleZYQAOPQlNUIucPiqXdPVyieDqQbXXOPBe3nuggtVzeq7pVFH1dZz4dY2Q2LA5DaegvP8kRvoSB_87ds3dy3Rfym_GUSc5B0l1TgEobcyaep8jguRoHto6GWHfCfKqoUYZq4N8vh4LLMQwLR6zi6Jtu82nB5k8" ,
630
+ "n" :
631
+ "wf-wiusGhA-gleZYQAOPQlNUIucPiqXdPVyieDqQbXXOPBe3nuggtVzeq7pVFH1dZz4dY2Q2LA5DaegvP8kRvoSB_87ds3dy3Rfym_GUSc5B0l1TgEobcyaep8jguRoHto6GWHfCfKqoUYZq4N8vh4LLMQwLR6zi6Jtu82nB5k8" ,
629
632
"kid" : "2" ,
630
633
},
631
634
]
@@ -658,7 +661,8 @@ def test_dump_jwk():
658
661
JWKS_DICT = {
659
662
"keys" : [
660
663
{
661
- "n" : u"zkpUgEgXICI54blf6iWiD2RbMDCOO1jV0VSff1MFFnujM4othfMsad7H1kRo50YM5S_X9TdvrpdOfpz5aBaKFhT6Ziv0nhtcekq1eRl8mjBlvGKCE5XGk-0LFSDwvqgkJoFYInq7bu0a4JEzKs5AyJY75YlGh879k1Uu2Sv3ZZOunfV1O1Orta-NvS-aG_jN5cstVbCGWE20H0vFVrJKNx0Zf-u-aA-syM4uX7wdWgQ-owoEMHge0GmGgzso2lwOYf_4znanLwEuO3p5aabEaFoKNR4K6GjQcjBcYmDEE4CtfRU9AEmhcD1kleiTB9TjPWkgDmT9MXsGxBHf3AKT5w" ,
664
+ "n" :
665
+ u"zkpUgEgXICI54blf6iWiD2RbMDCOO1jV0VSff1MFFnujM4othfMsad7H1kRo50YM5S_X9TdvrpdOfpz5aBaKFhT6Ziv0nhtcekq1eRl8mjBlvGKCE5XGk-0LFSDwvqgkJoFYInq7bu0a4JEzKs5AyJY75YlGh879k1Uu2Sv3ZZOunfV1O1Orta-NvS-aG_jN5cstVbCGWE20H0vFVrJKNx0Zf-u-aA-syM4uX7wdWgQ-owoEMHge0GmGgzso2lwOYf_4znanLwEuO3p5aabEaFoKNR4K6GjQcjBcYmDEE4CtfRU9AEmhcD1kleiTB9TjPWkgDmT9MXsGxBHf3AKT5w" ,
662
666
"e" : u"AQAB" ,
663
667
"kty" : "RSA" ,
664
668
"kid" : "5-VBFv40P8D4I-7SFz7hMugTbPs" ,
@@ -1101,3 +1105,16 @@ def test_exclude_attributes():
1101
1105
kb2 = KeyBundle (cache_time = 600 , ignore_invalid_keys = False ).load (exp )
1102
1106
assert kb2 .cache_time == 600
1103
1107
assert kb2 .ignore_invalid_keys is False
1108
+
1109
+
1110
+ def test_remote_dump_json ():
1111
+ source = "https://example.com/keys.json"
1112
+ # Mock response
1113
+ with responses .RequestsMock () as rsps :
1114
+ rsps .add (method = "GET" , url = source , json = JWKS_DICT , status = 200 )
1115
+ httpc_params = {"timeout" : (2 , 2 )} # connect, read timeouts in seconds
1116
+ kb = KeyBundle (source = source , httpc = requests .request , httpc_params = httpc_params )
1117
+ kb .do_remote ()
1118
+
1119
+ exp = kb .dump ()
1120
+ assert json .dumps (exp )
0 commit comments