1010from jose import jws
1111from py_vapid import Vapid01 , Vapid02 , VapidException
1212
13+ # This is a private key in DER form.
1314T_DER = """
1415MHcCAQEEIPeN1iAipHbt8+/KZ2NIF8NeN24jqAmnMLFZEMocY8RboAoGCCqGSM49
1516AwEHoUQDQgAEEJwJZq/GN8jJbo1GGpyU70hmP2hbWAUpQFKDByKB81yldJ9GTklB
1617M5xqEwuPM7VuQcyiLDhvovthPIXx+gsQRQ==
1718"""
19+
20+ # This is the same private key, in PEM form.
1821T_PRIVATE = ("-----BEGIN EC PRIVATE KEY-----{}"
1922 "-----END EC PRIVATE KEY-----\n " ).format (T_DER )
2023
24+ # This is a public key in PEM form.
2125T_PUBLIC = """-----BEGIN PUBLIC KEY-----
2226MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEJwJZq/GN8jJbo1GGpyU70hmP2hb
2327WAUpQFKDByKB81yldJ9GTklBM5xqEwuPM7VuQcyiLDhvovthPIXx+gsQRQ==
2428-----END PUBLIC KEY-----
2529"""
2630
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 )
2832# Remember, this should have any padding stripped.
2933T_PUBLIC_RAW = (
3034 "BBCcCWavxjfIyW6NRhqclO9IZj9oW1gFKUBSgwcigfNc"
3337
3438
3539def 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 )
4246
4347
4448def tearDown (self ):
@@ -48,17 +52,20 @@ def tearDown(self):
4852
4953class VapidTestCase (unittest .TestCase ):
5054 def test_init (self ):
51- v1 = Vapid01 ( private_key_file = "/tmp/private" )
55+ v1 = Vapid01 . from_file ( "/tmp/private" )
5256 eq_ (v1 .private_key .to_pem (), T_PRIVATE .encode ('utf8' ))
5357 eq_ (v1 .public_key .to_pem (), T_PUBLIC .encode ('utf8' ))
54- v2 = Vapid01 ( private_key = T_PRIVATE )
58+ v2 = Vapid01 . from_pem ( T_PRIVATE )
5559 eq_ (v2 .private_key .to_pem (), T_PRIVATE .encode ('utf8' ))
5660 eq_ (v2 .public_key .to_pem (), T_PUBLIC .encode ('utf8' ))
57- v3 = Vapid01 ( private_key = T_DER )
61+ v3 = Vapid01 . from_der ( T_DER )
5862 eq_ (v3 .private_key .to_pem (), T_PRIVATE .encode ('utf8' ))
5963 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' ))
6067 no_exist = '/tmp/not_exist'
61- Vapid01 ( private_key_file = no_exist )
68+ Vapid01 . from_file ( no_exist )
6269 ok_ (os .path .isfile (no_exist ))
6370 os .unlink (no_exist )
6471
@@ -68,7 +75,7 @@ def repad(self, data):
6875 @patch ("ecdsa.SigningKey.from_pem" , side_effect = Exception )
6976 def test_init_bad_priv (self , mm ):
7077 self .assertRaises (Exception ,
71- Vapid01 ,
78+ Vapid01 . from_file ,
7279 private_key_file = "/tmp/private" )
7380
7481 def test_private (self ):
@@ -98,7 +105,7 @@ def test_same_public_key(self):
98105 os .unlink ("/tmp/p2" )
99106
100107 def test_validate (self ):
101- v = Vapid01 ("/tmp/private" )
108+ v = Vapid01 . from_file ("/tmp/private" )
102109 msg = "foobar" .encode ('utf8' )
103110 vtoken = v .validate (msg )
104111 ok_ (v .public_key .verify (base64 .urlsafe_b64decode (vtoken ),
@@ -108,7 +115,7 @@ def test_validate(self):
108115 ok_ (v .verify_token (msg , vtoken ))
109116
110117 def test_sign_01 (self ):
111- v = Vapid01 ("/tmp/private" )
118+ v = Vapid01 . from_file ("/tmp/private" )
112119 claims = {
"aud" :
"example.com" ,
"sub" :
"[email protected] " }
113120 result = v .sign (claims , "id=previous" )
114121 eq_ (result ['Crypto-Key' ],
@@ -123,7 +130,7 @@ def test_sign_01(self):
123130 'p256ecdsa=' + T_PUBLIC_RAW )
124131
125132 def test_sign_02 (self ):
126- v = Vapid02 ("/tmp/private" )
133+ v = Vapid02 . from_file ("/tmp/private" )
127134 claims = {"aud" : "example.com" ,
128135129136 "foo" : "extra value" }
@@ -144,7 +151,7 @@ def test_sign_02(self):
144151 eq_ (t_val [k ], claims [k ])
145152
146153 def test_bad_sign (self ):
147- v = Vapid01 ("/tmp/private" )
154+ v = Vapid01 . from_file ("/tmp/private" )
148155 self .assertRaises (VapidException ,
149156 v .sign ,
150157 {'aud' : "p.example.com" })
0 commit comments