summaryrefslogtreecommitdiff
path: root/ext/crypto/decrypt.rs
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2022-06-20 16:53:57 +0530
committerGitHub <noreply@github.com>2022-06-20 16:53:57 +0530
commit4cbb2567b502445ef6c13acac64b5f93218db4ba (patch)
tree2431ef7490cbcbf54828c848c0dbedbf1aeff773 /ext/crypto/decrypt.rs
parent3d6fa64f19e74924813ece5e5fbd53023342bac8 (diff)
chore(ext/crypto): update webcrypto deps (#14452)
Diffstat (limited to 'ext/crypto/decrypt.rs')
-rw-r--r--ext/crypto/decrypt.rs78
1 files changed, 43 insertions, 35 deletions
diff --git a/ext/crypto/decrypt.rs b/ext/crypto/decrypt.rs
index b3989a7f6..85d5f5210 100644
--- a/ext/crypto/decrypt.rs
+++ b/ext/crypto/decrypt.rs
@@ -1,6 +1,7 @@
use crate::shared::*;
-use aes::BlockEncrypt;
-use aes::NewBlockCipher;
+use aes::cipher::block_padding::Pkcs7;
+use aes::cipher::BlockDecryptMut;
+use aes::cipher::KeyIvInit;
use aes_gcm::aead::generic_array::typenum::U12;
use aes_gcm::aead::generic_array::typenum::U16;
use aes_gcm::aead::generic_array::ArrayLength;
@@ -10,20 +11,16 @@ use aes_gcm::aes::Aes256;
use aes_gcm::AeadInPlace;
use aes_gcm::NewAead;
use aes_gcm::Nonce;
-use block_modes::BlockMode;
-use ctr::cipher::NewCipher;
use ctr::cipher::StreamCipher;
-use ctr::flavors::Ctr128BE;
-use ctr::flavors::Ctr32BE;
-use ctr::flavors::Ctr64BE;
-use ctr::flavors::CtrFlavor;
-use ctr::Ctr;
+use ctr::Ctr128BE;
+use ctr::Ctr32BE;
+use ctr::Ctr64BE;
use deno_core::error::custom_error;
use deno_core::error::type_error;
use deno_core::error::AnyError;
use deno_core::op;
use deno_core::ZeroCopyBuf;
-use rsa::pkcs1::FromRsaPrivateKey;
+use rsa::pkcs1::DecodeRsaPrivateKey;
use rsa::PaddingScheme;
use serde::Deserialize;
use sha1::Digest;
@@ -153,11 +150,15 @@ fn decrypt_aes_cbc(
let plaintext = match length {
128 => {
// Section 10.3 Step 2 of RFC 2315 https://www.rfc-editor.org/rfc/rfc2315
- type Aes128Cbc =
- block_modes::Cbc<aes::Aes128, block_modes::block_padding::Pkcs7>;
- let cipher = Aes128Cbc::new_from_slices(key, &iv)?;
+ type Aes128CbcDec = cbc::Decryptor<aes::Aes128>;
+ let cipher = Aes128CbcDec::new_from_slices(key, &iv).map_err(|_| {
+ custom_error(
+ "DOMExceptionOperationError",
+ "Invalid key or iv".to_string(),
+ )
+ })?;
- cipher.decrypt_vec(data).map_err(|_| {
+ cipher.decrypt_padded_vec_mut::<Pkcs7>(data).map_err(|_| {
custom_error(
"DOMExceptionOperationError",
"Decryption failed".to_string(),
@@ -166,11 +167,15 @@ fn decrypt_aes_cbc(
}
192 => {
// Section 10.3 Step 2 of RFC 2315 https://www.rfc-editor.org/rfc/rfc2315
- type Aes192Cbc =
- block_modes::Cbc<aes::Aes192, block_modes::block_padding::Pkcs7>;
- let cipher = Aes192Cbc::new_from_slices(key, &iv)?;
+ type Aes192CbcDec = cbc::Decryptor<aes::Aes192>;
+ let cipher = Aes192CbcDec::new_from_slices(key, &iv).map_err(|_| {
+ custom_error(
+ "DOMExceptionOperationError",
+ "Invalid key or iv".to_string(),
+ )
+ })?;
- cipher.decrypt_vec(data).map_err(|_| {
+ cipher.decrypt_padded_vec_mut::<Pkcs7>(data).map_err(|_| {
custom_error(
"DOMExceptionOperationError",
"Decryption failed".to_string(),
@@ -179,11 +184,15 @@ fn decrypt_aes_cbc(
}
256 => {
// Section 10.3 Step 2 of RFC 2315 https://www.rfc-editor.org/rfc/rfc2315
- type Aes256Cbc =
- block_modes::Cbc<aes::Aes256, block_modes::block_padding::Pkcs7>;
- let cipher = Aes256Cbc::new_from_slices(key, &iv)?;
+ type Aes256CbcDec = cbc::Decryptor<aes::Aes256>;
+ let cipher = Aes256CbcDec::new_from_slices(key, &iv).map_err(|_| {
+ custom_error(
+ "DOMExceptionOperationError",
+ "Invalid key or iv".to_string(),
+ )
+ })?;
- cipher.decrypt_vec(data).map_err(|_| {
+ cipher.decrypt_padded_vec_mut::<Pkcs7>(data).map_err(|_| {
custom_error(
"DOMExceptionOperationError",
"Decryption failed".to_string(),
@@ -197,16 +206,15 @@ fn decrypt_aes_cbc(
Ok(plaintext)
}
-fn decrypt_aes_ctr_gen<B, F>(
+fn decrypt_aes_ctr_gen<B>(
key: &[u8],
counter: &[u8],
data: &[u8],
) -> Result<Vec<u8>, AnyError>
where
- B: BlockEncrypt + NewBlockCipher,
- F: CtrFlavor<B::BlockSize>,
+ B: KeyIvInit + StreamCipher,
{
- let mut cipher = Ctr::<B, F>::new(key.into(), counter.into());
+ let mut cipher = B::new(key.into(), counter.into());
let mut plaintext = data.to_vec();
cipher
@@ -279,21 +287,21 @@ fn decrypt_aes_ctr(
match ctr_length {
32 => match key_length {
- 128 => decrypt_aes_ctr_gen::<aes::Aes128, Ctr32BE>(key, counter, data),
- 192 => decrypt_aes_ctr_gen::<aes::Aes192, Ctr32BE>(key, counter, data),
- 256 => decrypt_aes_ctr_gen::<aes::Aes256, Ctr32BE>(key, counter, data),
+ 128 => decrypt_aes_ctr_gen::<Ctr32BE<aes::Aes128>>(key, counter, data),
+ 192 => decrypt_aes_ctr_gen::<Ctr32BE<aes::Aes192>>(key, counter, data),
+ 256 => decrypt_aes_ctr_gen::<Ctr32BE<aes::Aes256>>(key, counter, data),
_ => Err(type_error("invalid length")),
},
64 => match key_length {
- 128 => decrypt_aes_ctr_gen::<aes::Aes128, Ctr64BE>(key, counter, data),
- 192 => decrypt_aes_ctr_gen::<aes::Aes192, Ctr64BE>(key, counter, data),
- 256 => decrypt_aes_ctr_gen::<aes::Aes256, Ctr64BE>(key, counter, data),
+ 128 => decrypt_aes_ctr_gen::<Ctr64BE<aes::Aes128>>(key, counter, data),
+ 192 => decrypt_aes_ctr_gen::<Ctr64BE<aes::Aes192>>(key, counter, data),
+ 256 => decrypt_aes_ctr_gen::<Ctr64BE<aes::Aes256>>(key, counter, data),
_ => Err(type_error("invalid length")),
},
128 => match key_length {
- 128 => decrypt_aes_ctr_gen::<aes::Aes128, Ctr128BE>(key, counter, data),
- 192 => decrypt_aes_ctr_gen::<aes::Aes192, Ctr128BE>(key, counter, data),
- 256 => decrypt_aes_ctr_gen::<aes::Aes256, Ctr128BE>(key, counter, data),
+ 128 => decrypt_aes_ctr_gen::<Ctr128BE<aes::Aes128>>(key, counter, data),
+ 192 => decrypt_aes_ctr_gen::<Ctr128BE<aes::Aes192>>(key, counter, data),
+ 256 => decrypt_aes_ctr_gen::<Ctr128BE<aes::Aes256>>(key, counter, data),
_ => Err(type_error("invalid length")),
},
_ => Err(type_error(