/*
 * =====================================================================================
 *
 *       Filename:  cryptoPlatform.h
 *
 *    Description:  APIs for crypo platrom.
 *
 *        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 __CRYPTO_PLATFORM_H__
#define __CRYPTO_PLATFORM_H__

#include <stdint.h>

#define UID_LEN_MAX         256

/*******************************************************************************
 *                          Common Crypto API
 *******************************************************************************/
int32_t encryptDataAES_GCM(const uint8_t *input, uint32_t input_len,
                            const uint8_t *key, uint32_t key_len,
                            const uint8_t *iv, uint32_t iv_len,
                            const uint8_t* aad, uint32_t aadLen,
                            uint8_t *output,
                            uint8_t* tag_auth, uint32_t tag_auth_len);

int32_t decryptDataAES_GCM(const uint8_t *input, uint32_t input_len,
                            const uint8_t *key, uint32_t key_len,
                            const uint8_t *iv, uint32_t iv_len,
                            const uint8_t* aad, uint32_t aadLen,
                            uint8_t *output,
                            uint8_t* tag_auth, uint32_t tag_auth_len);

int32_t unwrapDrkBlob(const uint8_t* keyBlob, const uint32_t keyBlobLen, uint8_t* outData, uint32_t* outDataLen);
int32_t unwrapGakBlob(const uint8_t* keyBlob, const uint32_t keyBlobLen, uint8_t* outData, uint32_t* outDataLen);
int32_t encryptDrkCertificateSigningRequest(const uint8_t* csr, const uint32_t csrLen, uint8_t* outData, uint32_t* outDataLen);
int32_t encryptSakCertificateSigningRequest(const uint8_t* csr, const uint32_t csrLen, uint8_t* outData, uint32_t* outDataLen);
#if (defined USE_QSEE) && (defined USE_QSEE_SFS)
int32_t getDrkV1ForSkm(uint8_t *outData, uint32_t *outDataLen);
#endif // End of USE_QSEE && USE_QSEE_SFS
#if (defined DRK_TEST_API_ENABLED)
int32_t verifyServiceKey(const uint8_t *inData, const uint32_t inDataLen, uint8_t *outData, uint32_t *outDataLen);
#endif // End of DRK_TEST_API_ENABLED
#endif	// End of __CRYPTO_PLATFORM_H__
