/*
 * =====================================================================================
 *
 *       Filename:  swbc_prov.h
 *
 *    Description:  SWBC functions for Prov
 *
 *        Version:  1.0
 *        Created:  03/30/2017 03:00:00 PM
 *       Compiler:  armcc
 *
 *         Author:  s0726.yoo@samsung.com
 *        Company:  Samsung Electronics
 *
 *        Copyright (c) 2017 by Samsung Electronics, All rights reserved.
 *
 * =====================================================================================
 */

#ifndef __SWBC_PROV_H_INCLUDED__
#define __SWBC_PROV_H_INCLUDED__

#include <stdint.h>

// SWB Table Data Structure.
typedef struct {
    uint8_t *mc;
    uint8_t (*table)[256];
    uint8_t *tableTag;
} SwbTableData_t;

extern uint8_t swbSakMc[];
extern uint8_t swbSakEncTable[][256];
extern uint8_t swbSakEncTableTag[];
extern uint8_t swbGakMc[];
extern uint8_t swbGakDecTable[][256];
extern uint8_t swbGakDecTableTag[];
#if (defined DEBUG_SELF_TEST)
extern uint8_t swbSakDecTable[][];
extern uint8_t swbSakDecTableTag[];
extern uint8_t swbGakEncTable[][];
extern uint8_t swbGakEncTableTag[];
#endif  // End of DEBUG

int32_t swbAesCbcEncrypt(const uint8_t* inData, const uint32_t inLen,
                         uint8_t* outData, uint32_t* outLen,
                         const uint8_t* iv, const SwbTableData_t* swbTableData);

int32_t swbAesCbcDecrypt(const uint8_t* inData, const uint32_t inLen,
                         uint8_t* outData, uint32_t* outLen,
                         const uint8_t* iv, const SwbTableData_t* swbTableData);

#endif /* __SWBC_PROV_H_INCLUDED__ */
