* This file is part of the openHiTLS project.
*
* openHiTLS is licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include "crypt_errno.h"
#include "crypt_eal_provider.h"
#include "crypt_eal_implprovider.h"
#include "crypt_sha2.h"
#include "bsl_sal.h"
#include "sal_memimpl.h"
#include "bsl_err_internal.h"
#define CRYPT_EAL_DEFAULT_ATTR "provider=sha256_test"
#define PROVIDER_SHA256_NOT_SUPPORT 0x7F000001
CRYPT_SHA2_256_Ctx *Sha256NewCtx(void *provCtx, int32_t algId)
{
return CRYPT_SHA2_256_NewCtxEx(provCtx, algId);
}
const CRYPT_EAL_Func defMdSha256[] = {
{CRYPT_EAL_IMPLMD_NEWCTX, Sha256NewCtx},
{CRYPT_EAL_IMPLMD_INITCTX, CRYPT_SHA2_256_Init},
{CRYPT_EAL_IMPLMD_UPDATE, CRYPT_SHA2_256_Update},
{CRYPT_EAL_IMPLMD_FINAL, CRYPT_SHA2_256_Final},
{CRYPT_EAL_IMPLMD_DEINITCTX, CRYPT_SHA2_256_Deinit},
{CRYPT_EAL_IMPLMD_DUPCTX, CRYPT_SHA2_256_DupCtx},
{CRYPT_EAL_IMPLMD_COPYCTX, CRYPT_SHA2_256_CopyCtx},
{CRYPT_EAL_IMPLMD_GETPARAM, CRYPT_SHA2_256_GetParam},
{CRYPT_EAL_IMPLMD_FREECTX, CRYPT_SHA2_256_FreeCtx},
CRYPT_EAL_FUNC_END,
};
static const CRYPT_EAL_AlgInfo defMds[] = {
{CRYPT_MD_SHA256, defMdSha256, CRYPT_EAL_DEFAULT_ATTR},
CRYPT_EAL_ALGINFO_END
};
static int32_t CRYPT_EAL_Sha256ProvQuery(void *provCtx, int32_t operaId, const CRYPT_EAL_AlgInfo **algInfos)
{
(void)provCtx;
switch (operaId) {
case CRYPT_EAL_OPERAID_HASH:
*algInfos = defMds;
return CRYPT_SUCCESS;
default:
return PROVIDER_SHA256_NOT_SUPPORT;
}
}
static void CRYPT_EAL_Sha256ProvFree(void *provCtx)
{
(void)provCtx;
return;
}
static CRYPT_EAL_Func defProvOutFuncs[] = {
{CRYPT_EAL_PROVCB_QUERY, CRYPT_EAL_Sha256ProvQuery},
{CRYPT_EAL_PROVCB_FREE, CRYPT_EAL_Sha256ProvFree},
{CRYPT_EAL_PROVCB_CTRL, NULL},
CRYPT_EAL_FUNC_END
};
int32_t CRYPT_EAL_ProviderInit(CRYPT_EAL_ProvMgrCtx *mgrCtx,
BSL_Param *param, CRYPT_EAL_Func *capFuncs, CRYPT_EAL_Func **outFuncs, void **provCtx)
{
(void)mgrCtx;
(void)param;
(void)capFuncs;
(void)SAL_MemCallBack_Ctrl(BSL_SAL_MEM_MALLOC, malloc);
(void)SAL_MemCallBack_Ctrl(BSL_SAL_MEM_FREE, free);
*outFuncs = defProvOutFuncs;
*provCtx = NULL;
return CRYPT_SUCCESS;
}