sentc-crypto 0.15.0

The main implementation of the sentc sdk.
Documentation
use alloc::string::String;
use alloc::vec::Vec;

use sentc_crypto_common::file::BelongsToType;
use sentc_crypto_std_keys::util::SymmetricKey;

use crate::crypto::{prepare_sign_key, prepare_verify_key};
use crate::keys::std::StdFileEncryptor;
use crate::util::{export_core_sym_key_to_string, import_core_sym_key};
use crate::SdkError;

pub fn prepare_register_file(
	master_key_id: String,
	key: &str,
	encrypted_content_key: String,
	belongs_to_id: Option<String>,
	belongs_to_type: &str,
	file_name: Option<String>,
) -> Result<(String, Option<String>), String>
{
	let belongs_to_type: BelongsToType = serde_json::from_str(belongs_to_type).map_err(SdkError::JsonParseFailed)?;

	let key: SymmetricKey = key.parse()?;

	let (server_input, encrypted_file_name) = super::file::prepare_register_file(
		master_key_id,
		&key,
		encrypted_content_key,
		belongs_to_id,
		belongs_to_type,
		file_name,
	)?;

	Ok((server_input, encrypted_file_name))
}

pub fn done_register_file(server_output: &str) -> Result<(String, String), String>
{
	Ok(super::file::done_register_file(server_output)?)
}

pub fn prepare_file_name_update(key: &str, file_name: Option<String>) -> Result<String, String>
{
	let key: SymmetricKey = key.parse()?;
	Ok(super::file::prepare_file_name_update(&key, file_name)?)
}

pub fn encrypt_file_part_start(key: &str, part: &[u8], sign_key: Option<&str>) -> Result<(Vec<u8>, String), String>
{
	let sign_key = prepare_sign_key(sign_key)?;
	let key: SymmetricKey = key.parse()?;

	let (encrypted_part, file_key) = StdFileEncryptor::encrypt_file_part_start(&key, part, sign_key.as_ref())?;

	let exported_file_key = export_core_sym_key_to_string(file_key)?;

	Ok((encrypted_part, exported_file_key))
}

pub fn encrypt_file_part(pre_content_key: &str, part: &[u8], sign_key: Option<&str>) -> Result<(Vec<u8>, String), String>
{
	let sign_key = prepare_sign_key(sign_key)?;
	let key = import_core_sym_key(pre_content_key)?;

	let (encrypted_part, file_key) = StdFileEncryptor::encrypt_file_part(&key, part, sign_key.as_ref())?;

	let exported_file_key = export_core_sym_key_to_string(file_key)?;

	Ok((encrypted_part, exported_file_key))
}

pub fn decrypt_file_part_start(key: &str, part: &[u8], verify_key: Option<&str>) -> Result<(Vec<u8>, String), String>
{
	let verify_key = prepare_verify_key(verify_key)?;
	let key: SymmetricKey = key.parse()?;

	let (decrypted, next_key) = StdFileEncryptor::decrypt_file_part_start(&key, part, verify_key.as_ref())?;

	let exported_file_key = export_core_sym_key_to_string(next_key)?;

	Ok((decrypted, exported_file_key))
}

pub fn decrypt_file_part(pre_content_key: &str, part: &[u8], verify_key: Option<&str>) -> Result<(Vec<u8>, String), String>
{
	let verify_key = prepare_verify_key(verify_key)?;
	let key = import_core_sym_key(pre_content_key)?;

	let (decrypted, next_key) = StdFileEncryptor::decrypt_file_part(&key, part, verify_key.as_ref())?;

	let exported_file_key = export_core_sym_key_to_string(next_key)?;

	Ok((decrypted, exported_file_key))
}