1
1
from __future__ import print_function
2
+ from Crypto .PublicKey import RSA
2
3
from jwkest .ecc import P256
3
4
from jwkest .ecc import P384
4
5
from jwkest .ecc import P521
15
16
from jwkest .jws import JWSig
16
17
from jwkest .jws import JWS
17
18
18
- import codecs
19
19
import json
20
20
import io
21
21
import os .path
22
+ from hashlib import md5
22
23
23
24
BASEDIR = os .path .abspath (os .path .dirname (__file__ ))
24
25
@@ -47,14 +48,16 @@ def full_path(local_file):
47
48
48
49
JWKS = {"keys" : [
49
50
{
50
- "n" : b"zkpUgEgXICI54blf6iWiD2RbMDCOO1jV0VSff1MFFnujM4othfMsad7H1kRo50YM5S_X9TdvrpdOfpz5aBaKFhT6Ziv0nhtcekq1eRl8mjBlvGKCE5XGk-0LFSDwvqgkJoFYInq7bu0a4JEzKs5AyJY75YlGh879k1Uu2Sv3ZZOunfV1O1Orta-NvS-aG_jN5cstVbCGWE20H0vFVrJKNx0Zf-u-aA-syM4uX7wdWgQ-owoEMHge0GmGgzso2lwOYf_4znanLwEuO3p5aabEaFoKNR4K6GjQcjBcYmDEE4CtfRU9AEmhcD1kleiTB9TjPWkgDmT9MXsGxBHf3AKT5w" ,
51
+ "n" :
52
+ b"zkpUgEgXICI54blf6iWiD2RbMDCOO1jV0VSff1MFFnujM4othfMsad7H1kRo50YM5S_X9TdvrpdOfpz5aBaKFhT6Ziv0nhtcekq1eRl8mjBlvGKCE5XGk-0LFSDwvqgkJoFYInq7bu0a4JEzKs5AyJY75YlGh879k1Uu2Sv3ZZOunfV1O1Orta-NvS-aG_jN5cstVbCGWE20H0vFVrJKNx0Zf-u-aA-syM4uX7wdWgQ-owoEMHge0GmGgzso2lwOYf_4znanLwEuO3p5aabEaFoKNR4K6GjQcjBcYmDEE4CtfRU9AEmhcD1kleiTB9TjPWkgDmT9MXsGxBHf3AKT5w" ,
51
53
"e" : b"AQAB" ,
52
54
"kty" : "RSA" ,
53
55
"kid" : "5-VBFv40P8D4I-7SFz7hMugTbPs" ,
54
56
"use" : "sig"
55
57
},
56
58
{
57
- "k" : b"YTEyZjBlMDgxMGI4YWU4Y2JjZDFiYTFlZTBjYzljNDU3YWM0ZWNiNzhmNmFlYTNkNTY0NzMzYjE" ,
59
+ "k" :
60
+ b"YTEyZjBlMDgxMGI4YWU4Y2JjZDFiYTFlZTBjYzljNDU3YWM0ZWNiNzhmNmFlYTNkNTY0NzMzYjE" ,
58
61
"kty" : "oct" ,
59
62
"use" : "sig"
60
63
},
@@ -247,17 +250,20 @@ def test_a_1_1a():
247
250
248
251
249
252
def test_a_1_1b ():
250
- payload = b'{"iss":"joe",\r \n "exp":1300819380,\r \n "http://example.com/is_root":true}'
253
+ payload = b'{"iss":"joe",\r \n "exp":1300819380,' \
254
+ b'\r \n "http://example.com/is_root":true}'
251
255
val = b64e (payload )
252
- assert val == (b'eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9'
253
- b'leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ' )
256
+ assert val == (
257
+ b'eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9'
258
+ b'leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ' )
254
259
255
260
256
261
def test_a_1_1c ():
257
262
hmac = jwkest .intarr2bin (HMAC_KEY )
258
263
signer = SIGNER_ALGS ["HS256" ]
259
264
header = b'{"typ":"JWT",\r \n "alg":"HS256"}'
260
- payload = b'{"iss":"joe",\r \n "exp":1300819380,\r \n "http://example.com/is_root":true}'
265
+ payload = b'{"iss":"joe",\r \n "exp":1300819380,' \
266
+ b'\r \n "http://example.com/is_root":true}'
261
267
sign_input = b64e (header ) + b'.' + b64e (payload )
262
268
sig = signer .sign (sign_input , hmac )
263
269
assert b64e (sig ) == b'dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk'
@@ -406,11 +412,13 @@ def test_sign_2():
406
412
keyset = {"keys" : [
407
413
{"alg" : "RS512" ,
408
414
"kty" : "RSA" ,
409
- "d" : "ckLyXxkbjC4szg8q8G0ERBZV-9CszeOxpRtx1KM9BLl0Do3li_Km2vvFvfXJ7MxQpiZ18pBoCcyYQEU262ym8wI22JWMPrZe24HCNxLxqzr_JEuBhpKFxQF6EFTSvJEJD1FkoTuCTvN0zD7YHGaJQG6JzVEuFUY3ewxjH0FYNa_ppTnPP3LC-T9u_GX9Yqyuw1KOYoHSzhWSWQOeAgs4dH9-iAxN1wdZ6eH1jFWAs43svk_rhwdgyJMlihFtV9MAInBlfi_Zu8wRVhVl5urkJrLf0tGFnMbnzb6dYSlUXxEYClpY12W7kXW9aePDqkCwI4oZyxmOmgq4hunKGR1dAQ" ,
415
+ "d" : "ckLyXxkbjC4szg8q8G0ERBZV"
416
+ "-9CszeOxpRtx1KM9BLl0Do3li_Km2vvFvfXJ7MxQpiZ18pBoCcyYQEU262ym8wI22JWMPrZe24HCNxLxqzr_JEuBhpKFxQF6EFTSvJEJD1FkoTuCTvN0zD7YHGaJQG6JzVEuFUY3ewxjH0FYNa_ppTnPP3LC-T9u_GX9Yqyuw1KOYoHSzhWSWQOeAgs4dH9-iAxN1wdZ6eH1jFWAs43svk_rhwdgyJMlihFtV9MAInBlfi_Zu8wRVhVl5urkJrLf0tGFnMbnzb6dYSlUXxEYClpY12W7kXW9aePDqkCwI4oZyxmOmgq4hunKGR1dAQ" ,
410
417
"e" : "AQAB" ,
411
418
"use" : "sig" ,
412
419
"kid" : "af22448d-4c7b-464d-b63a-f5bd90f6d7d1" ,
413
- "n" : "o9g8DpUwBW6B1qmcm-TfEh4rNX7n1t38jdo4Gkl_cI3q--7n0Blg0kN88LHZvyZjUB2NhBdFYNxMP8ucy0dOXvWGWzaPmGnq3DM__lN8P4WjD1cCTAVEYKawNBAmGKqrFj1SgpPNsSqiqK-ALM1w6mZ-QGimjOgwCyJy3l9lzZh5D8tKnS2t1pZgE0X5P7lZQWHYpHPqp4jKhETzrCpPGfv0Rl6nmmjp7NlRYBkWKf_HEKE333J6M039m2FbKgxrBg3zmYYpmHuMzVgxxb8LSiv5aqyeyJjxM-YDUAgNQBfKNhONqXyu9DqtSprNkw6sqmuxK0QUVrNYl3b03PgS5Q"
420
+ "n" : "o9g8DpUwBW6B1qmcm-TfEh4rNX7n1t38jdo4Gkl_cI3q"
421
+ "--7n0Blg0kN88LHZvyZjUB2NhBdFYNxMP8ucy0dOXvWGWzaPmGnq3DM__lN8P4WjD1cCTAVEYKawNBAmGKqrFj1SgpPNsSqiqK-ALM1w6mZ-QGimjOgwCyJy3l9lzZh5D8tKnS2t1pZgE0X5P7lZQWHYpHPqp4jKhETzrCpPGfv0Rl6nmmjp7NlRYBkWKf_HEKE333J6M039m2FbKgxrBg3zmYYpmHuMzVgxxb8LSiv5aqyeyJjxM-YDUAgNQBfKNhONqXyu9DqtSprNkw6sqmuxK0QUVrNYl3b03PgS5Q"
414
422
}]}
415
423
416
424
keys = KEYS ()
@@ -431,7 +439,8 @@ def test_signer_protected_headers():
431
439
exp_protected = protected .copy ()
432
440
exp_protected ['alg' ] = 'ES256'
433
441
enc_header , enc_payload , sig = _jwt .split ('.' )
434
- assert json .loads (b64d (enc_header .encode ("utf-8" )).decode ("utf-8" )) == exp_protected
442
+ assert json .loads (
443
+ b64d (enc_header .encode ("utf-8" )).decode ("utf-8" )) == exp_protected
435
444
assert b64d (enc_payload .encode ("utf-8" )).decode ("utf-8" ) == payload
436
445
437
446
_rj = JWS ()
@@ -468,5 +477,15 @@ def test_pick():
468
477
assert len (_keys ) == 1
469
478
470
479
480
+ def test_dj_usage ():
481
+ key_string = open (full_path ("./size2048.key" ), 'r' ).read ()
482
+ key = RSA .importKey (key_string )
483
+ payload = "Please take a moment to register today"
484
+ keys = [RSAKey (key = key , kid = md5 (key_string .encode ('utf-8' )).hexdigest ())]
485
+ _jws = JWS (payload , alg = 'RS256' )
486
+ sjwt = _jws .sign_compact (keys )
487
+ _jwt = factory (sjwt )
488
+ assert _jwt .jwt .headers ['alg' ] == 'RS256'
489
+
471
490
if __name__ == "__main__" :
472
- test_signer_ps512 ()
491
+ test_dj_usage ()
0 commit comments