/*
 * 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)
 */

/**
 * @file TzwSerialNumber.h
 * @brief Functionality to get public chip serial number, defined by each silicon provider.
 * @author Konstyantyn Volobuyev <k.volobuyev@samsung.com>
 * @date Created Jun 26, 2017
 */

#ifndef TZWSERIALNUMBER_H
#define TZWSERIALNUMBER_H

#include "TzwMisc.h"
#include "TzwCommon.h"

#define SERIAL_NUM_LENGTH 16

typedef struct{
    union{
#if defined(TZ_MODEL_BLOWFISH) /*TZ_MODEL_BLOWFISH*/
        TEE_UUID uuid;
#elif defined(TZ_MODEL_QCOM) /*TZ_MODEL_QCOM*/
        uint32_t uuid;
#elif defined(TZ_MODEL_Kinibi) /*TZ_MODEL_Kinibi*/
        mcUuid_t uuid;
#endif
        uint8_t serial[SERIAL_NUM_LENGTH];
    };
    size_t size;
} __attribute__ ((packed)) TzwSerialNumber_t;

/**
 * @brief  Reads the serial number from PTE chain
 * @param  [out] Serial number
 * @return TzwErrorCode_t
 */
TzwErrorCode_t tzwReadSerialNumber(TzwSerialNumber_t* apSerialNumber);

#endif // TZWSERIALNUMBER_H
