Skip to main content

ed448_goldilocks/sign/
error.rs

1use core::{
2    error::Error,
3    fmt::{self, Display, Formatter},
4};
5
6/// Signing errors
7#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
8pub enum SigningError {
9    /// Prehashed context length is invalid
10    PrehashedContextLength,
11    /// Public key bytes are invalid
12    InvalidPublicKeyBytes,
13    /// Signature S component is invalid
14    InvalidSignatureSComponent,
15    /// Signature R component is invalid
16    InvalidSignatureRComponent,
17    /// Signature length is invalid
18    InvalidSignatureLength,
19    /// Signature verification failed
20    Verify,
21}
22
23impl Display for SigningError {
24    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
25        match self {
26            SigningError::PrehashedContextLength => {
27                write!(f, "prehashed context length is invalid")
28            }
29            SigningError::InvalidPublicKeyBytes => write!(f, "public key bytes are invalid"),
30            SigningError::InvalidSignatureSComponent => {
31                write!(f, "signature S component is invalid")
32            }
33            SigningError::InvalidSignatureRComponent => {
34                write!(f, "signature R component is invalid")
35            }
36            SigningError::InvalidSignatureLength => write!(f, "signature length is invalid"),
37            SigningError::Verify => write!(f, "signature verification failed"),
38        }
39    }
40}
41
42impl Error for SigningError {}
43
44impl From<SigningError> for signature::Error {
45    #[cfg(feature = "alloc")]
46    fn from(err: SigningError) -> Self {
47        signature::Error::from_source(err)
48    }
49
50    #[cfg(not(feature = "alloc"))]
51    fn from(_err: SigningError) -> Self {
52        signature::Error::new()
53    }
54}