Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor traits #315

Merged
merged 1 commit into from
Apr 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/algorithms/rsa.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use rand_core::CryptoRngCore;
use zeroize::Zeroize;

use crate::errors::{Error, Result};
use crate::keytraits::{PrivateKeyParts, PublicKeyParts};
use crate::traits::{PrivateKeyParts, PublicKeyParts};

/// Raw RSA encryption of m with the public key. No padding is performed.
#[inline]
Expand Down
2 changes: 1 addition & 1 deletion src/encoding.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
//! `pkcs1` crate's traits for types which impl the `pkcs8` crate's traits.

use crate::{
keytraits::{PrivateKeyParts, PublicKeyParts},
traits::{PrivateKeyParts, PublicKeyParts},
BigUint, RsaPrivateKey, RsaPublicKey,
};
use core::convert::{TryFrom, TryInto};
Expand Down
5 changes: 2 additions & 3 deletions src/key.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,8 @@ use zeroize::{Zeroize, ZeroizeOnDrop};
use crate::algorithms::generate::generate_multi_prime_key_with_exp;
use crate::dummy_rng::DummyRng;
use crate::errors::{Error, Result};
use crate::keytraits::{CrtValue, PrivateKeyParts, PublicKeyParts};

use crate::padding::{PaddingScheme, SignatureScheme};
use crate::traits::{PaddingScheme, PrivateKeyParts, PublicKeyParts, SignatureScheme};
use crate::CrtValue;

/// Represents the public part of an RSA key.
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
Expand Down
5 changes: 1 addition & 4 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,6 @@ pub use signature;

mod algorithms;
pub mod errors;
mod keytraits;
pub mod oaep;
pub mod pkcs1v15;
pub mod pss;
Expand All @@ -233,7 +232,6 @@ pub mod traits;
mod dummy_rng;
mod encoding;
mod key;
mod padding;

pub use pkcs1;
pub use pkcs8;
Expand All @@ -242,9 +240,8 @@ pub use sha2;

pub use crate::{
key::{RsaPrivateKey, RsaPublicKey},
keytraits::{CrtValue, PrivateKeyParts, PublicKeyParts},
oaep::Oaep,
padding::{PaddingScheme, SignatureScheme},
pkcs1v15::{Pkcs1v15Encrypt, Pkcs1v15Sign},
pss::Pss,
traits::keys::CrtValue,
};
6 changes: 3 additions & 3 deletions src/oaep.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ use crate::algorithms::rsa::{rsa_decrypt_and_check, rsa_encrypt};
use crate::dummy_rng::DummyRng;
use crate::errors::{Error, Result};
use crate::key::{self, RsaPrivateKey, RsaPublicKey};
use crate::keytraits::PublicKeyParts;
use crate::padding::PaddingScheme;
use crate::traits::PaddingScheme;
use crate::traits::{Decryptor, RandomizedDecryptor, RandomizedEncryptor};
use crate::traits::PublicKeyParts;

/// Encryption and Decryption using [OAEP padding](https://datatracker.ietf.org/doc/html/rfc8017#section-7.1).
///
Expand Down Expand Up @@ -422,9 +422,9 @@ where
#[cfg(test)]
mod tests {
use crate::key::{RsaPrivateKey, RsaPublicKey};
use crate::keytraits::PublicKeyParts;
use crate::oaep::{DecryptingKey, EncryptingKey, Oaep};
use crate::traits::{Decryptor, RandomizedDecryptor, RandomizedEncryptor};
use crate::traits::PublicKeyParts;

use alloc::string::String;
use digest::{Digest, DynDigest, FixedOutputReset};
Expand Down
6 changes: 3 additions & 3 deletions src/pkcs1v15.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ use crate::algorithms::rsa::{rsa_decrypt_and_check, rsa_encrypt};
use crate::dummy_rng::DummyRng;
use crate::errors::{Error, Result};
use crate::key;
use crate::keytraits::PublicKeyParts;
use crate::padding::{PaddingScheme, SignatureScheme};
use crate::traits::{PaddingScheme, SignatureScheme};
use crate::traits::PublicKeyParts;
use crate::traits::{Decryptor, EncryptingKeypair, RandomizedDecryptor, RandomizedEncryptor};
use crate::{RsaPrivateKey, RsaPublicKey};

Expand Down Expand Up @@ -792,7 +792,7 @@ mod tests {
use sha3::Sha3_256;
use signature::{RandomizedSigner, Signer, Verifier};

use crate::{PublicKeyParts, RsaPrivateKey, RsaPublicKey};
use crate::{traits::PublicKeyParts, RsaPrivateKey, RsaPublicKey};

fn get_private_key() -> RsaPrivateKey {
// In order to generate new test vectors you'll need the PEM form of this key:
Expand Down
4 changes: 2 additions & 2 deletions src/pss.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ use crate::algorithms::pad::{uint_to_be_pad, uint_to_zeroizing_be_pad};
use crate::algorithms::pss::*;
use crate::algorithms::rsa::{rsa_decrypt_and_check, rsa_encrypt};
use crate::errors::{Error, Result};
use crate::keytraits::PublicKeyParts;
use crate::padding::SignatureScheme;
use crate::traits::SignatureScheme;
use crate::traits::PublicKeyParts;
use crate::{RsaPrivateKey, RsaPublicKey};

#[cfg(feature = "getrandom")]
Expand Down
47 changes: 7 additions & 40 deletions src/traits.rs
Original file line number Diff line number Diff line change
@@ -1,42 +1,9 @@
//! Generic traits for message encryption and decryption
//! RSA-related trait definitions.

use alloc::vec::Vec;
use rand_core::CryptoRngCore;
mod encryption;
pub(crate) mod keys;
mod padding;

use crate::errors::Result;

/// Encrypt the message using provided random source
pub trait RandomizedEncryptor {
/// Encrypt the given message.
fn encrypt_with_rng<R: CryptoRngCore + ?Sized>(
&self,
rng: &mut R,
msg: &[u8],
) -> Result<Vec<u8>>;
}

/// Decrypt the given message
pub trait Decryptor {
/// Decrypt the given message.
fn decrypt(&self, ciphertext: &[u8]) -> Result<Vec<u8>>;
}

/// Decrypt the given message using provided random source
pub trait RandomizedDecryptor {
/// Decrypt the given message.
fn decrypt_with_rng<R: CryptoRngCore + ?Sized>(
&self,
rng: &mut R,
ciphertext: &[u8],
) -> Result<Vec<u8>>;
}

/// Encryption keypair with an associated encryption key.
pub trait EncryptingKeypair {
/// Encrypting key type for this keypair.
type EncryptingKey: Clone;

/// Get the encrypting key which can encrypt messages to be decrypted by
/// the decryption key portion of this keypair.
fn encrypting_key(&self) -> Self::EncryptingKey;
}
pub use encryption::{Decryptor, EncryptingKeypair, RandomizedDecryptor, RandomizedEncryptor};
pub use keys::{PrivateKeyParts, PublicKeyParts};
pub use padding::{PaddingScheme, SignatureScheme};
42 changes: 42 additions & 0 deletions src/traits/encryption.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
//! Encryption-related traits.

use alloc::vec::Vec;
use rand_core::CryptoRngCore;

use crate::errors::Result;

/// Encrypt the message using provided random source
pub trait RandomizedEncryptor {
/// Encrypt the given message.
fn encrypt_with_rng<R: CryptoRngCore + ?Sized>(
&self,
rng: &mut R,
msg: &[u8],
) -> Result<Vec<u8>>;
}

/// Decrypt the given message
pub trait Decryptor {
/// Decrypt the given message.
fn decrypt(&self, ciphertext: &[u8]) -> Result<Vec<u8>>;
}

/// Decrypt the given message using provided random source
pub trait RandomizedDecryptor {
/// Decrypt the given message.
fn decrypt_with_rng<R: CryptoRngCore + ?Sized>(
&self,
rng: &mut R,
ciphertext: &[u8],
) -> Result<Vec<u8>>;
}

/// Encryption keypair with an associated encryption key.
pub trait EncryptingKeypair {
/// Encrypting key type for this keypair.
type EncryptingKey: Clone;

/// Get the encrypting key which can encrypt messages to be decrypted by
/// the decryption key portion of this keypair.
fn encrypting_key(&self) -> Self::EncryptingKey;
}
File renamed without changes.
File renamed without changes.
3 changes: 2 additions & 1 deletion tests/pkcs1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
use hex_literal::hex;
use rsa::{
pkcs1::{DecodeRsaPrivateKey, DecodeRsaPublicKey, EncodeRsaPrivateKey, EncodeRsaPublicKey},
PrivateKeyParts, PublicKeyParts, RsaPrivateKey, RsaPublicKey,
traits::{PrivateKeyParts, PublicKeyParts},
RsaPrivateKey, RsaPublicKey,
};

#[cfg(feature = "pem")]
Expand Down
3 changes: 2 additions & 1 deletion tests/pkcs8.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ const RSA_2048_PUB_PEM: &str = include_str!("examples/pkcs8/rsa2048-pub.pem");
use hex_literal::hex;
use rsa::{
pkcs8::{DecodePrivateKey, DecodePublicKey, EncodePrivateKey, EncodePublicKey},
PrivateKeyParts, PublicKeyParts, RsaPrivateKey, RsaPublicKey,
traits::{PrivateKeyParts, PublicKeyParts},
RsaPrivateKey, RsaPublicKey,
};

#[cfg(feature = "pem")]
Expand Down