1
+ import binascii
1
2
import base64
2
3
import hashlib
3
4
import os
24
25
"""
25
26
26
27
T_PUBLIC_RAW = """EJwJZq_GN8jJbo1GGpyU70hmP2hbWAUpQFKDBy\
27
- KB81yldJ9GTklBM5xqEwuPM7VuQcyiLDhvovthPIXx-gsQRQ=="""
28
+ KB81yldJ9GTklBM5xqEwuPM7VuQcyiLDhvovthPIXx-gsQRQ==""". strip ( '=' )
28
29
29
30
30
31
def setUp (self ):
@@ -44,21 +45,21 @@ def tearDown(self):
44
45
class VapidTestCase (unittest .TestCase ):
45
46
def test_init (self ):
46
47
v1 = Vapid01 (private_key_file = "/tmp/private" )
47
- eq_ (v1 .private_key .to_pem (), T_PRIVATE )
48
- eq_ (v1 .public_key .to_pem (), T_PUBLIC )
48
+ eq_ (v1 .private_key .to_pem (), T_PRIVATE . encode ( 'utf8' ) )
49
+ eq_ (v1 .public_key .to_pem (), T_PUBLIC . encode ( 'utf8' ) )
49
50
v2 = Vapid01 (private_key = T_PRIVATE )
50
- eq_ (v2 .private_key .to_pem (), T_PRIVATE )
51
- eq_ (v2 .public_key .to_pem (), T_PUBLIC )
51
+ eq_ (v2 .private_key .to_pem (), T_PRIVATE . encode ( 'utf8' ) )
52
+ eq_ (v2 .public_key .to_pem (), T_PUBLIC . encode ( 'utf8' ) )
52
53
v3 = Vapid01 (private_key = T_DER )
53
- eq_ (v3 .private_key .to_pem (), T_PRIVATE )
54
- eq_ (v3 .public_key .to_pem (), T_PUBLIC )
54
+ eq_ (v3 .private_key .to_pem (), T_PRIVATE . encode ( 'utf8' ) )
55
+ eq_ (v3 .public_key .to_pem (), T_PUBLIC . encode ( 'utf8' ) )
55
56
no_exist = '/tmp/not_exist'
56
57
Vapid01 (private_key_file = no_exist )
57
58
ok_ (os .path .isfile (no_exist ))
58
59
os .unlink (no_exist )
59
60
60
61
def repad (self , data ):
61
- return data + b "====" [:len (data ) % 4 ]
62
+ return data + "====" [:len (data ) % 4 ]
62
63
63
64
@patch ("ecdsa.SigningKey.from_pem" , side_effect = Exception )
64
65
def test_init_bad_priv (self , mm ):
@@ -94,7 +95,7 @@ def test_save_public_key(self):
94
95
95
96
def test_validate (self ):
96
97
v = Vapid01 ("/tmp/private" )
97
- msg = "foobar"
98
+ msg = "foobar" . encode ( 'utf8' )
98
99
vtoken = v .validate (msg )
99
100
ok_ (v .public_key .verify (base64 .urlsafe_b64decode (vtoken ),
100
101
msg ,
@@ -112,7 +113,7 @@ def test_sign_01(self):
112
113
items = jws .verify (result ['Authorization' ].split (' ' )[1 ],
113
114
v .public_key ,
114
115
algorithms = ["ES256" ])
115
- eq_ (json .loads (items ), claims )
116
+ eq_ (json .loads (items . decode ( 'utf8' ) ), claims )
116
117
result = v .sign (claims )
117
118
eq_ (result ['Crypto-Key' ],
118
119
'p256ecdsa=' + T_PUBLIC_RAW )
@@ -131,9 +132,9 @@ def test_sign_02(self):
131
132
eq_ (len (parts ), 2 )
132
133
t_val = json .loads (base64 .urlsafe_b64decode (
133
134
self .repad (parts [0 ][2 :].split ('.' )[1 ])
134
- ))
135
- k_val = base64 . urlsafe_b64decode (self .repad (parts [1 ][2 :]))
136
- eq_ (k_val [ 0 ], " \04 " )
135
+ ). decode ( 'utf8' ) )
136
+ k_val = binascii . a2b_base64 (self .repad (parts [1 ][2 :]))
137
+ eq_ (binascii . hexlify ( k_val )[: 2 ], b'04' )
137
138
eq_ (len (k_val ), 65 )
138
139
for k in claims :
139
140
eq_ (t_val [k ], claims [k ])
0 commit comments