mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 09:26:29 +03:00
Make key::to_asc return String
This commit is contained in:
@@ -242,16 +242,16 @@ pub unsafe extern "C" fn dc_render_setup_file(
|
|||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some(payload_key_asc) = curr_private_key.map(|k| k.to_asc_c(headers)) {
|
if let Some(payload_key_asc) = curr_private_key.map(|k| k.to_asc(headers)) {
|
||||||
|
let payload_key_asc_c = CString::new(payload_key_asc).unwrap();
|
||||||
if let Some(encr) = dc_pgp_symm_encrypt(
|
if let Some(encr) = dc_pgp_symm_encrypt(
|
||||||
passphrase,
|
passphrase,
|
||||||
payload_key_asc as *const libc::c_void,
|
payload_key_asc_c.as_ptr() as *const libc::c_void,
|
||||||
strlen(payload_key_asc),
|
payload_key_asc_c.as_bytes().len(),
|
||||||
) {
|
) {
|
||||||
let encr_string_c = CString::new(encr).unwrap();
|
let encr_string_c = CString::new(encr).unwrap();
|
||||||
let mut encr_string = strdup(encr_string_c.as_ptr());
|
let mut encr_string = strdup(encr_string_c.as_ptr());
|
||||||
|
|
||||||
free(payload_key_asc as *mut libc::c_void);
|
|
||||||
let replacement: *mut libc::c_char =
|
let replacement: *mut libc::c_char =
|
||||||
dc_mprintf(b"-----BEGIN PGP MESSAGE-----\r\nPassphrase-Format: numeric9x4\r\nPassphrase-Begin: %s\x00"
|
dc_mprintf(b"-----BEGIN PGP MESSAGE-----\r\nPassphrase-Format: numeric9x4\r\nPassphrase-Begin: %s\x00"
|
||||||
as *const u8 as *const libc::c_char,
|
as *const u8 as *const libc::c_char,
|
||||||
|
|||||||
23
src/key.rs
23
src/key.rs
@@ -216,22 +216,16 @@ impl Key {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Each header line must be terminated by `\r\n`, the result must be freed.
|
/// Each header line must be terminated by `\r\n`
|
||||||
pub fn to_asc_c(&self, header: Option<(&str, &str)>) -> *mut libc::c_char {
|
pub fn to_asc(&self, header: Option<(&str, &str)>) -> String {
|
||||||
let headers = header.map(|(key, value)| {
|
let headers = header.map(|(key, value)| {
|
||||||
let mut m = BTreeMap::new();
|
let mut m = BTreeMap::new();
|
||||||
m.insert(key.to_string(), value.to_string());
|
m.insert(key.to_string(), value.to_string());
|
||||||
m
|
m
|
||||||
});
|
});
|
||||||
|
|
||||||
let buf = self
|
self.to_armored_string(headers.as_ref())
|
||||||
.to_armored_string(headers.as_ref())
|
.expect("failed to serialize key")
|
||||||
.expect("failed to serialize key");
|
|
||||||
let buf_c = CString::new(buf).unwrap();
|
|
||||||
|
|
||||||
// need to use strdup to allocate the result with malloc
|
|
||||||
// so it can be `free`d later.
|
|
||||||
unsafe { strdup(buf_c.as_ptr()) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn write_asc_to_file(&self, file: *const libc::c_char, context: &Context) -> bool {
|
pub fn write_asc_to_file(&self, file: *const libc::c_char, context: &Context) -> bool {
|
||||||
@@ -239,15 +233,16 @@ impl Key {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let file_content = self.to_asc_c(None);
|
let file_content = self.to_asc(None);
|
||||||
|
let file_content_c = CString::new(file_content).unwrap();
|
||||||
|
|
||||||
let success = if 0
|
let success = if 0
|
||||||
== unsafe {
|
== unsafe {
|
||||||
dc_write_file(
|
dc_write_file(
|
||||||
context,
|
context,
|
||||||
file,
|
file,
|
||||||
file_content as *const libc::c_void,
|
file_content_c.as_ptr() as *const libc::c_void,
|
||||||
strlen(file_content),
|
file_content_c.as_bytes().len(),
|
||||||
)
|
)
|
||||||
} {
|
} {
|
||||||
error!(context, 0, "Cannot write key to {}", to_string(file));
|
error!(context, 0, "Cannot write key to {}", to_string(file));
|
||||||
@@ -256,8 +251,6 @@ impl Key {
|
|||||||
true
|
true
|
||||||
};
|
};
|
||||||
|
|
||||||
unsafe { free(file_content as *mut libc::c_void) };
|
|
||||||
|
|
||||||
success
|
success
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user