summaryrefslogtreecommitdiffstats
path: root/openpgp/src/crypto/backend/cng
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2020-11-23 14:30:46 +0100
committerJustus Winter <justus@sequoia-pgp.org>2020-12-07 15:41:44 +0100
commit3b0b2e2905f03befa9e14163764c9cb797caf9d9 (patch)
tree94f65489c17b7540be575f861ac2e0f00197e34d /openpgp/src/crypto/backend/cng
parent6de3f7f02ef14d7d84e6d0a7aff6aaee12444392 (diff)
openpgp: Require Mode to be Send + Sync.
Diffstat (limited to 'openpgp/src/crypto/backend/cng')
-rw-r--r--openpgp/src/crypto/backend/cng/symmetric.rs24
1 files changed, 15 insertions, 9 deletions
diff --git a/openpgp/src/crypto/backend/cng/symmetric.rs b/openpgp/src/crypto/backend/cng/symmetric.rs
index 7d8281e7..432e6679 100644
--- a/openpgp/src/crypto/backend/cng/symmetric.rs
+++ b/openpgp/src/crypto/backend/cng/symmetric.rs
@@ -1,4 +1,5 @@
use std::convert::TryFrom;
+use std::sync::Mutex;
use win_crypto_ng::symmetric as cng;
@@ -8,9 +9,10 @@ use crate::{Error, Result};
use crate::types::SymmetricAlgorithm;
-impl Mode for cng::SymmetricAlgorithmKey {
+impl Mode for Mutex<cng::SymmetricAlgorithmKey> {
fn block_size(&self) -> usize {
- self.block_size().expect("CNG not to fail internally")
+ self.lock().expect("Mutex not to be poisoned")
+ .block_size().expect("CNG not to fail internally")
}
fn encrypt(
@@ -35,7 +37,9 @@ impl Mode for cng::SymmetricAlgorithmKey {
let len = std::cmp::min(src.len(), dst.len());
// NOTE: `None` IV is required for ECB mode but we don't ever use it.
- let buffer = cng::SymmetricAlgorithmKey::encrypt(self, Some(iv), src, None)?;
+ let buffer = cng::SymmetricAlgorithmKey::encrypt(
+ &*self.lock().expect("Mutex not to be poisoned"),
+ Some(iv), src, None)?;
Ok(dst[..len].copy_from_slice(&buffer.as_slice()[..len]))
}
@@ -61,7 +65,9 @@ impl Mode for cng::SymmetricAlgorithmKey {
let len = std::cmp::min(src.len(), dst.len());
// NOTE: `None` IV is required for ECB mode but we don't ever use it.
- let buffer = cng::SymmetricAlgorithmKey::decrypt(self, Some(iv), src, None)?;
+ let buffer = cng::SymmetricAlgorithmKey::decrypt(
+ &*self.lock().expect("Mutex not to be poisoned"),
+ Some(iv), src, None)?;
dst[..len].copy_from_slice(&buffer.as_slice()[..len]);
Ok(())
@@ -151,7 +157,7 @@ impl SymmetricAlgorithm {
// set to 8-bit CFB)
key.set_msg_block_len(key.block_size()?)?;
- Ok(Box::new(key))
+ Ok(Box::new(Mutex::new(key)))
}
/// Creates a symmetric cipher context for decrypting in CFB mode.
@@ -165,11 +171,11 @@ impl SymmetricAlgorithm {
let algo = cng::SymmetricAlgorithm::open(algo, cng::ChainingMode::Cbc)?;
- Ok(Box::new(
+ Ok(Box::new(Mutex::new(
algo.new_key(key).expect(
"CNG to successfully create a symmetric key for valid/supported algorithm"
)
- ))
+ )))
}
/// Creates a Nettle context for decrypting in CBC mode.
@@ -178,10 +184,10 @@ impl SymmetricAlgorithm {
let algo = cng::SymmetricAlgorithm::open(algo, cng::ChainingMode::Cbc)?;
- Ok(Box::new(
+ Ok(Box::new(Mutex::new(
algo.new_key(key).expect(
"CNG to successfully create a symmetric key for valid/supported algorithm"
)
- ))
+ )))
}
}