mirror of
https://github.com/zama-ai/tfhe-rs.git
synced 2026-01-06 21:34:05 -05:00
83 lines
2.6 KiB
Rust
83 lines
2.6 KiB
Rust
use crate::c_api::utils::*;
|
|
use std::os::raw::c_int;
|
|
|
|
use super::{ShortintCiphertext, ShortintServerKey};
|
|
|
|
#[no_mangle]
|
|
pub unsafe extern "C" fn shortint_server_key_smart_add(
|
|
server_key: *const ShortintServerKey,
|
|
ct_left: *mut ShortintCiphertext,
|
|
ct_right: *mut ShortintCiphertext,
|
|
result: *mut *mut ShortintCiphertext,
|
|
) -> c_int {
|
|
catch_panic(|| {
|
|
check_ptr_is_non_null_and_aligned(result).unwrap();
|
|
|
|
let server_key = get_ref_checked(server_key).unwrap();
|
|
let ct_left = get_mut_checked(ct_left).unwrap();
|
|
let ct_right = get_mut_checked(ct_right).unwrap();
|
|
|
|
let heap_allocated_ct_result = Box::new(ShortintCiphertext(
|
|
server_key.0.smart_add(&mut ct_left.0, &mut ct_right.0),
|
|
));
|
|
|
|
*result = Box::into_raw(heap_allocated_ct_result);
|
|
})
|
|
}
|
|
|
|
#[no_mangle]
|
|
pub unsafe extern "C" fn shortint_server_key_unchecked_add(
|
|
server_key: *const ShortintServerKey,
|
|
ct_left: *mut ShortintCiphertext,
|
|
ct_right: *mut ShortintCiphertext,
|
|
result: *mut *mut ShortintCiphertext,
|
|
) -> c_int {
|
|
catch_panic(|| {
|
|
check_ptr_is_non_null_and_aligned(result).unwrap();
|
|
|
|
let server_key = get_ref_checked(server_key).unwrap();
|
|
let ct_left = get_mut_checked(ct_left).unwrap();
|
|
let ct_right = get_mut_checked(ct_right).unwrap();
|
|
|
|
let heap_allocated_ct_result = Box::new(ShortintCiphertext(
|
|
server_key.0.unchecked_add(&ct_left.0, &ct_right.0),
|
|
));
|
|
|
|
*result = Box::into_raw(heap_allocated_ct_result);
|
|
})
|
|
}
|
|
|
|
#[no_mangle]
|
|
pub unsafe extern "C" fn shortint_server_key_smart_add_assign(
|
|
server_key: *const ShortintServerKey,
|
|
ct_left_and_result: *mut ShortintCiphertext,
|
|
ct_right: *mut ShortintCiphertext,
|
|
) -> c_int {
|
|
catch_panic(|| {
|
|
let server_key = get_ref_checked(server_key).unwrap();
|
|
let ct_left_and_result = get_mut_checked(ct_left_and_result).unwrap();
|
|
let ct_right = get_mut_checked(ct_right).unwrap();
|
|
|
|
server_key
|
|
.0
|
|
.smart_add_assign(&mut ct_left_and_result.0, &mut ct_right.0);
|
|
})
|
|
}
|
|
|
|
#[no_mangle]
|
|
pub unsafe extern "C" fn shortint_server_key_unchecked_add_assign(
|
|
server_key: *const ShortintServerKey,
|
|
ct_left_and_result: *mut ShortintCiphertext,
|
|
ct_right: *mut ShortintCiphertext,
|
|
) -> c_int {
|
|
catch_panic(|| {
|
|
let server_key = get_ref_checked(server_key).unwrap();
|
|
let ct_left_and_result = get_mut_checked(ct_left_and_result).unwrap();
|
|
let ct_right = get_mut_checked(ct_right).unwrap();
|
|
|
|
server_key
|
|
.0
|
|
.unchecked_add_assign(&mut ct_left_and_result.0, &ct_right.0);
|
|
})
|
|
}
|