mbed-os/targets/TARGET_Samsung/security_subsystem/drivers/sss_driver_sha2.c

179 lines
4.5 KiB
C

/****************************************************************************
*
* Copyright 2020 Samsung Electronics All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific
* language governing permissions and limitations under the License.
*
****************************************************************************/
/*************** Include Files ********************************************/
#include "sss_driver_error.h"
#include "sss_driver_sha2.h"
/*************** Assertions ***********************************************/
/*************** Definitions / Macros *************************************/
/*************** New Data Types (Basic Data Types) ***********************/
/*************** New Data Types *******************************************/
/*************** Constants ************************************************/
/*************** Variable declarations ************************************/
/*************** Functions ***********************************************/
int sss_SHA2_256(
const stOCTET_STRING *pstMessage,
stOCTET_STRING *pstDigest)
{
int ret = FAIL;
stOCTET_STRING stHASH_Input;
unsigned int object_id;
unsigned int block_byte_len;
//! step 0 : clear Mailbox
ret = mb_system_clear(CLEAR_TYPE_MAILBOX);
if (ret != SSSR_SUCCESS) {
return ret;
}
//! assign hash_byte_len to compare returned result from sss_fw after hash operation
object_id = OID_SHA2_256;
block_byte_len = 64;
//! step 1 : set message length parameter to SSS
ret = mb_hash_init(pstMessage, object_id);
if (ret != SSSR_SUCCESS) {
return ret;
}
//! step 2 : set message block to SSS
stHASH_Input.pu08Data = pstMessage->pu08Data;
stHASH_Input.u32DataByteLen = pstMessage->u32DataByteLen;
ret = mb_hash_update(&stHASH_Input, block_byte_len);
if (ret != SSSR_SUCCESS) {
return ret;
}
//! step 3 : get hash result from SSS
ret = mb_hash_final(&stHASH_Input, pstDigest);
return ret;
}
int sss_SHA2_384(
const stOCTET_STRING *pstMessage,
stOCTET_STRING *pstDigest)
{
int ret = FAIL;
stOCTET_STRING stHASH_Input;
unsigned int object_id;
unsigned int block_byte_len;
//! step 0 : clear Mailbox
ret = mb_system_clear(CLEAR_TYPE_MAILBOX);
if (ret != SSSR_SUCCESS) {
return ret;
}
//! assign hash_byte_len to compare returned result from sss_fw after hash operation
object_id = OID_SHA2_384;
block_byte_len = 128;
//! step 1 : set message length parameter to SSS
ret = mb_hash_init(pstMessage, object_id);
if (ret != SSSR_SUCCESS) {
return ret;
}
//! step 2 : set message block to SSS
stHASH_Input.pu08Data = pstMessage->pu08Data;
stHASH_Input.u32DataByteLen = pstMessage->u32DataByteLen;
ret = mb_hash_update(&stHASH_Input, block_byte_len);
if (ret != SSSR_SUCCESS) {
return ret;
}
//! step 3 : get hash result from SSS
ret = mb_hash_final(&stHASH_Input, pstDigest);
return ret;
}
int sss_SHA2_512(
const stOCTET_STRING *pstMessage,
stOCTET_STRING *pstDigest)
{
int ret = FAIL;
stOCTET_STRING stHASH_Input;
unsigned int object_id;
unsigned int block_byte_len;
//! step 0 : clear Mailbox
ret = mb_system_clear(CLEAR_TYPE_MAILBOX);
if (ret != SSSR_SUCCESS) {
return ret;
}
//! assign hash_byte_len to compare returned result from sss_fw after hash operation
object_id = OID_SHA2_512;
block_byte_len = 128;
//! step 1 : set message length parameter to SSS
ret = mb_hash_init(pstMessage, object_id);
if (ret != SSSR_SUCCESS) {
return ret;
}
//! step 2 : set message block to SSS
stHASH_Input.pu08Data = pstMessage->pu08Data;
stHASH_Input.u32DataByteLen = pstMessage->u32DataByteLen;
ret = mb_hash_update(&stHASH_Input, block_byte_len);
if (ret != SSSR_SUCCESS) {
return ret;
}
//! step 3 : get hash result from SSS
ret = mb_hash_final(&stHASH_Input, pstDigest);
return ret;
}