mirror of
https://github.com/chatmail/core.git
synced 2026-05-03 05:16:28 +03:00
pgp: replace custom PgpKeygenError with anyhow
This commit is contained in:
50
src/pgp.rs
50
src/pgp.rs
@@ -110,27 +110,6 @@ pub fn split_armored_data(buf: &[u8]) -> Result<(BlockType, BTreeMap<String, Str
|
|||||||
Ok((typ, headers, bytes))
|
Ok((typ, headers, bytes))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Error with generating a PGP keypair.
|
|
||||||
///
|
|
||||||
/// Most of these are likely coding errors rather than user errors
|
|
||||||
/// since all variability is hardcoded.
|
|
||||||
#[derive(Debug, thiserror::Error)]
|
|
||||||
#[error("PgpKeygenError: {message}")]
|
|
||||||
pub struct PgpKeygenError {
|
|
||||||
message: String,
|
|
||||||
#[source]
|
|
||||||
cause: anyhow::Error,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl PgpKeygenError {
|
|
||||||
fn new(message: impl Into<String>, cause: impl Into<anyhow::Error>) -> Self {
|
|
||||||
Self {
|
|
||||||
message: message.into(),
|
|
||||||
cause: cause.into(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// A PGP keypair.
|
/// A PGP keypair.
|
||||||
///
|
///
|
||||||
/// This has it's own struct to be able to keep the public and secret
|
/// This has it's own struct to be able to keep the public and secret
|
||||||
@@ -143,10 +122,7 @@ pub struct KeyPair {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Create a new key pair.
|
/// Create a new key pair.
|
||||||
pub(crate) fn create_keypair(
|
pub(crate) fn create_keypair(addr: EmailAddress, keygen_type: KeyGenType) -> Result<KeyPair> {
|
||||||
addr: EmailAddress,
|
|
||||||
keygen_type: KeyGenType,
|
|
||||||
) -> std::result::Result<KeyPair, PgpKeygenError> {
|
|
||||||
let (secret_key_type, public_key_type) = match keygen_type {
|
let (secret_key_type, public_key_type) = match keygen_type {
|
||||||
KeyGenType::Rsa2048 => (PgpKeyType::Rsa(2048), PgpKeyType::Rsa(2048)),
|
KeyGenType::Rsa2048 => (PgpKeyType::Rsa(2048), PgpKeyType::Rsa(2048)),
|
||||||
KeyGenType::Ed25519 | KeyGenType::Default => (PgpKeyType::EdDSA, PgpKeyType::ECDH),
|
KeyGenType::Ed25519 | KeyGenType::Default => (PgpKeyType::EdDSA, PgpKeyType::ECDH),
|
||||||
@@ -181,30 +157,32 @@ pub(crate) fn create_keypair(
|
|||||||
.can_encrypt(true)
|
.can_encrypt(true)
|
||||||
.passphrase(None)
|
.passphrase(None)
|
||||||
.build()
|
.build()
|
||||||
.map_err(|err| {
|
.map_err(|e| format_err!("{}", e))
|
||||||
PgpKeygenError::new("failed to build subkey parameters", format_err!("{}", err))
|
.context("failed to build subkey parameters")?,
|
||||||
})?,
|
|
||||||
)
|
)
|
||||||
.build()
|
.build()
|
||||||
.map_err(|err| PgpKeygenError::new("invalid key params", format_err!("{}", err)))?;
|
.map_err(|e| format_err!("{}", e))
|
||||||
let key = key_params
|
.context("invalid key params")?;
|
||||||
.generate()
|
let key = key_params.generate().context("invalid params")?;
|
||||||
.map_err(|err| PgpKeygenError::new("invalid params", err))?;
|
|
||||||
let private_key = key
|
let private_key = key
|
||||||
.sign(|| "".into())
|
.sign(|| "".into())
|
||||||
.map_err(|err| PgpKeygenError::new("failed to sign secret key", err))?;
|
.map_err(|e| format_err!("{}", e))
|
||||||
|
.context("failed to sign secret key")?;
|
||||||
|
|
||||||
let public_key = private_key.public_key();
|
let public_key = private_key.public_key();
|
||||||
let public_key = public_key
|
let public_key = public_key
|
||||||
.sign(&private_key, || "".into())
|
.sign(&private_key, || "".into())
|
||||||
.map_err(|err| PgpKeygenError::new("failed to sign public key", err))?;
|
.map_err(|e| format_err!("{}", e))
|
||||||
|
.context("failed to sign public key")?;
|
||||||
|
|
||||||
private_key
|
private_key
|
||||||
.verify()
|
.verify()
|
||||||
.map_err(|err| PgpKeygenError::new("invalid private key generated", err))?;
|
.map_err(|e| format_err!("{}", e))
|
||||||
|
.context("invalid private key generated")?;
|
||||||
public_key
|
public_key
|
||||||
.verify()
|
.verify()
|
||||||
.map_err(|err| PgpKeygenError::new("invalid public key generated", err))?;
|
.map_err(|e| format_err!("{}", e))
|
||||||
|
.context("invalid public key generated")?;
|
||||||
|
|
||||||
Ok(KeyPair {
|
Ok(KeyPair {
|
||||||
addr,
|
addr,
|
||||||
|
|||||||
Reference in New Issue
Block a user