/*
 * =====================================================================================
 *
 *       Filename:  teeCryptoApi.h
 *
 *    Description:  APIs supported by secure OS.
 *
 *        Version:  1.0
 *        Created:  04/26/2017 08:57:18 PM
 *       Compiler:  armcc
 *
 *         Author:  Dongwook Shim (), dw.shim@samsung.com
 *        Company:  Samsung Electronics
 *
 *        Copyright (c) 2017 by Samsung Electronics, All rights reserved. 
 *
 * =====================================================================================
 */

#ifndef __TEE_CRYPTO_API_H__
#define __TEE_CRYPTO_API_H__

typedef enum {
	ALGO_SHA1,
	ALGO_SHA256,
	ALGO_SHA_MAX,
} DigestAlgo_t;

typedef enum {
	AES_MODE_ENCRYPT,
	AES_MODE_DECRYPT,
	AES_MODE_MAX,
} AesEncryptMode_t;

int32_t createSecureObject(const uint8_t *inData, const uint32_t inDataLen,
		uint8_t *outData, uint32_t *outDataLen, const uint8_t *targetUid, const uint32_t targetUidLen);

int32_t openSecureObject(const uint8_t *inData, const uint32_t inDataLen,
		uint8_t *outData, uint32_t *outDataLen, const uint8_t *targetUid, const uint32_t targetUidLen);

int32_t getRandBlock(uint8_t *randomBuffer, uint32_t randomLen);

int32_t getShaDigest(const uint8_t* msg, size_t msgLen, 
		uint8_t* digest, size_t digestLen, DigestAlgo_t algo);

int32_t aes256CbcEncrypt(const uint8_t *inData, uint32_t inDataLen, uint8_t *iv,
	uint8_t *outData, uint32_t *outDataLen, const uint8_t *key, const uint32_t keyLen, AesEncryptMode_t mode);

#if (defined USE_QSEE) && (defined USE_QSEE_SFS)
int32_t createLocalSecureObject(const uint8_t *inData, const uint32_t inDataLen, uint8_t *outData, uint32_t *outDataLen);

int32_t openLocalSecureObject(const uint8_t *inData, const uint32_t inDataLen, uint8_t *outData, uint32_t *outDataLen);
#endif	// End of USE_QSEE && USE_QSEE_SFS
#endif	// End of __TEE_CRYPTO_API_H__
