88import time
99import re
1010import copy
11- import typing
11+
12+ from typing import cast
1213
1314from argparse import Namespace
1415from cryptography .hazmat .backends import default_backend
@@ -55,11 +56,11 @@ def __init__(
5556
5657 """
5758 if conf is None :
58- conf = Namespace ()
59+ conf = Namespace (no_strict = False )
5960 self .conf = conf
6061 self .private_key = private_key
61- if private_key :
62- self ._public_key = self .private_key .public_key ()
62+ if self . _private_key :
63+ self ._public_key = self ._private_key .public_key ()
6364
6465 @classmethod
6566 def from_raw (cls , private_raw , conf : None | Namespace = None ):
@@ -109,10 +110,15 @@ def from_der(cls, private_key, conf: None | Namespace = None):
109110 key = serialization .load_der_private_key (
110111 b64urldecode (private_key ), password = None , backend = default_backend ()
111112 )
112- return cls (key , conf = conf )
113+ if key is None :
114+ raise VapidException ("Could not load private key" )
115+ else :
116+ return cls (cast (ec .EllipticCurvePrivateKey , key ), conf = conf )
113117
114118 @classmethod
115- def from_file (cls , private_key_file = None , conf : None | Namespace = None ):
119+ def from_file (
120+ cls , private_key_file : str = "private_key.pem" , conf : None | Namespace = None
121+ ):
116122 """Initialize VAPID using a file containing a private key in PEM or
117123 DER format.
118124
@@ -190,7 +196,7 @@ def private_key(self, value):
190196 self ._public_key = self .private_key .public_key ()
191197
192198 @property
193- def public_key (self ):
199+ def public_key (self ) -> ec . EllipticCurvePublicKey :
194200 """The VAPID public ECDSA key
195201
196202 The public key is currently read only. Set it via the `.private_key`
@@ -200,11 +206,13 @@ def public_key(self):
200206 :returns ec.EllipticCurvePublicKey
201207
202208 """
209+ if not self ._public_key :
210+ raise VapidException ("Public key is undefined." )
203211 return self ._public_key
204212
205213 def generate_keys (self ):
206214 """Generate a valid ECDSA Key Pair."""
207- self .private_key = ec .generate_private_key (ec .SECP256R1 , default_backend ())
215+ self .private_key = ec .generate_private_key (ec .SECP256R1 () , default_backend ())
208216
209217 def private_pem (self ):
210218 return self .private_key .private_bytes (
0 commit comments