diff --git a/dtrfs_api/Cargo.lock b/dtrfs_api/Cargo.lock index 4c4db8a..4be9e0f 100644 --- a/dtrfs_api/Cargo.lock +++ b/dtrfs_api/Cargo.lock @@ -36,7 +36,7 @@ dependencies = [ "brotli", "bytes", "bytestring", - "derive_more 0.99.18", + "derive_more", "encoding_rs", "flate2", "futures-core", @@ -172,7 +172,7 @@ dependencies = [ "bytestring", "cfg-if", "cookie", - "derive_more 0.99.18", + "derive_more", "encoding_rs", "futures-core", "futures-util", @@ -488,15 +488,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" -[[package]] -name = "convert_case" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" -dependencies = [ - "unicode-segmentation", -] - [[package]] name = "cookie" version = "0.16.2" @@ -614,35 +605,13 @@ version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ - "convert_case 0.4.0", + "convert_case", "proc-macro2", "quote", "rustc_version", "syn", ] -[[package]] -name = "derive_more" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" -dependencies = [ - "derive_more-impl", -] - -[[package]] -name = "derive_more-impl" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" -dependencies = [ - "convert_case 0.6.0", - "proc-macro2", - "quote", - "syn", - "unicode-xid", -] - [[package]] name = "digest" version = "0.10.7" @@ -694,7 +663,6 @@ dependencies = [ "actix-web", "base64", "bincode", - "derive_more 1.0.0", "ed25519-dalek", "lazy_static", "regex", @@ -703,6 +671,7 @@ dependencies = [ "serde", "sev", "sha3", + "thiserror 2.0.10", ] [[package]] @@ -1626,7 +1595,7 @@ checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", "libredox", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -2051,7 +2020,16 @@ version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3ac7f54ca534db81081ef1c1e7f6ea8a3ef428d2fc069097c079443d24124d3" +dependencies = [ + "thiserror-impl 2.0.10", ] [[package]] @@ -2065,6 +2043,17 @@ dependencies = [ "syn", ] +[[package]] +name = "thiserror-impl" +version = "2.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9465d30713b56a37ede7185763c3492a91be2f5fa68d958c44e41ab9248beb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "time" version = "0.3.36" @@ -2200,18 +2189,6 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" -[[package]] -name = "unicode-segmentation" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - [[package]] name = "untrusted" version = "0.9.0" diff --git a/dtrfs_api/Cargo.toml b/dtrfs_api/Cargo.toml index f73c6d9..a99a283 100644 --- a/dtrfs_api/Cargo.toml +++ b/dtrfs_api/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [dependencies] base64 = "0.22.1" bincode = "1.3.3" -derive_more = {version = "1.0.0", features = ["full"] } +thiserror = "2.0.10" regex = "1.11.1" sev = { version = "4.0", default-features = false, features = ['crypto_nossl','snp'] } ed25519-dalek = { version = "2.1.1", features = ["pem", "pkcs8"] } diff --git a/dtrfs_api/src/main.rs b/dtrfs_api/src/main.rs index 4e31bea..0704556 100644 --- a/dtrfs_api/src/main.rs +++ b/dtrfs_api/src/main.rs @@ -4,7 +4,7 @@ mod snp; use crate::os::OsError; use actix_web::{get, post, web, App, Error, HttpRequest, HttpResponse, HttpServer, ResponseError}; use base64::prelude::{Engine, BASE64_URL_SAFE}; -use derive_more::derive::{Display, Error, From}; +use thiserror::Error; use ed25519_dalek::{pkcs8::DecodePublicKey, Signature, Verifier, VerifyingKey}; use lazy_static::lazy_static; use regex::Regex; @@ -17,26 +17,26 @@ use std::{ io::{BufReader, Read}, }; -#[derive(Debug, Display, From, Error)] +#[derive(Debug, Error)] pub enum DtrfsError { - #[display("OS error: {_0}")] + #[error("OS error: {0}")] OsError(#[from] OsError), - #[display("SNP error: {_0}")] + #[error("SNP error: {0}")] SnpError(#[from] snp::SNPError), - #[display("Could not find admin key in cmdline")] + #[error("Could not find admin key in cmdline")] AdminKeyNotFound, - #[display("Could not parse verifying key: {_0}")] - VerifyingKeyParsingError(ed25519_dalek::pkcs8::spki::Error), - #[display("Could not get signature from request")] + #[error("Could not parse verifying key: {0}")] + VerifyingKeyParsingError(#[from] ed25519_dalek::pkcs8::spki::Error), + #[error("Could not get signature from request")] SignatureNotFound, - #[display("Base64 decoding error: {_0}")] - Base64Error(base64::DecodeError), - #[display("IO error: {_0}")] + #[error("Base64 decoding error: {0}")] + Base64Error(#[from] base64::DecodeError), + #[error("IO error: {0}")] IoError(#[from] std::io::Error), - #[display("Error slicing into bytes: {_0}")] - SliceError(std::array::TryFromSliceError), - #[display("Error verifying signature: {_0}")] - SignatureVerificationError(ed25519_dalek::SignatureError), + #[error("Error slicing into bytes: {0}")] + SliceError(#[from] std::array::TryFromSliceError), + #[error("Error verifying signature: {0}")] + SignatureVerificationError(#[from] ed25519_dalek::SignatureError), } impl ResponseError for DtrfsError { diff --git a/dtrfs_api/src/os.rs b/dtrfs_api/src/os.rs index 3dcd1e3..3ca6e49 100644 --- a/dtrfs_api/src/os.rs +++ b/dtrfs_api/src/os.rs @@ -3,7 +3,7 @@ use base64::{ prelude::{Engine, BASE64_URL_SAFE}, DecodeError, }; -use derive_more::{Display, Error, From}; +use thiserror::Error; use std::{ fs::File, io::{self, BufRead, BufReader, Write}, @@ -12,31 +12,31 @@ use std::{ string::FromUtf8Error, }; -#[derive(Debug, Display, Error, From)] +#[derive(Debug, Error)] pub enum OsError { - #[display( + #[error( "OS installation script failed.\nScript stdout:\n{stdout}\nScript stderr:\n{stderr}" )] InstallationFailed { stdout: String, stderr: String }, - #[display("Could not decrypt disk.")] + #[error("Could not decrypt disk.")] DecryptionFailed, - #[display("Could not mount /dev/mapper/root to /mnt")] + #[error("Could not mount /dev/mapper/root to /mnt")] MountFailed, - #[display("Could not try hot keyfile: {_0}")] + #[error("Could not try hot keyfile: {0}")] TryHotKeyfileFailed(#[from] SNPError), - #[display("Could not replace hot keyfile using SNP KDF.")] + #[error("Could not replace hot keyfile using SNP KDF.")] ReplaceHotKeyfileFailed, - #[display("Operating system not mounted. Please install OS or decrypt existing OS.")] + #[error("Operating system not mounted. Please install OS or decrypt existing OS.")] OsNotMounted, - #[display("Supplied key is expected to have at least two words.")] + #[error("Supplied key is expected to have at least two words.")] InvalidSshKey, - #[display("authorized_keys already contains {err}")] + #[error("authorized_keys already contains {err}")] SshKeyAlreadyExists { err: String }, - #[display("I/O error: {_0}")] + #[error("I/O error: {0}")] IoError(#[from] io::Error), - #[display("Base64 decoding error: {_0}")] + #[error("Base64 decoding error: {0}")] Base64Error(#[from] DecodeError), - #[display("UTF-8 conversion error: {_0}")] + #[error("UTF-8 conversion error: {0}")] Utf8Error(#[from] FromUtf8Error), } diff --git a/dtrfs_api/src/snp.rs b/dtrfs_api/src/snp.rs index 5705f23..76878c6 100644 --- a/dtrfs_api/src/snp.rs +++ b/dtrfs_api/src/snp.rs @@ -1,17 +1,17 @@ use base64::prelude::{Engine, BASE64_URL_SAFE}; -use derive_more::{Display, Error, From}; +use thiserror::Error; use sev::error::UserApiError; use sev::firmware::guest::{AttestationReport, DerivedKey, Firmware, GuestFieldSelect}; -#[derive(Debug, Display, From, Error)] +#[derive(Debug, Error)] pub enum SNPError { - #[display("Could not parse the derived key: {_0}")] + #[error("Could not parse the derived key: {0}")] KeyParsingError(#[from] std::num::ParseIntError), - #[display("authorized_keys already contains: {_0}")] + #[error("authorized_keys already contains: {0}")] UserApiError(#[from] UserApiError), - #[display("I/O error: {_0}")] + #[error("I/O error: {0}")] FirmwareIOError(#[from] std::io::Error), - #[display("bincode Base64 decoding error: {_0}")] + #[error("bincode Base64 decoding error: {0}")] Base64Error(#[from] bincode::Error), }