1use num_enum::TryFromPrimitive;
11
12#[derive(Clone, Copy, Eq, PartialEq, Debug)]
19#[non_exhaustive]
20pub enum Error {
21 Mbedtls(MbedtlsError),
23 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#[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}