2018-02-09 05:40:02 +00:00
from warnings import warn
2018-02-08 00:18:50 +00:00
from cryptography . hazmat . primitives . asymmetric import ec
2018-02-08 04:09:47 +00:00
class _CONFIG :
2018-02-08 00:18:50 +00:00
__curve = None
2018-02-08 04:09:47 +00:00
__params = None
2018-02-09 05:40:02 +00:00
__CURVE_TO_USE_IF_NO_DEFAULT_IS_SET_BY_USER = ec . SECP256K1
__WARNING_IF_NO_DEFAULT_SET = " No default curve has been set. Using SECP256K1. This incurs a slight performance penalty. Set a default curve with umbral.config.set_default_curve(). "
2018-02-08 04:09:47 +00:00
2018-02-08 19:30:24 +00:00
class UmbralConfigurationError ( RuntimeError ) :
""" Raised when somebody does something dumb re: configuration. """
2018-02-09 05:40:02 +00:00
@classmethod
def __set_curve_by_default ( cls ) :
warn ( cls . __WARNING_IF_NO_DEFAULT_SET , RuntimeWarning )
cls . set_curve ( cls . __CURVE_TO_USE_IF_NO_DEFAULT_IS_SET_BY_USER )
2018-02-08 04:09:47 +00:00
@classmethod
def params ( cls ) :
if not cls . __params :
2018-02-09 05:40:02 +00:00
cls . __set_curve_by_default ( )
return cls . __params
2018-02-08 00:18:50 +00:00
@classmethod
def curve ( cls ) :
if not cls . __curve :
2018-02-09 05:40:02 +00:00
cls . __set_curve_by_default ( )
return cls . __curve
2018-02-08 00:18:50 +00:00
@classmethod
2018-02-09 05:40:02 +00:00
def set_curve ( cls , curve : ec . EllipticCurve = None ) :
2018-02-08 00:18:50 +00:00
if cls . __curve :
2018-02-09 05:40:02 +00:00
raise cls . UmbralConfigurationError (
" You can only set the default curve once. Do it once and then leave it alone. " )
2018-02-08 00:18:50 +00:00
else :
2018-02-08 04:09:47 +00:00
from umbral . params import UmbralParameters
2018-02-08 00:18:50 +00:00
cls . __curve = curve
2018-02-08 04:09:47 +00:00
cls . __params = UmbralParameters ( curve )
2018-02-08 00:18:50 +00:00
2018-02-09 05:40:02 +00:00
def set_default_curve ( curve : ec . EllipticCurve = None ) :
2018-02-08 04:09:47 +00:00
_CONFIG . set_curve ( curve )
2018-02-08 00:18:50 +00:00
def default_curve ( ) :
2018-02-08 04:09:47 +00:00
return _CONFIG . curve ( )
def default_params ( ) :
2018-02-09 05:40:02 +00:00
return _CONFIG . params ( )