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

📄 test02.c

📁 一个免费的SMART CARD OS系统。
💻 C
字号:
/* ============================================================================   Project Name : jayaCard TCK   Module Name  : proto/tck/hal/test02/test02.c   Version : $Id: test02.c,v 1.12 2004/01/11 09:56:35 dgil Exp $	Description: HAL TEST02 - DES / DESX / 3DES    The Original Code is jayaCard TCK code.    The Initial Developer of the Original Code is Gilles Dumortier.	Portions created by the Initial Developer are Copyright (C) 2002-2004 the    Initial Developer. All Rights Reserved.    Contributor(s):	Permission is granted to any individual to use, copy, or redistribute	this software so long as all of the original files are included	unmodified, that it is not sold for profit, and that this copyright	notice is retained.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   History Rev	Description   040603 dgil	wrote it from scratch   ============================================================================*/#include "precomp.h"/* ============================================================================	DES Basic Tests		key               plain            cipher	0101010101010101 0000000000000000 8CA64DE9C1B123A7	0123456789ABCDEF 0000000000000000 D5D44FF720683D0D	0123456789ABCDEF 0123456789ABCDEF 56CC09E7CFDC4CEF	0123456789ABCDEF 0123456789ABCDE7 C95744256A5ED31D   ========================================================================= *//* ============================================================================	DES More Complete Tests		key               plain            cipher	0000000000000000 0000000000000000 8CA64DE9C1B123A7	FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF 7359B2163E4EDC58	3000000000000000 1000000000000001 958E6E627A05557B	1111111111111111 1111111111111111 F40379AB9E0EC533	0123456789ABCDEF 1111111111111111 17668DFC7292532D	1111111111111111 0123456789ABCDEF 8A5AE1F81AB8F2DD	FEDCBA9876543210 0123456789ABCDEF ED39D950FA74BCC4	7CA110454A1A6E57 01A1D6D039776742 690F5B0D9A26939B	0131D9619DC1376E 5CD54CA83DEF57DA 7A389D10354BD271	07A1133E4A0B2686 0248D43806F67172 868EBB51CAB4599A	3849674C2602319E 51454B582DDF440A 7178876E01F19B2A	04B915BA43FEB5B6 42FD443059577FA2 AF37FB421F8C4095	0113B970FD34F2CE 059B5E0851CF143A 86A560F10EC6D85B	0170F175468FB5E6 0756D8E0774761D2 0CD3DA020021DC09	43297FAD38E373FE 762514B829BF486A EA676B2CB7DB2B7A	07A7137045DA2A16 3BDD119049372802 DFD64A815CAF1A0F	04689104C2FD3B2F 26955F6835AF609A 5C513C9C4886C088	37D06BB516CB7546 164D5E404F275232 0A2AEEAE3FF4AB77	1F08260D1AC2465E 6B056E18759F5CCA EF1BF03E5DFA575A	584023641ABA6176 004BD6EF09176062 88BF0DB6D70DEE56	025816164629B007 480D39006EE762F2 A1F9915541020B56	49793EBC79B3258F 437540C8698F3CFA 6FBF1CAFCFFD0556	4FB05E1515AB73A7 072D43A077075292 2F22E49BAB7CA1AC	49E95D6D4CA229BF 02FE55778117F12A 5A6B612CC26CCE4A	018310DC409B26D6 1D9D5C5018F728C2 5F4C038ED12B2E41	1C587F1C13924FEF 305532286D6F295A 63FAC0D034D9F793	0101010101010101 0123456789ABCDEF 617B3A0CE8F07100	1F1F1F1F0E0E0E0E 0123456789ABCDEF DB958605F8C8C606	E0FEE0FEF1FEF1FE 0123456789ABCDEF EDBFD1C66C29CCC7	0000000000000000 FFFFFFFFFFFFFFFF 355550B2150E2451	FFFFFFFFFFFFFFFF 0000000000000000 CAAAAF4DEAF1DBAE	0123456789ABCDEF 0000000000000000 D5D44FF720683D0D	FEDCBA9876543210 FFFFFFFFFFFFFFFF 2A2BB008DF97C2F2   ========================================================================= */typedef struct {	char 	key[20];	char	plain[20];	char	cipher[20];} CELL;CELL gCell[] = {	{"0000000000000000","0000000000000000","8CA64DE9C1B123A7"},	{"FFFFFFFFFFFFFFFF","FFFFFFFFFFFFFFFF","7359B2163E4EDC58"},	{"3000000000000000","1000000000000001","958E6E627A05557B"},	{"1111111111111111","1111111111111111","F40379AB9E0EC533"},	{"0123456789ABCDEF","1111111111111111","17668DFC7292532D"},	{"1111111111111111","0123456789ABCDEF","8A5AE1F81AB8F2DD"},	{"FEDCBA9876543210","0123456789ABCDEF","ED39D950FA74BCC4"},	{"7CA110454A1A6E57","01A1D6D039776742","690F5B0D9A26939B"},	{"0131D9619DC1376E","5CD54CA83DEF57DA","7A389D10354BD271"},	{"07A1133E4A0B2686","0248D43806F67172","868EBB51CAB4599A"},	{"3849674C2602319E","51454B582DDF440A","7178876E01F19B2A"},	{"04B915BA43FEB5B6","42FD443059577FA2","AF37FB421F8C4095"},	{"0113B970FD34F2CE","059B5E0851CF143A","86A560F10EC6D85B"},	{"0170F175468FB5E6","0756D8E0774761D2","0CD3DA020021DC09"},	{"43297FAD38E373FE","762514B829BF486A","EA676B2CB7DB2B7A"},	{"07A7137045DA2A16","3BDD119049372802","DFD64A815CAF1A0F"},	{"04689104C2FD3B2F","26955F6835AF609A","5C513C9C4886C088"},	{"37D06BB516CB7546","164D5E404F275232","0A2AEEAE3FF4AB77"},	{"1F08260D1AC2465E","6B056E18759F5CCA","EF1BF03E5DFA575A"},	{"584023641ABA6176","004BD6EF09176062","88BF0DB6D70DEE56"},	{"025816164629B007","480D39006EE762F2","A1F9915541020B56"},	{"49793EBC79B3258F","437540C8698F3CFA","6FBF1CAFCFFD0556"},	{"4FB05E1515AB73A7","072D43A077075292","2F22E49BAB7CA1AC"},	{"49E95D6D4CA229BF","02FE55778117F12A","5A6B612CC26CCE4A"},	{"018310DC409B26D6","1D9D5C5018F728C2","5F4C038ED12B2E41"},	{"1C587F1C13924FEF","305532286D6F295A","63FAC0D034D9F793"},	{"0101010101010101","0123456789ABCDEF","617B3A0CE8F07100"},	{"1F1F1F1F0E0E0E0E","0123456789ABCDEF","DB958605F8C8C606"},	{"E0FEE0FEF1FEF1FE","0123456789ABCDEF","EDBFD1C66C29CCC7"},	{"0000000000000000","FFFFFFFFFFFFFFFF","355550B2150E2451"},	{"FFFFFFFFFFFFFFFF","0000000000000000","CAAAAF4DEAF1DBAE"},	{"0123456789ABCDEF","0000000000000000","D5D44FF720683D0D"},	{"FEDCBA9876543210","FFFFFFFFFFFFFFFF","2A2BB008DF97C2F2"},	{ "\0", "\0" , "\0" }};/* ============================================================================	DESX Basic Tests	There do not appear to be any "official" test vectors for DESX, so for 	reference we provide the following (the first was calculated using Mark 	Riordan's C implementation, and the second by hand based on official DES 	test data):		key        = <0123456789ABCDEF1011121314151617>		plaintext  = <4445535864657378>		ciphertext = <D8FA5084FAD4B35C>		key        = <01010101010101010123456789ABCDEF1011121314151617>		plaintext  = <94DBE082549A14EF>		ciphertext = <9011121314151617>   ========================================================================= *//* ============================================================================	main()	void __hal_des(jbool mode)	mode:		ENCIPHER	jtrue		DECIPHER	jfalse	key in r.bBlock[JAYA_BCRYPTO_KEYA+0...7]	input/output in u.dwBlock[JAYA_DWCRYPTO_...]   ========================================================================= */int main(void){	char	str[255];	jbyte	i;	printf("Start of hal::test02\n");	/* validate the internal tests itselfs ! */	printf("\nInternal testing ...\n");	hexa2bytes(&r.bBlock[JAYA_BCRYPTO_KEYA],"010208090A0C0E0F");	bytes2hexa(str,&r.bBlock[JAYA_BCRYPTO_KEYA],8,'\0');	if (strcmp("010208090A0C0E0F",str)!=0) {		printf("!?! BAD LUCK 010208090A0C0E0F!=%s !\n",str);	} else {		printf("\tpre-test 1 OK\n");	}	hexa2bytes(&r.bBlock[JAYA_BCRYPTO_KEYA],"1020A0F12345F3A3");	bytes2hexa(str,&r.bBlock[JAYA_BCRYPTO_KEYA],8,'\0');	if (strcmp("1020A0F12345F3A3",str)!=0) {		printf("!?! BAD LUCK 1020A0F12345F3A3!=%s !\n",str);	} else {		printf("\tpre-test 2 OK\n");	}	/* DES basic testing */	printf("\nBasic DES testing ...\n");	hexa2bytes(&r.bBlock[JAYA_BCRYPTO_KEYA],"0101010101010101");	hexa2bytes(&u.bBlock[JAYA_BCRYPTO_INPUT0],"0000000000000000");	__hal_des(ENCIPHER);	bytes2hexa(str,&u.bBlock[JAYA_BCRYPTO_OUTPUT0],8,'\0');	if (strcmp("8CA64DE9C1B123A7",str)!=0) {		printf("encipher:BAD LUCK 8CA64DE9C1B123A7!=%s !\n",str);	} else {		u.dwBlock[JAYA_DWCRYPTO_INPUT0] = u.dwBlock[JAYA_DWCRYPTO_OUTPUT0];		u.dwBlock[JAYA_DWCRYPTO_INPUT1] = u.dwBlock[JAYA_DWCRYPTO_OUTPUT1];		__hal_des(DECIPHER);		bytes2hexa(str,&u.bBlock[JAYA_BCRYPTO_OUTPUT0],8,'\0');		if (strcmp("0000000000000000",str)!=0) {			printf("decipher:BAD LUCK 0000000000000000!=%s !\n",str);		} else {			printf("\tDES pre-test 1 OK\n");		}	}	hexa2bytes(&r.bBlock[JAYA_BCRYPTO_KEYA],"0123456789ABCDEF");	hexa2bytes(&u.bBlock[JAYA_BCRYPTO_INPUT0],"0000000000000000");	__hal_des(ENCIPHER);	bytes2hexa(str,&u.bBlock[JAYA_BCRYPTO_OUTPUT0],8,'\0');	if (strcmp("D5D44FF720683D0D",str)!=0) {		printf("encipher:BAD LUCK D5D44FF720683D0D!=%s !\n",str);	} else {		u.dwBlock[JAYA_DWCRYPTO_INPUT0] = u.dwBlock[JAYA_DWCRYPTO_OUTPUT0];		u.dwBlock[JAYA_DWCRYPTO_INPUT1] = u.dwBlock[JAYA_DWCRYPTO_OUTPUT1];		__hal_des(DECIPHER);		bytes2hexa(str,&u.bBlock[JAYA_BCRYPTO_OUTPUT0],8,'\0');		if (strcmp("0000000000000000",str)!=0) {			printf("decipher:BAD LUCK 0000000000000000!=%s !\n",str);		} else {			printf("\tDES pre-test 2 OK\n");		}	}	hexa2bytes(&r.bBlock[JAYA_BCRYPTO_KEYA],"0123456789ABCDEF");	hexa2bytes(&u.bBlock[JAYA_BCRYPTO_INPUT0],"0123456789ABCDEF");	__hal_des(ENCIPHER);	bytes2hexa(str,&u.bBlock[JAYA_BCRYPTO_OUTPUT0],8,'\0');	if (strcmp("56CC09E7CFDC4CEF",str)!=0) {		printf("encipher:BAD LUCK 56CC09E7CFDC4CEF!=%s !\n",str);	} else {		u.dwBlock[JAYA_DWCRYPTO_INPUT0] = u.dwBlock[JAYA_DWCRYPTO_OUTPUT0];		u.dwBlock[JAYA_DWCRYPTO_INPUT1] = u.dwBlock[JAYA_DWCRYPTO_OUTPUT1];		__hal_des(DECIPHER);		bytes2hexa(str,&u.bBlock[JAYA_BCRYPTO_OUTPUT0],8,'\0');		if (strcmp("0123456789ABCDEF",str)!=0) {			printf("decipher:BAD LUCK 0123456789ABCDEF!=%s !\n",str);		} else {			printf("\tDES pre-test 3 OK\n");		}	}	hexa2bytes(&r.bBlock[JAYA_BCRYPTO_KEYA],"0123456789ABCDEF");	hexa2bytes(&u.bBlock[JAYA_BCRYPTO_INPUT0],"0123456789ABCDE7");	__hal_des(ENCIPHER);	bytes2hexa(str,&u.bBlock[JAYA_BCRYPTO_OUTPUT0],8,'\0');	if (strcmp("C95744256A5ED31D",str)!=0) {		printf("encipher:BAD LUCK C95744256A5ED31D!=%s !\n",str);	} else {		u.dwBlock[JAYA_DWCRYPTO_INPUT0] = u.dwBlock[JAYA_DWCRYPTO_OUTPUT0];		u.dwBlock[JAYA_DWCRYPTO_INPUT1] = u.dwBlock[JAYA_DWCRYPTO_OUTPUT1];		__hal_des(DECIPHER);		bytes2hexa(str,&u.bBlock[JAYA_BCRYPTO_OUTPUT0],8,'\0');		if (strcmp("0123456789ABCDE7",str)!=0) {			printf("decipher:BAD LUCK 0123456789ABCDE7!=%s !\n",str);		} else {			printf("\tDES pre-test 4 OK\n");		}	}	/* DES more tests */	printf("\nFull DES testing ...\n");	i = 0;	while (gCell[i].key[0]!='\0') {		hexa2bytes(&r.bBlock[JAYA_BCRYPTO_KEYA],gCell[i].key);		hexa2bytes(&u.bBlock[JAYA_BCRYPTO_INPUT0],gCell[i].plain);		__hal_des(ENCIPHER);		bytes2hexa(str,&u.bBlock[JAYA_BCRYPTO_OUTPUT0],8,'\0');		if (strcmp(gCell[i].cipher,str)!=0) {			printf("#%.2d encipher:BAD LUCK %s!=%s !\n",i,gCell[i].cipher,str);		} else {			u.dwBlock[JAYA_DWCRYPTO_INPUT0] = u.dwBlock[JAYA_DWCRYPTO_OUTPUT0];			u.dwBlock[JAYA_DWCRYPTO_INPUT1] = u.dwBlock[JAYA_DWCRYPTO_OUTPUT1];			__hal_des(DECIPHER);			bytes2hexa(str,&u.bBlock[JAYA_BCRYPTO_OUTPUT0],8,'\0');			if (strcmp(gCell[i].plain,str)!=0) {				printf("#%.2d decipher:BAD LUCK %s!=%s !\n",i,gCell[i].plain,str);			} else {				printf("\t#%.2d PASS\n",i);			}		}		i++;	}	/* DESX basic testing */	printf("\nBasic DESX testing ...\n");	hexa2bytes(&r.bBlock[JAYA_BCRYPTO_KEYA],"0101010101010101");	hexa2bytes(&r.bBlock[JAYA_BCRYPTO_KEYB],"0123456789ABCDEF");	hexa2bytes(&r.bBlock[JAYA_BCRYPTO_KEYC],"1011121314151617");	hexa2bytes(&u.bBlock[JAYA_BCRYPTO_INPUT0],"94DBE082549A14EF");	__hal_desx(ENCIPHER);	bytes2hexa(str,&u.bBlock[JAYA_BCRYPTO_OUTPUT0],8,'\0');	if (strcmp("9011121314151617",str)!=0) {		printf("encipher:BAD LUCK 9011121314151617!=%s !\n",str);	} else {		u.dwBlock[JAYA_DWCRYPTO_INPUT0] = u.dwBlock[JAYA_DWCRYPTO_OUTPUT0];		u.dwBlock[JAYA_DWCRYPTO_INPUT1] = u.dwBlock[JAYA_DWCRYPTO_OUTPUT1];		__hal_desx(DECIPHER);		bytes2hexa(str,&u.bBlock[JAYA_BCRYPTO_OUTPUT0],8,'\0');		if (strcmp("94DBE082549A14EF",str)!=0) {			printf("decipher:BAD LUCK 94DBE082549A14EF!=%s !\n",str);		} else {			printf("\tDESX pre-test 1 OK\n");		}	}	/* 3DES basic testing */	printf("\nBasic 3DES testing ...\n");	hexa2bytes(&r.bBlock[JAYA_BCRYPTO_KEYA],"0123456789ABCDEF");	hexa2bytes(&r.bBlock[JAYA_BCRYPTO_KEYB],"FEDCBA9876543210");	hexa2bytes(&r.bBlock[JAYA_BCRYPTO_KEYC],"89ABCDEF01234567");	hexa2bytes(&u.bBlock[JAYA_BCRYPTO_INPUT0],"0123456789ABCDE7");	__hal_3des(ENCIPHER);	bytes2hexa(str,&u.bBlock[JAYA_BCRYPTO_OUTPUT0],8,'\0');	if (strcmp("DE0B7C06AE5E0ED5",str)!=0) {		printf("encipher:BAD LUCK DE0B7C06AE5E0ED5!=%s !\n",str);	} else {		u.dwBlock[JAYA_DWCRYPTO_INPUT0] = u.dwBlock[JAYA_DWCRYPTO_OUTPUT0];		u.dwBlock[JAYA_DWCRYPTO_INPUT1] = u.dwBlock[JAYA_DWCRYPTO_OUTPUT1];		__hal_3des(DECIPHER);		bytes2hexa(str,&u.bBlock[JAYA_BCRYPTO_OUTPUT0],8,'\0');		if (strcmp("0123456789ABCDE7",str)!=0) {			printf("decipher:BAD LUCK 0123456789ABCDE7!=%s !\n",str);		} else {			printf("\t3DES pre-test 1 OK\n");		}	}	hexa2bytes(&r.bBlock[JAYA_BCRYPTO_KEYA],"0123456789ABCDEF");	hexa2bytes(&r.bBlock[JAYA_BCRYPTO_KEYB],"FEDCBA9876543210");	hexa2bytes(&r.bBlock[JAYA_BCRYPTO_KEYC],"0123456789ABCDEF");	hexa2bytes(&u.bBlock[JAYA_BCRYPTO_INPUT0],"0123456789ABCDE7");	__hal_3des(ENCIPHER);	bytes2hexa(str,&u.bBlock[JAYA_BCRYPTO_OUTPUT0],8,'\0');	if (strcmp("7F1D0A77826B8AFF",str)!=0) {		printf("encipher:BAD LUCK 7F1D0A77826B8AFF!=%s !\n",str);	} else {		u.dwBlock[JAYA_DWCRYPTO_INPUT0] = u.dwBlock[JAYA_DWCRYPTO_OUTPUT0];		u.dwBlock[JAYA_DWCRYPTO_INPUT1] = u.dwBlock[JAYA_DWCRYPTO_OUTPUT1];		__hal_3des(DECIPHER);		bytes2hexa(str,&u.bBlock[JAYA_BCRYPTO_OUTPUT0],8,'\0');		if (strcmp("0123456789ABCDE7",str)!=0) {			printf("decipher:BAD LUCK 0123456789ABCDE7!=%s !\n",str);		} else {			printf("\t3DES pre-test 2 OK\n");		}	}	printf("\nEnd of hal::test02\n");	return 0;}

⌨️ 快捷键说明

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