1use crate::errors::*;
2
3use crate::engine::ctx::State;
4use crate::engine::structs::{byte_array, lua_bytes};
5use crate::hlua::{self, AnyLuaValue};
6use sn0int_std::crypto;
7use std::sync::Arc;
8
9pub fn key_trunc_pad(lua: &mut hlua::Lua, state: Arc<dyn State>) {
10 lua.set("key_trunc_pad", hlua::function3(move |bytes: AnyLuaValue, len: u32, pad: u8| -> Result<AnyLuaValue> {
11 let bytes = byte_array(bytes)
12 .map_err(|err| state.set_error(err))?;
13 let bytes = crypto::key_trunc_pad(&bytes, len as usize, pad);
14 Ok(lua_bytes(&bytes))
15 }))
16}
17
18pub fn sodium_secretbox_open(lua: &mut hlua::Lua, state: Arc<dyn State>) {
19 lua.set("sodium_secretbox_open", hlua::function2(move |encrypted: AnyLuaValue, key: AnyLuaValue| -> Result<AnyLuaValue> {
20 let encrypted = byte_array(encrypted)
21 .map_err(|err| state.set_error(err))?;
22 let key = byte_array(key)
23 .map_err(|err| state.set_error(err))?;
24
25 let plain = crypto::sodium_secretbox_open(&encrypted, &key)
26 .map_err(|err| state.set_error(err))?;
27
28 Ok(lua_bytes(&plain))
29 }))
30}