11from __future__ import print_function
2+ from Crypto .PublicKey import RSA
23from jwkest .ecc import P256
34from jwkest .ecc import P384
45from jwkest .ecc import P521
1516from jwkest .jws import JWSig
1617from jwkest .jws import JWS
1718
18- import codecs
1919import json
2020import io
2121import os .path
22+ from hashlib import md5
2223
2324BASEDIR = os .path .abspath (os .path .dirname (__file__ ))
2425
@@ -47,14 +48,16 @@ def full_path(local_file):
4748
4849JWKS = {"keys" : [
4950 {
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" ,
5153 "e" : b"AQAB" ,
5254 "kty" : "RSA" ,
5355 "kid" : "5-VBFv40P8D4I-7SFz7hMugTbPs" ,
5456 "use" : "sig"
5557 },
5658 {
57- "k" : b"YTEyZjBlMDgxMGI4YWU4Y2JjZDFiYTFlZTBjYzljNDU3YWM0ZWNiNzhmNmFlYTNkNTY0NzMzYjE" ,
59+ "k" :
60+ b"YTEyZjBlMDgxMGI4YWU4Y2JjZDFiYTFlZTBjYzljNDU3YWM0ZWNiNzhmNmFlYTNkNTY0NzMzYjE" ,
5861 "kty" : "oct" ,
5962 "use" : "sig"
6063 },
@@ -247,17 +250,20 @@ def test_a_1_1a():
247250
248251
249252def 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}'
251255 val = b64e (payload )
252- assert val == (b'eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9'
253- b'leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ' )
256+ assert val == (
257+ b'eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9'
258+ b'leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ' )
254259
255260
256261def test_a_1_1c ():
257262 hmac = jwkest .intarr2bin (HMAC_KEY )
258263 signer = SIGNER_ALGS ["HS256" ]
259264 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}'
261267 sign_input = b64e (header ) + b'.' + b64e (payload )
262268 sig = signer .sign (sign_input , hmac )
263269 assert b64e (sig ) == b'dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk'
@@ -406,11 +412,13 @@ def test_sign_2():
406412 keyset = {"keys" : [
407413 {"alg" : "RS512" ,
408414 "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" ,
410417 "e" : "AQAB" ,
411418 "use" : "sig" ,
412419 "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"
414422 }]}
415423
416424 keys = KEYS ()
@@ -431,7 +439,8 @@ def test_signer_protected_headers():
431439 exp_protected = protected .copy ()
432440 exp_protected ['alg' ] = 'ES256'
433441 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
435444 assert b64d (enc_payload .encode ("utf-8" )).decode ("utf-8" ) == payload
436445
437446 _rj = JWS ()
@@ -468,5 +477,15 @@ def test_pick():
468477 assert len (_keys ) == 1
469478
470479
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+
471490if __name__ == "__main__" :
472- test_signer_ps512 ()
491+ test_dj_usage ()
0 commit comments