Skip to content

Commit

Permalink
Chage rpgp lib version
Browse files Browse the repository at this point in the history
  • Loading branch information
kzaitsev committed Feb 26, 2024
1 parent c91cf60 commit f9f1ef3
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 133 deletions.
136 changes: 15 additions & 121 deletions ext/pgp_rb/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion ext/pgp_rb/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
51 changes: 40 additions & 11 deletions ext/pgp_rb/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 _};
Expand Down Expand Up @@ -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 {
Expand All @@ -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<Time, Error> {
Expand All @@ -104,18 +135,16 @@ impl PgpPublicKey {

fn encrypt_with_algorithm(ruby: &Ruby, rb_self: &PgpPublicKey, input: String, algorithm: Integer) -> Result<String, Error> {
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(),
Expand Down

0 comments on commit f9f1ef3

Please sign in to comment.