Skip to content

Commit 4a69e12

Browse files
committed
#57 hpke decrypt
1 parent 7183e54 commit 4a69e12

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

src/hpke/mod.rs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::ffi::c_uchar;
22

33
use cas_lib::hybrid::{cas_hybrid::CASHybrid, hpke::CASHPKE};
4-
use types::{HpkeEncrypt, HpkeKeyPair};
4+
use types::{HpkeDecrypt, HpkeEncrypt, HpkeKeyPair};
55

66
mod types;
77

@@ -59,4 +59,33 @@ pub extern "C" fn hpke_encrypt(
5959
std::mem::forget(ciphertext);
6060
std::mem::forget(tag);
6161
return_result
62+
}
63+
64+
#[no_mangle]
65+
pub extern "C" fn hpke_decrypt(
66+
ciphertext: *const c_uchar,
67+
ciphertext_length: usize,
68+
private_key: *const c_uchar,
69+
private_keylength: usize,
70+
encapped_key: *const c_uchar,
71+
encapped_key_length: usize,
72+
tag: *const c_uchar,
73+
tag_length: usize,
74+
info_str: *const c_uchar,
75+
info_str_length: usize,
76+
) -> HpkeDecrypt {
77+
let ciphertext = unsafe { std::slice::from_raw_parts(ciphertext, ciphertext_length) }.to_vec();
78+
let private_key = unsafe { std::slice::from_raw_parts(private_key, private_keylength) }.to_vec();
79+
let encapped_key = unsafe { std::slice::from_raw_parts(encapped_key, encapped_key_length) }.to_vec();
80+
let tag = unsafe { std::slice::from_raw_parts(tag, tag_length)}.to_vec();
81+
let info_str = unsafe { std::slice::from_raw_parts(info_str, info_str_length) }.to_vec();
82+
let mut plaintext = <CASHPKE as CASHybrid>::decrypt(ciphertext, private_key, encapped_key, tag, info_str);
83+
let plaintext_capacity = plaintext.capacity();
84+
plaintext.reserve_exact(plaintext_capacity);
85+
let return_result = HpkeDecrypt {
86+
plaintext_ptr: plaintext.as_mut_ptr(),
87+
plaintext_ptr_length: plaintext.len()
88+
};
89+
std::mem::forget(plaintext);
90+
return_result
6291
}

src/hpke/types.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,10 @@ pub struct HpkeEncrypt {
1818
pub ciphertext_ptr_length: usize,
1919
pub tag_ptr: *mut c_uchar,
2020
pub tag_ptr_length: usize
21+
}
22+
23+
#[repr(C)]
24+
pub struct HpkeDecrypt {
25+
pub plaintext_ptr: *mut c_uchar,
26+
pub plaintext_ptr_length: usize
2127
}

0 commit comments

Comments
 (0)