/* * Copyright (c) 2021 Samsung Electronics Co., Ltd. All Rights Reserved * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 * as published by the Free Software Foundation. */ #include #include "mz_internal.h" #include "mz_log.h" struct mz_tee_driver_fns *g_tee_driver_fn; MzResult mz_wb_encrypt(uint8_t *pt, uint8_t *ct) { MzResult mz_ret = MZ_SUCCESS; uint8_t *iv; if (!addr_list) { MZ_LOG(err_level_error, "%s addr_list null\n", __func__); return MZ_CRYPTO_FAIL; } iv = (uint8_t *)(&(addr_list[1])); #ifdef MZ_TA //Get key from ta mz_ret = g_tee_driver_fn->encrypt(pt, ct, iv); #endif /* MZ_TA */ if (mz_ret != MZ_SUCCESS) MZ_LOG(err_level_error, "%s ta encrypt fail, ta error %d\n", __func__, mz_ret); return mz_ret; } //Crypto tee driver static char is_registered; MzResult register_mz_tee_crypto_driver(struct mz_tee_driver_fns *tee_driver_fns) { MzResult mz_ret = MZ_SUCCESS; g_tee_driver_fn = kmalloc(sizeof(*g_tee_driver_fn), GFP_KERNEL); if (!g_tee_driver_fn) { MZ_LOG(err_level_error, "%s kmalloc fail\n", __func__); mz_ret = MZ_DRIVER_FAIL; goto exit; } g_tee_driver_fn->encrypt = tee_driver_fns->encrypt; is_registered = 1; exit: return mz_ret; } void unregister_mz_tee_crypto_driver(void) { if (is_registered) { kfree(g_tee_driver_fn); g_tee_driver_fn = NULL; is_registered = 0; } } EXPORT_SYMBOL(register_mz_tee_crypto_driver); EXPORT_SYMBOL(unregister_mz_tee_crypto_driver);