/*
 * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved.
 *
 * Created in Samsung Ukraine R&D Center (SRK) under a contract between
 * LLC "Samsung Electronics Ukraine Company" (Kiev, Ukraine)
 * and "Samsung Electronics Co", Ltd (Seoul, Republic of Korea)
 *
 * Created on: Dec 19, 2017
 * Author: Kostiantyn Volobuiev <k.volobuyev@samsung.com>
 * Author: Viktor Kopp (v.kopp@samsung.com)
 * Author: Andrey Orlenko (a.orlenko@samsung.com)
 * Brief: Module that responds for miscellaneous operations.
 */

#ifndef TZWMISC_H_
#define TZWMISC_H_

#include <stdint.h>

#include <TzwMisc.h>
#include <TzwCommon.h>

/**
 * @brief TEE error code
 */
typedef uint32_t TzwErrorCode_t;

/**
 * @brief Generates random data
 * @param[out] randomBuffer - pointer to generated random data
 * @param[in] randomBufferLen - length of random data to be generated
 * @return 0 on success, -1 on error
 */
int tzwGenerateRandom(void *randomBuffer, uint32_t randomBufferLen);

/**
 * @brief Unwraps encrypted data from another TA
 * @param[in] sourceAppName - alias of source TA
 * @param[in] wrappedData - buffer contains encrypted data
 * @param[in] wrappedDataLen - encrypted data length
 * @param[in] plainData - buffer contains decrypted data
 * @param[in] plainDataLen - decrypted buffer length(will be updated)
 * @return status of the operation, e.g. TEE_SUCCESS on success.
 */
TEE_Result tzwUnwrapData(const char* sourceAppName,
                         const uint8_t* wrappedData, uint32_t const wrappedDataLen,
                         uint8_t* plainData, uint32_t* plainDataLen);
#endif /* TZWMISC_H_ */
