diff --git a/ext/pgp_rb/Cargo.lock b/ext/pgp_rb/Cargo.lock index fbda522..4e0bfe8 100644 --- a/ext/pgp_rb/Cargo.lock +++ b/ext/pgp_rb/Cargo.lock @@ -425,22 +425,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "dsa" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48bc224a9084ad760195584ce5abb3c2c34a225fa312a128ad245a6b412b7689" -dependencies = [ - "digest", - "num-bigint-dig", - "num-traits", - "pkcs8", - "rfc6979", - "sha2", - "signature", - "zeroize", -] - [[package]] name = "ecdsa" version = "0.16.9" @@ -506,12 +490,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - [[package]] name = "ff" version = "0.13.0" @@ -583,12 +561,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - [[package]] name = "hex" version = "0.4.3" @@ -651,16 +623,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" -[[package]] -name = "indexmap" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" -dependencies = [ - "equivalent", - "hashbrown", -] - [[package]] name = "inout" version = "0.1.3" @@ -670,12 +632,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "iter-read" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a598c1abae8e3456ebda517868b254b6bc2a9bb6501ffd5b9d0875bf332e048b" - [[package]] name = "itertools" version = "0.12.1" @@ -694,20 +650,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "k256" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" -dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "once_cell", - "sha2", - "signature", -] - [[package]] name = "keccak" version = "0.1.5" @@ -840,6 +782,17 @@ dependencies = [ "zeroize", ] +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + [[package]] name = "num-integer" version = "0.1.46" @@ -870,27 +823,6 @@ dependencies = [ "libm", ] -[[package]] -name = "num_enum" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.50", -] - [[package]] name = "once_cell" version = "1.19.0" @@ -932,9 +864,9 @@ dependencies = [ [[package]] name = "pgp" -version = "0.11.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "031fa1e28c4cb54c90502ef0642a44ef10ec8349349ebe6372089f1b1ef4f297" +checksum = "27e1f8e085bfa9b85763fe3ddaacbe90a09cd847b3833129153a6cb063bbe132" dependencies = [ "aes", "base64", @@ -949,27 +881,23 @@ dependencies = [ "cfb-mode", "chrono", "cipher", - "const-oid", "crc24", "curve25519-dalek", "derive_builder", "des", "digest", - "dsa", "ed25519-dalek", "elliptic-curve", "flate2", "generic-array", "hex", "idea", - "iter-read", - "k256", "log", "md-5", "nom", "num-bigint-dig", + "num-derive", "num-traits", - "num_enum", "p256", "p384", "rand", @@ -992,6 +920,7 @@ version = "1.0.0" dependencies = [ "base64", "magnus", + "num-traits", "pgp", "rand", ] @@ -1038,15 +967,6 @@ dependencies = [ "elliptic-curve", ] -[[package]] -name = "proc-macro-crate" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" -dependencies = [ - "toml_edit", -] - [[package]] name = "proc-macro2" version = "1.0.78" @@ -1390,23 +1310,6 @@ dependencies = [ "syn 2.0.50", ] -[[package]] -name = "toml_datetime" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" - -[[package]] -name = "toml_edit" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow", -] - [[package]] name = "twofish" version = "0.7.1" @@ -1626,15 +1529,6 @@ version = "0.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0770833d60a970638e989b3fa9fd2bb1aaadcf88963d1659fd7d9990196ed2d6" -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - [[package]] name = "x25519-dalek" version = "2.0.1" diff --git a/ext/pgp_rb/Cargo.toml b/ext/pgp_rb/Cargo.toml index 422ba3b..f1680a6 100644 --- a/ext/pgp_rb/Cargo.toml +++ b/ext/pgp_rb/Cargo.toml @@ -4,10 +4,11 @@ version = "1.0.0" edition = "2021" [dependencies] -pgp = "0.11.0" +pgp = "0.10.2" rand = "0.8.5" magnus = { git = "https://github.com/matsadler/magnus.git", default_features = false } base64 = "0.21.7" +num-traits = "0.2.18" [lib] crate-type = ["cdylib"] diff --git a/ext/pgp_rb/src/lib.rs b/ext/pgp_rb/src/lib.rs index 9194624..f97800f 100644 --- a/ext/pgp_rb/src/lib.rs +++ b/ext/pgp_rb/src/lib.rs @@ -7,8 +7,12 @@ use magnus::{ }; use pgp::composed::{Message, Deserializable, SignedPublicKey}; +use pgp::crypto::public_key::PublicKeyAlgorithm; use pgp::crypto::sym::SymmetricKeyAlgorithm; + +use pgp::types::KeyVersion; use pgp::types::KeyTrait; +use num_traits::cast::FromPrimitive; use std::io::Cursor; use base64::{engine::general_purpose, Engine as _}; @@ -68,7 +72,29 @@ impl PgpPublicKey { } fn algorithm(rb_self: &PgpPublicKey) -> u8 { - u8::from(rb_self.signed_public_key.algorithm()) + match rb_self.signed_public_key.algorithm() { + PublicKeyAlgorithm::RSA => 1, + PublicKeyAlgorithm::RSAEncrypt => 2, + PublicKeyAlgorithm::RSASign => 3, + PublicKeyAlgorithm::ElgamalSign => 16, + PublicKeyAlgorithm::DSA => 17, + PublicKeyAlgorithm::ECDH => 18, + PublicKeyAlgorithm::ECDSA => 19, + PublicKeyAlgorithm::Elgamal => 20, + PublicKeyAlgorithm::DiffieHellman => 21, + PublicKeyAlgorithm::EdDSA => 22, + PublicKeyAlgorithm::Private100 => 100, + PublicKeyAlgorithm::Private101 => 101, + PublicKeyAlgorithm::Private102 => 102, + PublicKeyAlgorithm::Private103 => 103, + PublicKeyAlgorithm::Private104 => 104, + PublicKeyAlgorithm::Private105 => 105, + PublicKeyAlgorithm::Private106 => 106, + PublicKeyAlgorithm::Private107 => 107, + PublicKeyAlgorithm::Private108 => 108, + PublicKeyAlgorithm::Private109 => 109, + PublicKeyAlgorithm::Private110 => 110 + } } fn is_signing_key(rb_self: &PgpPublicKey) -> bool { @@ -80,7 +106,12 @@ impl PgpPublicKey { } fn version(rb_self: &PgpPublicKey) -> u8 { - u8::from(rb_self.signed_public_key.primary_key.version()) + match rb_self.signed_public_key.primary_key.version() { + KeyVersion::V2 => 2, + KeyVersion::V3 => 3, + KeyVersion::V4 => 4, + KeyVersion::V5 => 5 + } } fn created_at(ruby: &Ruby, rb_self: &PgpPublicKey) -> Result { @@ -104,18 +135,16 @@ impl PgpPublicKey { fn encrypt_with_algorithm(ruby: &Ruby, rb_self: &PgpPublicKey, input: String, algorithm: Integer) -> Result { let alg = match algorithm.to_u8() { - Ok(v) => SymmetricKeyAlgorithm::from(v), + Ok(v) => match SymmetricKeyAlgorithm::from_u8(v) { + Some(a) => a, + None => { + let error_message = format!("unsupported algorithm: {}", algorithm); + return Err(Error::new(ruby.exception_arg_error(), error_message)) + } + }, Err(e) => return Err(e) }; - match alg { - SymmetricKeyAlgorithm::Other(_) => { - let error_message = format!("unsupported algorithm: {}", algorithm); - return Err(Error::new(ruby.exception_arg_error(), error_message)) - }, - _ => {} - } - let msg = Message::new_literal("", &input.to_string()); let encrypted = msg.encrypt_to_keys( &mut rand::thread_rng(),