10
10
from jose import jws
11
11
from py_vapid import Vapid01 , Vapid02 , VapidException
12
12
13
+ # This is a private key in DER form.
13
14
T_DER = """
14
15
MHcCAQEEIPeN1iAipHbt8+/KZ2NIF8NeN24jqAmnMLFZEMocY8RboAoGCCqGSM49
15
16
AwEHoUQDQgAEEJwJZq/GN8jJbo1GGpyU70hmP2hbWAUpQFKDByKB81yldJ9GTklB
16
17
M5xqEwuPM7VuQcyiLDhvovthPIXx+gsQRQ==
17
18
"""
19
+
20
+ # This is the same private key, in PEM form.
18
21
T_PRIVATE = ("-----BEGIN EC PRIVATE KEY-----{}"
19
22
"-----END EC PRIVATE KEY-----\n " ).format (T_DER )
20
23
24
+ # This is a public key in PEM form.
21
25
T_PUBLIC = """-----BEGIN PUBLIC KEY-----
22
26
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEJwJZq/GN8jJbo1GGpyU70hmP2hb
23
27
WAUpQFKDByKB81yldJ9GTklBM5xqEwuPM7VuQcyiLDhvovthPIXx+gsQRQ==
24
28
-----END PUBLIC KEY-----
25
29
"""
26
30
27
- # this is a DER RAW key ('\x04' + 2 32 octet digits )
31
+ # this is a public key in uncompressed form ('\x04' + 2 * 32 octets )
28
32
# Remember, this should have any padding stripped.
29
33
T_PUBLIC_RAW = (
30
34
"BBCcCWavxjfIyW6NRhqclO9IZj9oW1gFKUBSgwcigfNc"
33
37
34
38
35
39
def setUp (self ):
36
- ff = open ('/tmp/private' , 'w' )
37
- ff .write (T_PRIVATE )
38
- ff . close ()
39
- ff = open ( '/tmp/public' , 'w' )
40
- ff . write ( T_PUBLIC )
41
- ff .close ( )
40
+ with open ('/tmp/private' , 'w' ) as ff :
41
+ ff .write (T_PRIVATE )
42
+ with open ( '/tmp/public' , 'w' ) as ff :
43
+ ff . write ( T_PUBLIC )
44
+ with open ( '/tmp/private.der' , 'w' ) as ff :
45
+ ff .write ( T_DER )
42
46
43
47
44
48
def tearDown (self ):
@@ -48,17 +52,20 @@ def tearDown(self):
48
52
49
53
class VapidTestCase (unittest .TestCase ):
50
54
def test_init (self ):
51
- v1 = Vapid01 ( private_key_file = "/tmp/private" )
55
+ v1 = Vapid01 . from_file ( "/tmp/private" )
52
56
eq_ (v1 .private_key .to_pem (), T_PRIVATE .encode ('utf8' ))
53
57
eq_ (v1 .public_key .to_pem (), T_PUBLIC .encode ('utf8' ))
54
- v2 = Vapid01 ( private_key = T_PRIVATE )
58
+ v2 = Vapid01 . from_pem ( T_PRIVATE )
55
59
eq_ (v2 .private_key .to_pem (), T_PRIVATE .encode ('utf8' ))
56
60
eq_ (v2 .public_key .to_pem (), T_PUBLIC .encode ('utf8' ))
57
- v3 = Vapid01 ( private_key = T_DER )
61
+ v3 = Vapid01 . from_der ( T_DER )
58
62
eq_ (v3 .private_key .to_pem (), T_PRIVATE .encode ('utf8' ))
59
63
eq_ (v3 .public_key .to_pem (), T_PUBLIC .encode ('utf8' ))
64
+ v4 = Vapid01 .from_file ("/tmp/private.der" )
65
+ eq_ (v4 .private_key .to_pem (), T_PRIVATE .encode ('utf8' ))
66
+ eq_ (v4 .public_key .to_pem (), T_PUBLIC .encode ('utf8' ))
60
67
no_exist = '/tmp/not_exist'
61
- Vapid01 ( private_key_file = no_exist )
68
+ Vapid01 . from_file ( no_exist )
62
69
ok_ (os .path .isfile (no_exist ))
63
70
os .unlink (no_exist )
64
71
@@ -68,7 +75,7 @@ def repad(self, data):
68
75
@patch ("ecdsa.SigningKey.from_pem" , side_effect = Exception )
69
76
def test_init_bad_priv (self , mm ):
70
77
self .assertRaises (Exception ,
71
- Vapid01 ,
78
+ Vapid01 . from_file ,
72
79
private_key_file = "/tmp/private" )
73
80
74
81
def test_private (self ):
@@ -98,7 +105,7 @@ def test_same_public_key(self):
98
105
os .unlink ("/tmp/p2" )
99
106
100
107
def test_validate (self ):
101
- v = Vapid01 ("/tmp/private" )
108
+ v = Vapid01 . from_file ("/tmp/private" )
102
109
msg = "foobar" .encode ('utf8' )
103
110
vtoken = v .validate (msg )
104
111
ok_ (v .public_key .verify (base64 .urlsafe_b64decode (vtoken ),
@@ -108,7 +115,7 @@ def test_validate(self):
108
115
ok_ (v .verify_token (msg , vtoken ))
109
116
110
117
def test_sign_01 (self ):
111
- v = Vapid01 ("/tmp/private" )
118
+ v = Vapid01 . from_file ("/tmp/private" )
112
119
claims = {
"aud" :
"example.com" ,
"sub" :
"[email protected] " }
113
120
result = v .sign (claims , "id=previous" )
114
121
eq_ (result ['Crypto-Key' ],
@@ -123,7 +130,7 @@ def test_sign_01(self):
123
130
'p256ecdsa=' + T_PUBLIC_RAW )
124
131
125
132
def test_sign_02 (self ):
126
- v = Vapid02 ("/tmp/private" )
133
+ v = Vapid02 . from_file ("/tmp/private" )
127
134
claims = {"aud" : "example.com" ,
128
135
129
136
"foo" : "extra value" }
@@ -144,7 +151,7 @@ def test_sign_02(self):
144
151
eq_ (t_val [k ], claims [k ])
145
152
146
153
def test_bad_sign (self ):
147
- v = Vapid01 ("/tmp/private" )
154
+ v = Vapid01 . from_file ("/tmp/private" )
148
155
self .assertRaises (VapidException ,
149
156
v .sign ,
150
157
{'aud' : "p.example.com" })
0 commit comments