1use libc::{c_uchar, c_uint, size_t};
2
3use kestrel_crypto::scrypt as ktl_scrypt;
4
5#[no_mangle]
9pub extern "C" fn scrypt(
10 password: *const c_uchar,
11 password_len: size_t,
12 salt: *const c_uchar,
13 salt_len: size_t,
14 n: c_uint,
15 r: c_uint,
16 p: c_uint,
17 derived_key: *mut c_uchar,
18 dk_len: size_t,
19) {
20 let kpass = unsafe { std::slice::from_raw_parts(password as *const u8, password_len) };
21
22 let ksalt = unsafe { std::slice::from_raw_parts(salt as *const u8, salt_len) };
23
24 let kderived_key = unsafe { std::slice::from_raw_parts_mut(derived_key as *mut u8, dk_len) };
25
26 let dk = ktl_scrypt(kpass, ksalt, n, r, p, kderived_key.len());
27
28 kderived_key.copy_from_slice(dk.as_slice());
29}