test_sha_based_aka.cpp

来自「agsm a gsm sim manager for browsing, man」· C++ 代码 · 共 329 行

CPP
329
字号
/* test_sha_based_aka.c */
#include "stdafx.h"
#include <stdio.h>
#include "aka.h"

#ifdef DEBUG
#define dbg_printf printf
#else
#define dbg_printf
#endif

//unsigned char *msg_data =
//	"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";

void pause(void)
{
	dbg_printf("Press any key to continue\n");
#ifdef DEBUG
	getchar();
#endif
}

void test_aka()
{
	uchar K[]={0xad,0x1b,0x5a,0x15,0x9b,0xe8,0x6b,0x2c,
		   0xa6,0x6c,0x7a,0xe4,0x0b,0xba,0x9b,0x9d};

	uchar seed[]={0xb0,0xab,0xb9,0x9d,0x6a,0xc6,0xa7,0x4e,
			0xb9,0x8e,0xb6,0xc2,0xda,0xb1,0xa5,0x51};

	uchar Fmk[L_FMK] = { 'A', 'H', 'A', 'G' };
	uchar RAND[L_RAND];

	uchar CK[L_CK];
	uchar IK[L_IK];
        uchar UAK[L_UAK];

	uchar MACA[L_MACA];
	uchar MACS[L_MACS];
	uchar RES[L_RES];
	uchar AK[L_AK];
	uchar AKS[L_AKS];

	uchar SQN[L_SQN]={0x00,0x00,0x00,0x00,0x00,0x01};
	uchar fi0,fi1,fi1star,fi2,fi3,fi4,fi5,fi5star,fi11;

	uchar buff1[L_RAND/2],buff2[L_RAND/2];

	uchar AMF[2];

	int i;

	fi0=0x41;
	fi1=0x42;
	fi1star=0x43;
	fi2=0x44;
	fi3=0x45;
	fi4=0x46;
	fi5=0x47;
	fi5star=0x48;
        fi11 = 0x50;
	dbg_printf("test vector for f0:\n");
	dbg_printf("input section\n");
	dbg_printf("seed is:	");
	for(i=0;i<L_KEY;i++)
		dbg_printf("%02x ",seed[i]);
	dbg_printf("\n");
	dbg_printf("fi0 is:		%02x\n",fi0);
	dbg_printf("Fmk is:		");
	for (i=0;i<L_FMK;i++)
		dbg_printf("%02x ",Fmk[i]);
	dbg_printf("\n");

	dbg_printf("\n");

	f0(seed,fi0,Fmk,buff1);
	f0(seed,fi0,Fmk,buff2);

	dbg_printf("output section\n");
	dbg_printf("f0 	RAND:	");
	for (i=0;i<L_RAND/2;i++)
		dbg_printf("%02x ",buff1[i]);
	for (i=0;i<L_RAND/2;i++)
		dbg_printf("%02x ",buff2[i]);
	dbg_printf("\n");

	pause();

	/* reuse RAND generated for the subsequent function calls*/
	for (i=0;i<L_RAND/2;i++)
		RAND[i] = buff1[i];
	for (i=0;i<L_RAND/2;i++)
		RAND[i+L_RAND/2] = buff2[i];

	AMF[0]=0x00;
	AMF[1]=0x01;

	dbg_printf("\n");
	dbg_printf("\n");
	dbg_printf("test vector for f1:\n");
	dbg_printf("input section\n");
	dbg_printf("K is:		");
	for(i=0;i<L_KEY;i++)
		dbg_printf("%02x ",K[i]);
	dbg_printf("\n");
	dbg_printf("fi1 is:		%02x\n",fi1);
	dbg_printf("RAND is:	");
	for(i=0;i<L_RAND;i++)
		dbg_printf("%02x ",RAND[i]);
	dbg_printf("\n");
	dbg_printf("Fmk is:		");
	for(i=0;i<L_FMK;i++)
		dbg_printf("%02x ",Fmk[i]);
	dbg_printf("\n");
	dbg_printf("SQN is:		");
	for(i=0;i<L_SQN;i++)
		dbg_printf("%02x ",SQN[i]);
	dbg_printf("\n");
	dbg_printf("AMF is:		%02x %02x\n",AMF[0],AMF[1]);

	f1(K,fi1,RAND,Fmk,SQN,AMF,MACA);
	dbg_printf("\n");
	dbg_printf("output section\n");
	dbg_printf("f1 	MACA:	");
	for (i=0;i<L_MACA;i++)
		dbg_printf("%02x ",MACA[i]);
	dbg_printf("\n");

	pause();

	dbg_printf("\n");
	dbg_printf("\n");
	dbg_printf("test vector for f1*:\n");
	dbg_printf("input section\n");
	dbg_printf("K is:		");
	for(i=0;i<L_KEY;i++)
		dbg_printf("%02x ",K[i]);
	dbg_printf("\n");
	dbg_printf("fi1star is:	%02x\n",fi1star);
	dbg_printf("RAND is:	");
	for(i=0;i<L_RAND;i++)
		dbg_printf("%02x ",RAND[i]);
	dbg_printf("\n");
	dbg_printf("Fmk is:		");
	for(i=0;i<L_FMK;i++)
		dbg_printf("%02x ",Fmk[i]);
	dbg_printf("\n");
	dbg_printf("SQN is:		");
	for(i=0;i<L_SQN;i++)
		dbg_printf("%02x ",SQN[i]);
	dbg_printf("\n");
	dbg_printf("AMF is:		%02x %02x\n",AMF[0],AMF[1]);

	dbg_printf("\n");
	f1star(K,fi1star,RAND,Fmk,SQN,AMF,MACS);
	dbg_printf("output section\n");
	dbg_printf("f1* 	MACS:	");
	for(i=0;i<L_MACS;i++)
		dbg_printf("%02x ",MACS[i]);
	for(i=0;i<L_SQN;i++)
		SQN[i]=0x00;
	AMF[0]=AMF[1]=0;
	dbg_printf("\n");

	pause();

	dbg_printf("\n");
	dbg_printf("\n");
	dbg_printf("test vector for f2:\n");
	dbg_printf("input section\n");
	dbg_printf("K is:		");
	for(i=0;i<L_KEY;i++)
		dbg_printf("%02x ",K[i]);
	dbg_printf("\n");
	dbg_printf("fi2 is:		%02x\n",fi2);
	dbg_printf("RAND is:	");
	for(i=0;i<L_RAND;i++)
		dbg_printf("%02x ",RAND[i]);
	dbg_printf("\n");
	dbg_printf("Fmk is:		");
	for(i=0;i<L_FMK;i++)
		dbg_printf("%02x ",Fmk[i]);
	dbg_printf("\n");
	dbg_printf("\n");
	f2(K,fi2,RAND,Fmk,RES,L_RES);
	dbg_printf("output section\n");
	dbg_printf("f2 	RES:	");
	for (i=0;i<L_RES;i++)
		dbg_printf("%02x ",RES[i]);
	dbg_printf("\n");

	pause();

	dbg_printf("\n");
	dbg_printf("\n");
	dbg_printf("test vector for f3:\n");
	dbg_printf("input section\n");
	dbg_printf("K is:		");
	for(i=0;i<L_KEY;i++)
		dbg_printf("%02x ",K[i]);
	dbg_printf("\n");
	dbg_printf("fi3 is:		%02x\n",fi3);
	dbg_printf("RAND is:	");
	for(i=0;i<L_RAND;i++)
		dbg_printf("%02x ",RAND[i]);
	dbg_printf("\n");
	dbg_printf("Fmk is:		");
	for(i=0;i<L_FMK;i++)
		dbg_printf("%02x ",Fmk[i]);
	dbg_printf("\n");

	dbg_printf("\n");
	f3(K,fi3,RAND,Fmk,CK);
	dbg_printf("output section\n");
	dbg_printf("f3 	CK:	");
	for (i=0;i<L_CK;i++)
		dbg_printf("%02x ",CK[i]);
	dbg_printf("\n");

	pause();

	dbg_printf("\n");
	dbg_printf("\n");
	dbg_printf("test vector for f4:\n");
	dbg_printf("input section\n");
	dbg_printf("K is:		");
	for(i=0;i<L_KEY;i++)
		dbg_printf("%02x ",K[i]);
	dbg_printf("\n");
	dbg_printf("fi4 is:		%02x\n",fi4);
	dbg_printf("RAND is:	");
	for(i=0;i<L_RAND;i++)
		dbg_printf("%02x ",RAND[i]);
	dbg_printf("\n");
	dbg_printf("Fmk is:		");
	for(i=0;i<L_FMK;i++)
		dbg_printf("%02x ",Fmk[i]);
	dbg_printf("\n");

	dbg_printf("\n");
	f4(K,fi4,RAND,Fmk,IK);
	dbg_printf("output section\n");
	dbg_printf("f4 	IK:	");
	for (i=0;i<L_IK;i++)
		dbg_printf("%02x ",IK[i]);
	dbg_printf("\n");

	pause();

	dbg_printf("\n");
	dbg_printf("\n");
	dbg_printf("test vector for f5\n");
	dbg_printf("input section\n");
	dbg_printf("K is:		");
	for(i=0;i<L_KEY;i++)
		dbg_printf("%02x ",K[i]);
	dbg_printf("\n");
	dbg_printf("fi5 is:		%02x\n",fi5);
	dbg_printf("RAND is:	");
	for(i=0;i<L_RAND;i++)
		dbg_printf("%02x ",RAND[i]);
	dbg_printf("\n");
	dbg_printf("Fmk is:		");
	for(i=0;i<L_FMK;i++)
		dbg_printf("%02x ",Fmk[i]);
	dbg_printf("\n");
	dbg_printf("\n");
	f5(K,fi5,RAND,Fmk,AK);
	dbg_printf("output section\n");
	dbg_printf("f5 	AK:	");
	for (i=0;i<L_AK;i++)
		dbg_printf("%02x ",AK[i]);
	dbg_printf("\n");

	pause();

	dbg_printf("\n");
	dbg_printf("\n");
	dbg_printf("test vector for f5*\n");
	dbg_printf("input section\n");
	dbg_printf("K is:		");
	for(i=0;i<L_KEY;i++)
		dbg_printf("%02x ",K[i]);
	dbg_printf("\n");
	dbg_printf("fi5* is:	%02x\n",fi5star);
	dbg_printf("RAND is:	");
	for(i=0;i<L_RAND;i++)
		dbg_printf("%02x ",RAND[i]);
	dbg_printf("\n");
	dbg_printf("Fmk is:		");
	for(i=0;i<L_FMK;i++)
		dbg_printf("%02x ",Fmk[i]);
	dbg_printf("\n");
	dbg_printf("\n");
	f5star(K,fi5star,RAND,Fmk,AKS);
	dbg_printf("output section\n");
	dbg_printf("f5* 	AKS:	");
	for (i=0;i<L_AKS;i++)
		dbg_printf("%02x ",AKS[i]);
	dbg_printf("\n");

	pause();
        dbg_printf("\n");
        dbg_printf("\n");
        dbg_printf("test vector for f11\n");
        dbg_printf("input section\n");
        dbg_printf("K is: ");
        for(i=0;i<L_KEY;i++)
          dbg_printf("%02x ",K[i]);
        dbg_printf("\n");
        dbg_printf("fi11 is: %02x\n",fi11);
        dbg_printf("RAND is: ");
        for(i=0;i<L_RAND;i++)
          dbg_printf("%02x ",RAND[i]);
        dbg_printf("\n");
        dbg_printf("Fmk is: ");
        for(i=0;i<L_FMK;i++)
          dbg_printf("%02x ",Fmk[i]);
        dbg_printf("\n");
        dbg_printf("\n");
        f11(K,fi11,RAND,Fmk,UAK);
        dbg_printf("output section\n");
        dbg_printf("f11 UAK: ");
        for (i=0;i<L_UAK;i++)
          dbg_printf("%02x ",UAK[i]);
        dbg_printf("\n");
        pause();
}

⌨️ 快捷键说明

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