Source code for pyecsca.ec.error
"""Contains exceptions and warnings used in the library."""
import warnings
from public import public
from pyecsca.misc.cfg import getconfig
[docs]
@public
class NonInvertibleError(ArithmeticError):
"""Non-invertible element was inverted."""
pass
[docs]
@public
class NonInvertibleWarning(UserWarning):
"""Non-invertible element was inverted."""
pass
def raise_non_invertible():
"""
Raise either :py:class:`NonInvertibleError` or :py:class:`NonInvertiblerWarning` or ignore.
Depends on the current config value of :py:attr:`Config.ec.no_inverse_action`.
"""
cfg = getconfig()
if cfg.ec.no_inverse_action == "error":
raise NonInvertibleError("Element not invertible.")
elif cfg.ec.no_inverse_action == "warning":
warnings.warn(NonInvertibleWarning("Element not invertible."))
[docs]
@public
class NonResidueError(ArithmeticError):
"""Non-residue element was square-rooted."""
pass
[docs]
@public
class NonResidueWarning(UserWarning):
"""Non-residue element was square-rooted."""
pass
def raise_non_residue():
"""
Raise either :py:class:`NonResidueError` or :py:class:`NonResidueWarning` or ignore.
Depends on the current config value of :py:attr:`Config.ec.non_residue_action`.
"""
cfg = getconfig()
if cfg.ec.non_residue_action == "error":
raise NonResidueError("No square root exists.")
elif cfg.ec.non_residue_action == "warning":
warnings.warn(NonResidueWarning("No square root exists."))
[docs]
@public
class UnsatisfiedAssumptionError(ValueError):
"""Unsatisfied assumption was hit."""
pass
[docs]
@public
class UnsatisfiedAssumptionWarning(UserWarning):
"""Unsatisfied assumption was hit."""
pass
def raise_unsatisified_assumption(action: str, msg: str):
"""
Raise either :py:class:`UnsatisfiedAssumptionError` or :py:class:`UnsatisfiedAssumptionWarning` or ignore.
Depends on the value of :paramref:`~.raise_unsatisified_assumption.action`.
"""
if action == "error":
raise UnsatisfiedAssumptionError(msg)
elif action == "warning":
warnings.warn(UnsatisfiedAssumptionWarning(msg))