⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sblock_test.c

📁 s3c6400 ADS下官方测试程序
💻 C
📖 第 1 页 / 共 5 页
字号:
/**************************************************************************************
* 
*	Project Name : S3C6400 Validation
*
*	Copyright 2006 by Samsung Electronics, Inc.
*	All rights reserved.
*
*	Project Description :
*		This software is only for validating functions of the S3C6400.
*		Anybody can use this software without our permission.
*  
*--------------------------------------------------------------------------------------
* 
*	File Name : sblock_test.c
*  
*	File Description : This file implements the functons for security sub-system test.
*
*	Author : Wonjoon Jang
*	Dept. : AP Development Team
*	Created Date : 2007/01/17
*	Version : 0.1 
* 
*	History
*	- Created(wonjoon.jang 2007/01/17)
*  
**************************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>

#include "def.h"
#include "option.h"
#include "library.h"
#include "sfr6400.h"
#include "system.h"
#include "intc.h"
#include "gpio.h"
#include "sysc.h"

#include "sblock.h"
#include "sblock_data.h"



void SBLOCK_Test(void);

// must be changed
#define INPUT_BUF			(0x51000000)
#define INPUT_BUF1			(0x51100000)
#define OUTPUT_BUF			(0x51400000)
#define OUTPUT_BUF1		(0x51500000)
#define GOLDEN_BUF			(0x51800000)
#define GOLDEN_BUF1		(0x51810000)
#define MID_BUF				(0x51C00000)

#define Sblock_DEBUG		(false)

//static SBLK oSblk;
//static INTC oIntc;

static OPER_MODE eAesOperMode;
static OPER_MODE eDesOperMode;
static OPER_MODE eHashOperMode;
static u32 g_SDma1Done;

volatile int  g_AES_Key;
volatile int g_sblock_err;
//////////
// Function Name : Isr_SDMA0
// Function Description : Isr routine
// Input : 	None
// Output :	None 
// Version : v0.1
void __irq Isr_SDMA1(void)
{
	//u32 uRead;
	//for Test
	//uRead = Inp32(0x7DC00000);	//SDMA1 INT STATUS
/*
	uRead = (uRead>>6)&0x3;
	if(uRead== 1)
	{
		printf("		SDMA1 Rx ISR Occurred\n");
	}
	else if(uRead== 2)
	{
		printf("		SDMA1 Tx ISR Occurred\n");
	}
	else
	{
		printf("		SDMA1 Rx/Tx ISR Occurred\n");
	}
*/
	SBLK_ClearIntPending(0);
	//Delay(1);
	//printf("		SDMA1 Int 0x%x \n", uRead);
	//printf("		SDMA1 ISR Occurred\n");
	g_SDma1Done = 1;

	INTC_ClearVectAddr();
}

//////////
// Function Name : DispOperMode
// Function Description : Display operating mode
// Input : 	None
// Output :	None 
// Version : v0.1
void DispOperMode(OPER_MODE eOperMode)
{
	if (eOperMode == ECB) Disp("ECB");
	else if (eOperMode == CBC) Disp("CBC");
	else if (eOperMode == CTR) Disp("CTR");
	else if (eOperMode == HMAC) Disp("HMAC");
	else if (eOperMode == SHA1) Disp("SHA1");
	else if (eOperMode == PRNG) Disp("PRNG");
}

void SetAesOperMode(void)
{
	int sel;

	Disp("Select Operation Mode\n");
	Disp("1)ECB  2)CBC 3) CTR : \n");
	sel=GetIntNum();
	if (sel == 1) eAesOperMode = ECB;
	else if (sel == 2) eAesOperMode = CBC;
	else if (sel == 3) eAesOperMode = CTR;

	Disp("Your selection is ");
	DispOperMode(eAesOperMode);
	//Disp("\n");
}
void SetDesOperMode(void)
{
	int sel;

	Disp("Select Operation Mode\n");
	Disp("1)ECB  2)CBC : \n");
	sel=GetIntNum();
	if (sel == 1) eDesOperMode = ECB;
	else if (sel == 2) eDesOperMode = CBC;

	Disp("Your selection is ");
	DispOperMode(eDesOperMode);
	//Disp("\n");
}

void SetHashOperMode(void)
{
	int sel;

	Disp("Select Operation Mode\n");
	Disp("1)HMAC  2)SHA1  3)PRNG  : \n");
	sel=GetIntNum();
	if (sel == 1) eHashOperMode = HMAC;
	else if (sel == 2) eHashOperMode = SHA1;
	else if (sel == 3) eHashOperMode = PRNG;

	Disp("Your selection is ");
	DispOperMode(eHashOperMode);
	//Disp("\n");
}

//////////
// Function Name : Test_AES_CPU
// Function Description : AES CPU mode Test
// Input : 	None
// Output :	None 
// Version : v0.1

void Test_AES_CPU(eFunction_Test eTest, oFunctionT_AutoVar oAutoVar)
//void Test_AES_CPU(void)
{
	u32 uRet, i, usel;
	//bool uError;
	//g_sblock_err=0;
	
	if(eTest == eTest_Manual)
	{
		printf("[SBLOCK - AES CPU Mode Test]\n");

		printf("Select AES Operating Mode  : 1)ECB   2)CBC   3)CTR \n");
		usel=GetIntNum();
		if (usel == 1) eAesOperMode = ECB;
		else if (usel == 2) eAesOperMode = CBC;
		else if (usel == 3) eAesOperMode = CTR;

		printf("Your selection is ");
		DispOperMode(eAesOperMode);
		printf("\n");
	}
	else
	{
		eAesOperMode = (OPER_MODE)oAutoVar.Test_Parameter[0];
	}
	
	//////////////////////////
	////// Encryption
	SBLK_Init(AES, eAesOperMode, ENC);
	
	for (i=0; i<4; i++)
	{
		SBLK_PutDataToInReg((u32)uAesPlainText+i*4*4, 4, LASTBYTE_1ST);
		SBLK_StartByManual();

		while(!SBLK_IsOutputReady());

		SBLK_GetDataFromOutReg(OUTPUT_BUF+i*4*4, 4);
	}
	Copy((u32)uAesCipherText[eAesOperMode], GOLDEN_BUF, 16);
	uRet = Compare(OUTPUT_BUF, GOLDEN_BUF, 16);

	if(eTest == eTest_Manual)
	{
		if (uRet)
		{
		printf("AES_");
		DispOperMode(eAesOperMode);
		printf("_CPU_ENC Success..\n");
		}
		else
		{
		printf("AES");
		DispOperMode(eAesOperMode);
		printf("_CPU_ENC Failed..\n");
		}
	}
	else
	{
		if(uRet == false)
			{
				printf("AES");
				DispOperMode(eAesOperMode);
				printf("_CPU_ENC Failed..\n");
				g_sblock_err =1;
				UART_Getc();
			}
		else if (Sblock_DEBUG)
			{
				printf("AES_");
				DispOperMode(eAesOperMode);
				printf("_CPU_ENC Success..\n");
			}
	}
	
	/////////////////////////
	////// Decryption
	if (eAesOperMode == CTR)
		SBLK_Init(AES, eAesOperMode, ENC);
	else
		SBLK_Init(AES, eAesOperMode, DEC);

	for (i=0; i<4; i++)
	{
		SBLK_PutDataToInReg(OUTPUT_BUF+i*4*4, 4, LASTBYTE_1ST);
		SBLK_StartByManual();

		while(!SBLK_IsOutputReady());

		SBLK_GetDataFromOutReg(INPUT_BUF+i*4*4, 4);
	}
	Copy((u32)uAesPlainText, GOLDEN_BUF, 16);
	uRet = Compare(INPUT_BUF, GOLDEN_BUF, 16);
	if(eTest == eTest_Manual)
	{
		if (uRet)
		{
		printf("AES_");
		DispOperMode(eAesOperMode);
		printf("_CPU_DEC Success..\n\n");
		}
		else
		{
		printf("AES");
		DispOperMode(eAesOperMode);
		printf("_CPU_DEC Failed..\n\n");
		}
	}
	else
	{
		if(uRet == false)
			{
				printf("AES");
				DispOperMode(eAesOperMode);
				printf("_CPU_DEC Failed..\n");
				g_sblock_err =1;
				UART_Getc();
			}
		else if (Sblock_DEBUG)
			{
				printf("AES_");
				DispOperMode(eAesOperMode);
				printf("_CPU_DEC Success..\n");
			}
	}

	
}

//////////
// Function Name : Test_AES_FIFO
// Function Description : AES FIFO mode Test
// Input : 	None
// Output :	None 
// Version : v0.1
void Test_AES_FIFO(eFunction_Test eTest, oFunctionT_AutoVar oAutoVar)
{
	u32 uRet, usel;

	//g_sblock_err=0;

	if(eTest == eTest_Manual)
	{
		printf("[SBLOCK - AES FIFO Mode Test]\n");

		printf("Select AES Operating Mode  : 1)ECB   2)CBC   3)CTR \n");
		usel=GetIntNum();
		if (usel == 1) eAesOperMode = ECB;
		else if (usel == 2) eAesOperMode = CBC;
		else if (usel == 3) eAesOperMode = CTR;

		printf("Your selection is ");
		DispOperMode(eAesOperMode);
		printf("\n");
	}
	else
	{
		eAesOperMode = (OPER_MODE)oAutoVar.Test_Parameter[0];
	}
	
	//////////////////////////
	////// Encryption
	SBLK_Init(AES, eAesOperMode, ENC);
	SBLK_SetFifo(16, 4, 16, 4, LASTBYTE_1ST);
	SBLK_StartFifo();
	SBLK_PutDataToRxFifo((u32)uAesPlainText, 16);
	
	while(!SBLK_IsFifoTransDone());

	SBLK_GetDataFromTxFifo(OUTPUT_BUF, 16);
	Copy((u32)uAesCipherText[eAesOperMode], GOLDEN_BUF, 16);
	uRet = Compare(OUTPUT_BUF, GOLDEN_BUF, 16);

	if(eTest == eTest_Manual)
	{
		if (uRet)
		{
		Disp("AES_");
		DispOperMode(eAesOperMode);
		Disp("_FIFO_ENC Success..\n");
		}
		else
		{
		Disp("AES");
		DispOperMode(eAesOperMode);
		Disp("_FIFO_ENC Failed..\n");
		}
	}
	else
	{
		if(uRet == false)
			{
				printf("AES");
				DispOperMode(eAesOperMode);
				printf("_FIFO_ENC Failed..\n");
				g_sblock_err =1;
				UART_Getc();
			}
		else if (Sblock_DEBUG)
			{
			Disp("AES_");
			DispOperMode(eAesOperMode);
			Disp("_FIFO_ENC Success..\n");
			}
	}

	/////////////////////////
	////// Decryption
	if (eAesOperMode == CTR)
		SBLK_Init(AES, eAesOperMode, ENC);
	else
		SBLK_Init(AES, eAesOperMode, DEC);

	SBLK_SetFifo(16, 4, 16, 4, LASTBYTE_1ST);
	SBLK_StartFifo();
	SBLK_PutDataToRxFifo(OUTPUT_BUF, 16);

	while(!SBLK_IsFifoTransDone());

	SBLK_GetDataFromTxFifo(INPUT_BUF, 16);
	Copy((u32)uAesPlainText, GOLDEN_BUF, 16);
	uRet = Compare(INPUT_BUF, GOLDEN_BUF, 16);

	if(eTest == eTest_Manual)
	{
		if (uRet)
		{
		Disp("AES_");
		DispOperMode(eAesOperMode);
		Disp("_FIFO_DEC Success..\n");
		}
		else
		{
		Disp("AES");
		DispOperMode(eAesOperMode);
		Disp("_FIFO_DEC Failed..\n");
		}
	}
	else
	{
		if(uRet == false)
			{
				printf("AES");
				DispOperMode(eAesOperMode);
				printf("_FIFO_DEC Failed..\n");
				g_sblock_err =1;
				UART_Getc();
			}
		else if (Sblock_DEBUG)
			{
			Disp("AES_");
			DispOperMode(eAesOperMode);
			Disp("_FIFO_DEC Success..\n");
			}
	}

}
//////////
// Function Name : Test_AES_DMA
// Function Description : AES DMA mode Test
// Input : 	None
// Output :	None 
// Version : v0.1
void Test_AES_DMA(eFunction_Test eTest, oFunctionT_AutoVar oAutoVar)
{
	u32 uRet, usel;

	//g_sblock_err=0;

	if(eTest == eTest_Manual)
	{
		printf("[SBLOCK - AES DMA_FIFO Mode Test]\n");

		printf("Select AES Operating Mode  : 1)ECB   2)CBC   3)CTR \n");
		usel=GetIntNum();
		if (usel == 1) eAesOperMode = ECB;
		else if (usel == 2) eAesOperMode = CBC;
		else if (usel == 3) eAesOperMode = CTR;

		printf("Your selection is ");
		DispOperMode(eAesOperMode);
		printf("\n");
	}
	else
	{
		eAesOperMode = (OPER_MODE)oAutoVar.Test_Parameter[0];
	}


	INTC_SetVectAddr(NUM_SDMA1, Isr_SDMA1); //Rx Operation 
	INTC_Enable(NUM_SDMA1);
	
	//////////////////////////
	////// Encryption
	SBLK_Init(AES, eAesOperMode, ENC);
	SBLK_SetFifo(16, 4, 16, 4, LASTBYTE_1ST);
	SBLK_SetSDMA(INPUT_BUF, 16, OUTPUT_BUF, 16);
	Copy((u32)uAesPlainText, INPUT_BUF, 16);

	g_SDma1Done = 0;

	SBLK_StartFifo();
	SBLK_StartSDMA();

	while(!g_SDma1Done);

	Copy((u32)uAesCipherText[eAesOperMode], GOLDEN_BUF, 16);
	uRet = Compare(OUTPUT_BUF, GOLDEN_BUF, 16);

	if(eTest == eTest_Manual)
	{
		if (uRet)
		{
		Disp("AES_");
		DispOperMode(eAesOperMode);
		Disp("_DMA_FIFO_ENC Success..\n");
		}
		else
		{
		Disp("AES_");
		DispOperMode(eAesOperMode);
		Disp("_DMA_FIFO_ENC Failed..\n");
		}
	}
	else
	{
		if(uRet == false)
			{
				printf("AES");
				DispOperMode(eAesOperMode);
				printf("_DMA_FIFO_ENC Failed..\n");
				g_sblock_err =1;
				UART_Getc();
			}
		else if (Sblock_DEBUG)
			{
			Disp("AES_");
			DispOperMode(eAesOperMode);
			Disp("_DMA_FIFO_ENC Success..\n");
			}
	}

	/////////////////////////
	////// Decryption

	if (eAesOperMode == CTR)
		SBLK_Init(AES, eAesOperMode, ENC);
	else
		SBLK_Init(AES, eAesOperMode, DEC);
	SBLK_SetFifo(16, 4, 16, 4, LASTBYTE_1ST);
	SBLK_SetSDMA(OUTPUT_BUF, 16, INPUT_BUF, 16);

	g_SDma1Done = 0;

	SBLK_StartFifo();
	SBLK_StartSDMA();

	while(!g_SDma1Done);

	Copy((u32)uAesPlainText, GOLDEN_BUF, 16);
	uRet = Compare(INPUT_BUF, GOLDEN_BUF, 16);

	if(eTest == eTest_Manual)
	{
		if (uRet)
		{
		Disp("AES_");
		DispOperMode(eAesOperMode);
		Disp("_DMA_FIFO_DEC Success..\n");
		}
		else
		{
		Disp("AES");
		DispOperMode(eAesOperMode);
		Disp("_DMA_FIFO_DEC Failed..\n");
		}
	}
	else
	{
		if(uRet == false)
			{
				printf("AES");
				DispOperMode(eAesOperMode);
				printf("_DMA_FIFO_DEC Failed..\n");
				g_sblock_err =1;
				UART_Getc();
			}
		else if (Sblock_DEBUG)
			{
			Disp("AES_");
			DispOperMode(eAesOperMode);
			Disp("_DMA_FIFO_DEC Success..\n");
			}
	}
	
}

//////////
// Function Name : Test_DES_CPU
// Function Description : DES CPU mode Test
// Input : 	None
// Output :	None 
// Version : v0.1
void Test_DES_CPU(eFunction_Test eTest, oFunctionT_AutoVar oAutoVar)
{
	u32 uRet, i, usel;

	//g_sblock_err=0;

	if(eTest == eTest_Manual)
	{
		printf("[SBLOCK - DES CPU Mode Test]\n");

		printf("Select DES Operating Mode  : 1)ECB   2)CBC    \n");
		usel=GetIntNum();
		if (usel == 1) eDesOperMode = ECB;
		else if (usel == 2) eDesOperMode = CBC;

		printf("Your selection is ");
		DispOperMode(eDesOperMode);
		printf("\n");
	}
	else
	{
		eDesOperMode = (OPER_MODE)oAutoVar.Test_Parameter[0];
	}

	//////////////////////////////////
	// Encryption
	SBLK_Init(DES, eDesOperMode, ENC);

	for (i=0; i<8; i++)
	{
		SBLK_PutDataToInReg((u32)uDesPlainText+i*4*2, 2, LASTBYTE_1ST);
		SBLK_StartByManual();

		while(!SBLK_IsOutputReady());

		SBLK_GetDataFromOutReg(OUTPUT_BUF+i*4*2, 2);
	}
	Copy((u32)uDesCipherText[eDesOperMode], GOLDEN_BUF, 16);
	uRet = Compare(OUTPUT_BUF, GOLDEN_BUF, 16);


	if(eTest == eTest_Manual)
	{
		if (uRet)
		{
		Disp("DES_");
		DispOperMode(eDesOperMode);
		Disp("_CPU_ENC Success..\n");
		}
		else
		{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -