mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 09:26:29 +03:00
Pass passphrase to dc_pgp_symm_{en,de}crypt as &str
This commit is contained in:
committed by
holger krekel
parent
3d61c06ea9
commit
f1c026c5ec
@@ -208,12 +208,8 @@ pub fn dc_render_setup_file(context: &Context, passphrase: &str) -> Result<Strin
|
|||||||
_ => Some(("Autocrypt-Prefer-Encrypt", "mutual")),
|
_ => Some(("Autocrypt-Prefer-Encrypt", "mutual")),
|
||||||
};
|
};
|
||||||
let private_key_asc = private_key.to_asc(ac_headers);
|
let private_key_asc = private_key.to_asc(ac_headers);
|
||||||
let encr = {
|
let encr = dc_pgp_symm_encrypt(&passphrase, private_key_asc.as_bytes())
|
||||||
let private_key_asc_c = CString::yolo(private_key_asc);
|
.ok_or(format_err!("Failed to encrypt private key."))?;
|
||||||
let passphrase_c = CString::yolo(passphrase);
|
|
||||||
dc_pgp_symm_encrypt(passphrase_c.as_ptr(), private_key_asc_c.as_bytes())
|
|
||||||
.ok_or(format_err!("Failed to encrypt private key."))?
|
|
||||||
};
|
|
||||||
let replacement = format!(
|
let replacement = format!(
|
||||||
concat!(
|
concat!(
|
||||||
"-----BEGIN PGP MESSAGE-----\r\n",
|
"-----BEGIN PGP MESSAGE-----\r\n",
|
||||||
@@ -445,7 +441,7 @@ pub unsafe fn dc_decrypt_setup_file(
|
|||||||
{
|
{
|
||||||
/* decrypt symmetrically */
|
/* decrypt symmetrically */
|
||||||
if let Some(plain) = dc_pgp_symm_decrypt(
|
if let Some(plain) = dc_pgp_symm_decrypt(
|
||||||
passphrase,
|
as_str(passphrase),
|
||||||
std::slice::from_raw_parts(binary as *const u8, binary_bytes),
|
std::slice::from_raw_parts(binary as *const u8, binary_bytes),
|
||||||
) {
|
) {
|
||||||
let payload_c = CString::new(plain).unwrap();
|
let payload_c = CString::new(plain).unwrap();
|
||||||
|
|||||||
18
src/pgp.rs
18
src/pgp.rs
@@ -1,6 +1,5 @@
|
|||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
use std::convert::TryInto;
|
use std::convert::TryInto;
|
||||||
use std::ffi::CStr;
|
|
||||||
use std::io::Cursor;
|
use std::io::Cursor;
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
|
|
||||||
@@ -274,32 +273,25 @@ pub fn dc_pgp_pk_decrypt(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Symmetric encryption.
|
/// Symmetric encryption.
|
||||||
pub fn dc_pgp_symm_encrypt(passphrase: *const libc::c_char, plain: &[u8]) -> Option<String> {
|
pub fn dc_pgp_symm_encrypt(passphrase: &str, plain: &[u8]) -> Option<String> {
|
||||||
assert!(!passphrase.is_null(), "invalid passphrase");
|
|
||||||
|
|
||||||
let pw = unsafe { CStr::from_ptr(passphrase).to_str().unwrap() };
|
|
||||||
|
|
||||||
let mut rng = thread_rng();
|
let mut rng = thread_rng();
|
||||||
let lit_msg = Message::new_literal_bytes("", plain);
|
let lit_msg = Message::new_literal_bytes("", plain);
|
||||||
|
|
||||||
let s2k = StringToKey::new_default(&mut rng);
|
let s2k = StringToKey::new_default(&mut rng);
|
||||||
let msg = lit_msg.encrypt_with_password(&mut rng, s2k, Default::default(), || pw.into());
|
let msg =
|
||||||
|
lit_msg.encrypt_with_password(&mut rng, s2k, Default::default(), || passphrase.into());
|
||||||
|
|
||||||
msg.and_then(|msg| msg.to_armored_string(None)).ok()
|
msg.and_then(|msg| msg.to_armored_string(None)).ok()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Symmetric decryption.
|
/// Symmetric decryption.
|
||||||
pub fn dc_pgp_symm_decrypt(passphrase: *const libc::c_char, ctext: &[u8]) -> Option<Vec<u8>> {
|
pub fn dc_pgp_symm_decrypt(passphrase: &str, ctext: &[u8]) -> Option<Vec<u8>> {
|
||||||
assert!(!passphrase.is_null(), "invalid passphrase");
|
|
||||||
|
|
||||||
let pw = unsafe { CStr::from_ptr(passphrase).to_str().unwrap() };
|
|
||||||
|
|
||||||
let enc_msg = Message::from_bytes(Cursor::new(ctext));
|
let enc_msg = Message::from_bytes(Cursor::new(ctext));
|
||||||
|
|
||||||
enc_msg
|
enc_msg
|
||||||
.and_then(|msg| {
|
.and_then(|msg| {
|
||||||
let mut decryptor = msg
|
let mut decryptor = msg
|
||||||
.decrypt_with_password(|| pw.into())
|
.decrypt_with_password(|| passphrase.into())
|
||||||
.expect("failed decryption");
|
.expect("failed decryption");
|
||||||
decryptor.next().expect("no message")
|
decryptor.next().expect("no message")
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user