sn0int/runtime/
crypto.rs

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}