embedded_mbedtls/
error.rs

1// Copyright Open Logistics Foundation
2//
3// Licensed under the Open Logistics Foundation License 1.3.
4// For details on the licensing terms, see the LICENSE file.
5// SPDX-License-Identifier: OLFL-1.3
6
7//! Error type module which defines the [`MbedtlsError`] type which describes known Mbed TLS error
8//! codes and the [`Error`] type for all errors in this library
9
10use num_enum::TryFromPrimitive;
11
12/// Error type for all errors (Mbed TLS and other layers)
13///
14/// Mbed TLS uses C `int`s for its error codes using negative values from the `i16` range. Whenever
15/// an Mbed TLS error is forwarded, we try to translate it into an [`MbedtlsError`]. If this
16/// succeeds, the error variant will be [`Error::Mbedtls`], if this fails the variant will be
17/// [`Error::Unknown`].
18#[derive(Clone, Copy, Eq, PartialEq, Debug)]
19#[non_exhaustive]
20pub enum Error {
21    /// Known errors from Mbed TLS
22    Mbedtls(MbedtlsError),
23    /// Unknown errors from Mbed TLS
24    Unknown(core::ffi::c_int),
25}
26
27impl From<core::ffi::c_int> for Error {
28    fn from(value: core::ffi::c_int) -> Self {
29        let Ok(code): Result<i16, core::num::TryFromIntError> = value.try_into() else {
30            log::error!("Mbed TLS error code {value} is out of i16 range.");
31            return Error::Unknown(value);
32        };
33        if let Ok(mbedtls_error) = code.try_into() {
34            Error::Mbedtls(mbedtls_error)
35        } else {
36            log::warn!("Encountered unknown Mbed TLS error code {value}");
37            Error::Unknown(value)
38        }
39    }
40}
41
42/// Known mbedtls error codes
43//
44// To re-create or check this list, all error codes can be found in the generated `bindings.rs`.
45// Filter this by the MBEDTLS_ERR_ prefix and adjust with the scripting language or text editor
46// features of your choice.
47#[derive(Clone, Copy, TryFromPrimitive, Eq, PartialEq, Debug)]
48#[non_exhaustive]
49#[repr(i16)]
50pub enum MbedtlsError {
51    MpiFileIoError = embedded_mbedtls_sys::MBEDTLS_ERR_MPI_FILE_IO_ERROR as i16,
52    MpiBadInputData = embedded_mbedtls_sys::MBEDTLS_ERR_MPI_BAD_INPUT_DATA as i16,
53    MpiInvalidCharacter = embedded_mbedtls_sys::MBEDTLS_ERR_MPI_INVALID_CHARACTER as i16,
54    MpiBufferTooSmall = embedded_mbedtls_sys::MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL as i16,
55    MpiNegativeValue = embedded_mbedtls_sys::MBEDTLS_ERR_MPI_NEGATIVE_VALUE as i16,
56    MpiDivisionByZero = embedded_mbedtls_sys::MBEDTLS_ERR_MPI_DIVISION_BY_ZERO as i16,
57    MpiNotAcceptable = embedded_mbedtls_sys::MBEDTLS_ERR_MPI_NOT_ACCEPTABLE as i16,
58    MpiAllocFailed = embedded_mbedtls_sys::MBEDTLS_ERR_MPI_ALLOC_FAILED as i16,
59    EcpBadInputData = embedded_mbedtls_sys::MBEDTLS_ERR_ECP_BAD_INPUT_DATA as i16,
60    EcpBufferTooSmall = embedded_mbedtls_sys::MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL as i16,
61    EcpFeatureUnavailable = embedded_mbedtls_sys::MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE as i16,
62    EcpVerifyFailed = embedded_mbedtls_sys::MBEDTLS_ERR_ECP_VERIFY_FAILED as i16,
63    EcpAllocFailed = embedded_mbedtls_sys::MBEDTLS_ERR_ECP_ALLOC_FAILED as i16,
64    EcpRandomFailed = embedded_mbedtls_sys::MBEDTLS_ERR_ECP_RANDOM_FAILED as i16,
65    EcpInvalidKey = embedded_mbedtls_sys::MBEDTLS_ERR_ECP_INVALID_KEY as i16,
66    EcpSigLenMismatch = embedded_mbedtls_sys::MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH as i16,
67    EcpInProgress = embedded_mbedtls_sys::MBEDTLS_ERR_ECP_IN_PROGRESS as i16,
68    MdFeatureUnavailable = embedded_mbedtls_sys::MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE as i16,
69    MdBadInputData = embedded_mbedtls_sys::MBEDTLS_ERR_MD_BAD_INPUT_DATA as i16,
70    MdAllocFailed = embedded_mbedtls_sys::MBEDTLS_ERR_MD_ALLOC_FAILED as i16,
71    MdFileIoError = embedded_mbedtls_sys::MBEDTLS_ERR_MD_FILE_IO_ERROR as i16,
72    PkAllocFailed = embedded_mbedtls_sys::MBEDTLS_ERR_PK_ALLOC_FAILED as i16,
73    PkTypeMismatch = embedded_mbedtls_sys::MBEDTLS_ERR_PK_TYPE_MISMATCH as i16,
74    PkBadInputData = embedded_mbedtls_sys::MBEDTLS_ERR_PK_BAD_INPUT_DATA as i16,
75    PkFileIoError = embedded_mbedtls_sys::MBEDTLS_ERR_PK_FILE_IO_ERROR as i16,
76    PkKeyInvalidVersion = embedded_mbedtls_sys::MBEDTLS_ERR_PK_KEY_INVALID_VERSION as i16,
77    PkKeyInvalidFormat = embedded_mbedtls_sys::MBEDTLS_ERR_PK_KEY_INVALID_FORMAT as i16,
78    PkUnknownPkAlg = embedded_mbedtls_sys::MBEDTLS_ERR_PK_UNKNOWN_PK_ALG as i16,
79    PkPasswordRequired = embedded_mbedtls_sys::MBEDTLS_ERR_PK_PASSWORD_REQUIRED as i16,
80    PkPasswordMismatch = embedded_mbedtls_sys::MBEDTLS_ERR_PK_PASSWORD_MISMATCH as i16,
81    PkInvalidPubkey = embedded_mbedtls_sys::MBEDTLS_ERR_PK_INVALID_PUBKEY as i16,
82    PkInvalidAlg = embedded_mbedtls_sys::MBEDTLS_ERR_PK_INVALID_ALG as i16,
83    PkUnknownNamedCurve = embedded_mbedtls_sys::MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE as i16,
84    PkFeatureUnavailable = embedded_mbedtls_sys::MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE as i16,
85    PkSigLenMismatch = embedded_mbedtls_sys::MBEDTLS_ERR_PK_SIG_LEN_MISMATCH as i16,
86    PkBufferTooSmall = embedded_mbedtls_sys::MBEDTLS_ERR_PK_BUFFER_TOO_SMALL as i16,
87    CipherFeatureUnavailable = embedded_mbedtls_sys::MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE as i16,
88    CipherBadInputData = embedded_mbedtls_sys::MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA as i16,
89    CipherAllocFailed = embedded_mbedtls_sys::MBEDTLS_ERR_CIPHER_ALLOC_FAILED as i16,
90    CipherInvalidPadding = embedded_mbedtls_sys::MBEDTLS_ERR_CIPHER_INVALID_PADDING as i16,
91    CipherFullBlockExpected = embedded_mbedtls_sys::MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED as i16,
92    CipherAuthFailed = embedded_mbedtls_sys::MBEDTLS_ERR_CIPHER_AUTH_FAILED as i16,
93    CipherInvalidContext = embedded_mbedtls_sys::MBEDTLS_ERR_CIPHER_INVALID_CONTEXT as i16,
94    Sha1BadInputData = embedded_mbedtls_sys::MBEDTLS_ERR_SHA1_BAD_INPUT_DATA as i16,
95    Sha256BadInputData = embedded_mbedtls_sys::MBEDTLS_ERR_SHA256_BAD_INPUT_DATA as i16,
96    Sha512BadInputData = embedded_mbedtls_sys::MBEDTLS_ERR_SHA512_BAD_INPUT_DATA as i16,
97    Sha3BadInputData = embedded_mbedtls_sys::MBEDTLS_ERR_SHA3_BAD_INPUT_DATA as i16,
98    Poly1305BadInputData = embedded_mbedtls_sys::MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA as i16,
99    ChachapolyBadState = embedded_mbedtls_sys::MBEDTLS_ERR_CHACHAPOLY_BAD_STATE as i16,
100    ChachapolyAuthFailed = embedded_mbedtls_sys::MBEDTLS_ERR_CHACHAPOLY_AUTH_FAILED as i16,
101    Chacha20BadInputData = embedded_mbedtls_sys::MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA as i16,
102    SslCryptoInProgress = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS as i16,
103    SslFeatureUnavailable = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE as i16,
104    SslBadInputData = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_BAD_INPUT_DATA as i16,
105    SslInvalidMac = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_INVALID_MAC as i16,
106    SslInvalidRecord = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_INVALID_RECORD as i16,
107    SslConnEof = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_CONN_EOF as i16,
108    SslDecodeError = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_DECODE_ERROR as i16,
109    SslNoRng = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_NO_RNG as i16,
110    SslNoClientCertificate = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE as i16,
111    SslUnsupportedExtension = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_UNSUPPORTED_EXTENSION as i16,
112    SslNoApplicationProtocol = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_NO_APPLICATION_PROTOCOL as i16,
113    SslPrivateKeyRequired = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED as i16,
114    SslCaChainRequired = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_CA_CHAIN_REQUIRED as i16,
115    SslUnexpectedMessage = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE as i16,
116    SslFatalAlertMessage = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE as i16,
117    SslUnrecognizedName = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_UNRECOGNIZED_NAME as i16,
118    SslPeerCloseNotify = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY as i16,
119    SslBadCertificate = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_BAD_CERTIFICATE as i16,
120    SslReceivedNewSessionTicket =
121        embedded_mbedtls_sys::MBEDTLS_ERR_SSL_RECEIVED_NEW_SESSION_TICKET as i16,
122    SslCannotReadEarlyData = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_CANNOT_READ_EARLY_DATA as i16,
123    SslReceivedEarlyData = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_RECEIVED_EARLY_DATA as i16,
124    SslCannotWriteEarlyData = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_CANNOT_WRITE_EARLY_DATA as i16,
125    SslCacheEntryNotFound = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_CACHE_ENTRY_NOT_FOUND as i16,
126    SslAllocFailed = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_ALLOC_FAILED as i16,
127    SslHwAccelFailed = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_HW_ACCEL_FAILED as i16,
128    SslHwAccelFallthrough = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH as i16,
129    SslBadProtocolVersion = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_BAD_PROTOCOL_VERSION as i16,
130    SslHandshakeFailure = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_HANDSHAKE_FAILURE as i16,
131    SslSessionTicketExpired = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED as i16,
132    SslPkTypeMismatch = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH as i16,
133    SslUnknownIdentity = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY as i16,
134    SslInternalError = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_INTERNAL_ERROR as i16,
135    SslCounterWrapping = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_COUNTER_WRAPPING as i16,
136    SslWaitingServerHelloRenego =
137        embedded_mbedtls_sys::MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO as i16,
138    SslHelloVerifyRequired = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED as i16,
139    SslBufferTooSmall = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL as i16,
140    SslWantRead = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_WANT_READ as i16,
141    SslWantWrite = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_WANT_WRITE as i16,
142    SslTimeout = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_TIMEOUT as i16,
143    SslClientReconnect = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_CLIENT_RECONNECT as i16,
144    SslUnexpectedRecord = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_UNEXPECTED_RECORD as i16,
145    SslNonFatal = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_NON_FATAL as i16,
146    SslIllegalParameter = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER as i16,
147    SslContinueProcessing = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_CONTINUE_PROCESSING as i16,
148    SslAsyncInProgress = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS as i16,
149    SslEarlyMessage = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_EARLY_MESSAGE as i16,
150    SslUnexpectedCid = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_UNEXPECTED_CID as i16,
151    SslVersionMismatch = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_VERSION_MISMATCH as i16,
152    SslBadConfig = embedded_mbedtls_sys::MBEDTLS_ERR_SSL_BAD_CONFIG as i16,
153    AesInvalidKeyLength = embedded_mbedtls_sys::MBEDTLS_ERR_AES_INVALID_KEY_LENGTH as i16,
154    AesInvalidInputLength = embedded_mbedtls_sys::MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH as i16,
155    AesBadInputData = embedded_mbedtls_sys::MBEDTLS_ERR_AES_BAD_INPUT_DATA as i16,
156    EntropySourceFailed = embedded_mbedtls_sys::MBEDTLS_ERR_ENTROPY_SOURCE_FAILED as i16,
157    EntropyMaxSources = embedded_mbedtls_sys::MBEDTLS_ERR_ENTROPY_MAX_SOURCES as i16,
158    EntropyNoSourcesDefined = embedded_mbedtls_sys::MBEDTLS_ERR_ENTROPY_NO_SOURCES_DEFINED as i16,
159    EntropyNoStrongSource = embedded_mbedtls_sys::MBEDTLS_ERR_ENTROPY_NO_STRONG_SOURCE as i16,
160    EntropyFileIoError = embedded_mbedtls_sys::MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR as i16,
161    CtrDrbgEntropySourceFailed =
162        embedded_mbedtls_sys::MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED as i16,
163    CtrDrbgRequestTooBig = embedded_mbedtls_sys::MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG as i16,
164    CtrDrbgInputTooBig = embedded_mbedtls_sys::MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG as i16,
165    CtrDrbgFileIoError = embedded_mbedtls_sys::MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR as i16,
166    ErrorGenericError = embedded_mbedtls_sys::MBEDTLS_ERR_ERROR_GENERIC_ERROR as i16,
167    ErrorCorruptionDetected = embedded_mbedtls_sys::MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED as i16,
168    PlatformHwAccelFailed = embedded_mbedtls_sys::MBEDTLS_ERR_PLATFORM_HW_ACCEL_FAILED as i16,
169    PlatformFeatureUnsupported =
170        embedded_mbedtls_sys::MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED as i16,
171}