/**
* \file cryptoPlatform.h
* \brief High level crypto functions.
* \author Dmytro Podgornyi (d.podgornyi@samsung.com)
* \version 0.1
* \date Created May 28, 2013
* \par In Samsung Ukraine R&D Center (SURC) under a contract between
* \par LLC "Samsung Electronics Ukraine Company" (Kiev, Ukraine) and
* \par "Samsung Elecrtronics Co", Ltd (Seoul, Republic of Korea)
* \par Copyright: (c) Samsung Electronics Co, Ltd 2012. All rights reserved.
**/

#ifndef __CRYPTOPLATFORM_H__
#define __CRYPTOPLATFORM_H__

#include <stdbool.h>
#include <stdint.h>
#include <sha/sha.h>
#include "commonConfig.h"

int32_t verifyDeviceRootKey(void *wrapped, uint32_t wrappedLen, uint8_t *outDevInfo , uint32_t *outDevInfoLen);

int32_t generateServiceKey(const uint8_t *drkBlob, const uint32_t drkBlobLen,
        uint8_t *serviceBlob, uint32_t *serviceBlobLen, ServiceKeyInfo_t *serviceKeyInfo,
        const uint8_t *attrs, const uint32_t attrsLen);

int32_t generateServiceKeyV1(struct KeyInfo *keyInfo, const uint8_t *drkBlob, const uint32_t drkBlobLen,
        uint8_t *serviceBlob, uint32_t *serviceBlobLen, const uint8_t *attrs, const uint32_t attrsLen, KeyType_t keyType);

int32_t readDrkCertificateUID(uint8_t *uid, uint32_t *uidLen, const uint8_t *drkBlob, const uint32_t drkBlobLen);

int32_t getDrkCertificate(uint8_t *cert, uint32_t *certLen, const uint8_t *drkBlob, const uint32_t drkBlobLen);
#if (defined USE_QSEE)
int32_t getSharedServiceKey(struct KeyInfo* keyInfo, uint8_t *wrapped, uint32_t wrappedLen,
        uint8_t *out, uint32_t *outLen);

#ifndef USE_QSEE_PROV_SFS
int32_t installDrkV1(const uint8_t *wrappedKey, const uint32_t wrappedKeyLen, uint8_t *outData, uint32_t *outDataLen);
#endif  // End of !USE_QSEE_PROV_SFS
#endif  // End of USE_QSEE

int32_t generateRsaKeyPair(uint8_t *outData, uint32_t *outDataLen, bool isSaveToFs);

int32_t generateCertificateSigningRequest(const uint8_t *modelName, const uint32_t modelNameLen,
        const uint8_t *huid, const uint32_t huidLen, const void *preGenKey, const uint32_t preGenKeyLen,
        const uint8_t *imei, const uint32_t imeiLen, uint8_t *csr, uint32_t *csrLen);

int32_t installCertificate(const uint8_t* cert, uint32_t certLen, uint8_t *outData, uint32_t* outDataLen);

int32_t readDrkFromHwvault(uint8_t *outData, uint32_t *outDataLen);

#endif  // End of __CRYPTOPLATFORM_H__
