Files correlati : Ricompilazione Demo : [ ] Commento : Progetti e altra roba per Linux git-svn-id: svn://10.65.10.50/trunk@11293 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			238 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			238 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /*
 | |
|  * SmartKey Demo Program
 | |
|  * Copyright EUTRON 1993-2002
 | |
|  */
 | |
| 
 | |
| #include <string.h>
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| 
 | |
| #include "clink.h"
 | |
| 
 | |
| static void print_error(int err)
 | |
| {
 | |
| 	switch (err) {
 | |
| 		case ST_NONE_KEY :
 | |
| 			printf("ST_NONE_KEY : Key Not Found\n");
 | |
| 			break;
 | |
| 		case ST_SYNT_ERR :
 | |
| 			printf("ST_SYNT_ERR : Syntax Error\n");
 | |
| 			break;
 | |
| 		case ST_LABEL_FAILED :
 | |
| 			printf("ST_LABEL_FAILED : Wrong Label\n");
 | |
| 			break;
 | |
| 		case ST_PW_DATA_FAILED :
 | |
| 			printf("ST_PW_DATA_FAILED : Wrong Password\n");
 | |
| 			break;
 | |
| 		case ST_HW_FAILURE :
 | |
| 			printf("ST_HW_FAILURE : Hardware failure\n");
 | |
| 			break;
 | |
| 		default:
 | |
| 			printf("%04x : Unrecognizable Status\n", err);
 | |
| 			break;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| int main(void)
 | |
| {
 | |
| 	SKEY_DATA skey;
 | |
| 	int i;
 | |
| 	unsigned model;
 | |
| 
 | |
| 	printf("SmartKey Demo Program\n\n");
 | |
| 
 | |
| 	/* Initialize */
 | |
| 	memset(&skey,0,sizeof(skey));
 | |
| 
 | |
| 	/* Set the Label */
 | |
| 	strncpy(skey.label, "SMARTKEY", LABEL_LENGTH);
 | |
| 
 | |
| 	/* Locating */
 | |
| 	printf("Locating : ");
 | |
| 	skey.command = LOCATING_MODE;
 | |
| 
 | |
| 	clink(&skey);
 | |
| 	if (skey.status != ST_OK) {
 | |
| 		print_error(skey.status);
 | |
| 		exit(EXIT_FAILURE);
 | |
| 	}
 | |
| 
 | |
| 	printf("SmartKey found on port %d\n", skey.lpt);
 | |
| 
 | |
| 	/* Scrambling */
 | |
| 	printf("Scrambling ");
 | |
| 
 | |
| 	memcpy(skey.data, "12345678", SCRAMBLE_LENGTH);
 | |
| 	skey.command = SCRAMBLING_MODE;
 | |
| 
 | |
| 	for(i=0;i<SCRAMBLE_LENGTH;++i)
 | |
| 		printf("%02x", (unsigned)skey.data[i]);
 | |
| 
 | |
| 	printf(" : ");
 | |
| 
 | |
| 	clink(&skey);
 | |
| 	if (skey.status != ST_OK) {
 | |
| 		print_error(skey.status);
 | |
| 		exit(EXIT_FAILURE);
 | |
| 	}
 | |
| 
 | |
| 	for(i=0;i<SCRAMBLE_LENGTH;++i)
 | |
| 		printf("%02x", (unsigned)skey.data[i]);
 | |
| 
 | |
| 	printf("\n");
 | |
| 
 | |
| 	/* Serial */
 | |
| 	printf("Serial : ");
 | |
| 	skey.command = SERIAL_NUMBER_READING_MODE;
 | |
| 
 | |
| 	clink(&skey);
 | |
| 	if (skey.status != ST_OK) {
 | |
| 		print_error(skey.status);
 | |
| 		exit(EXIT_FAILURE);
 | |
| 	}
 | |
| 
 | |
| 	printf("%02x%02x%02x%02x\n", (unsigned)skey.data[3], (unsigned)skey.data[2], (unsigned)skey.data[1], (unsigned)skey.data[0]);
 | |
| 
 | |
| 	/* Model */
 | |
| 	printf("Model : ");
 | |
| 	skey.command = MODEL_READING_MODE;
 | |
| 
 | |
| 	clink(&skey);
 | |
| 	if (skey.status != ST_OK) {
 | |
| 		print_error(skey.status);
 | |
| 		exit(EXIT_FAILURE);
 | |
| 	}
 | |
| 
 | |
| 	switch (skey.data[0]) {
 | |
| 		case SKEY_FX : printf("model FX"); break;
 | |
| 		case SKEY_PR : printf("model PR"); break;
 | |
| 		case SKEY_EP : printf("model EP"); break;
 | |
| 		case SKEY_SP : printf("model SP"); break;
 | |
| 		case SKEY_NET : printf("model NET"); break;
 | |
| 		default : printf("model unknow"); break;
 | |
| 	}
 | |
| 	switch (skey.data[1]) {
 | |
| 		case '0' : printf(", memory 0 byte"); break;
 | |
| 		case '1' : printf(", memory 64 byte"); break;
 | |
| 		case '2' : printf(", memory 192 byte"); break;
 | |
| 		case '3' : printf(", memory 416 byte"); break;
 | |
| 		default : printf(", memory unknow"); break;
 | |
| 	}
 | |
| 	printf("\n");
 | |
| 
 | |
| 	/* Ext Model */
 | |
| 	printf("Ext Model : ");
 | |
| 	skey.command = EXT_MODEL_READING_MODE;
 | |
| 
 | |
| 	clink(&skey);
 | |
| 	if (skey.status != ST_OK) {
 | |
| 		print_error(skey.status);
 | |
| 		exit(EXIT_FAILURE);
 | |
| 	}
 | |
| 
 | |
| 	model = skey.data[0];
 | |
| 
 | |
| 	switch (skey.data[0]) {
 | |
| 		case SKEY_FX : printf("model FX"); break;
 | |
| 		case SKEY_PR : printf("model PR"); break;
 | |
| 		case SKEY_EP : printf("model EP"); break;
 | |
| 		case SKEY_SP : printf("model SP"); break;
 | |
| 		case SKEY_NET : printf("model NET"); break;
 | |
| 		default : printf("model unknow"); break;
 | |
| 	}
 | |
| 	switch (skey.data[1]) {
 | |
| 		case '0' : printf(", memory 0 byte"); break;
 | |
| 		case '1' : printf(", memory 64 byte"); break;
 | |
| 		case '2' : printf(", memory 192 byte"); break;
 | |
| 		case '3' : printf(", memory 416 byte"); break;
 | |
| 		default : printf(", memory unknow"); break;
 | |
| 	}
 | |
| 	switch (skey.data[2]) {
 | |
| 		case 0 : printf(", type A"); break;
 | |
| 		case 1 : printf(", type B"); break;
 | |
| 		case 2 : printf(", type ASIC"); break;
 | |
| 		case 3 : printf(", type USB"); break;
 | |
| 		default : printf(", type unknow"); break;
 | |
| 	}
 | |
| 	printf("\n");
 | |
| 
 | |
| 	/* set the password */
 | |
| 	strncpy(skey.password, "EUTRON", PASSWORD_LENGTH);
 | |
| 
 | |
| 	if (model == SKEY_EP || model == SKEY_SP || model == SKEY_NET) {
 | |
| 
 | |
| 		/* Fix */
 | |
| 		printf("Fix : ");
 | |
| 		skey.command = FIX_READING_MODE;
 | |
| 
 | |
| 		clink(&skey);
 | |
| 		if (skey.status != ST_OK) {
 | |
| 			print_error(skey.status);
 | |
| 			exit(EXIT_FAILURE);
 | |
| 		}
 | |
| 
 | |
| 		printf("%s\n", skey.data[0]!=0 ? "yes" : "no" );
 | |
| 	}
 | |
| 
 | |
| 	if (model == SKEY_EP || model == SKEY_SP || model == SKEY_NET) {
 | |
| 
 | |
| 		/* Fail Counter */
 | |
| 		printf("Fail Counter : ");
 | |
| 		skey.command = FAIL_COUNTER_READING_MODE;
 | |
| 
 | |
| 		clink(&skey);
 | |
| 		if (skey.status != ST_OK) {
 | |
| 			print_error(skey.status);
 | |
| 			exit(EXIT_FAILURE);
 | |
| 		}
 | |
| 
 | |
| 		printf("%d\n",skey.fail_counter);
 | |
| 	}
 | |
| 
 | |
| 	if (model == SKEY_PR || model == SKEY_EP || model == SKEY_SP || model == SKEY_NET) {
 | |
| 
 | |
| 		/* Reading */
 | |
| 		printf("Reading: ");
 | |
| 
 | |
| 		skey.command = READING_MODE;
 | |
| 
 | |
| 		clink(&skey);
 | |
| 		if (skey.status != ST_OK) {
 | |
| 			print_error(skey.status);
 | |
| 			exit(EXIT_FAILURE);
 | |
| 		}
 | |
| 
 | |
| 		for(i=0;i<DATA_LENGTH;++i)
 | |
| 			if (skey.data[i] >= 32 && skey.data[i] <= 127)
 | |
| 				printf("%c", (char)skey.data[i]);
 | |
| 			else
 | |
| 				printf(" ");
 | |
| 
 | |
| 		printf("\n");
 | |
| 
 | |
| 		/* Reading */
 | |
| 		printf("Writing: ");
 | |
| 
 | |
| 		skey.command = WRITING_MODE;
 | |
| 		memset(skey.data,0,DATA_LENGTH);
 | |
| 		strncpy(skey.data,"SECURITY DATA",DATA_LENGTH);
 | |
| 
 | |
| 		clink(&skey);
 | |
| 		if (skey.status != ST_OK) {
 | |
| 			print_error(skey.status);
 | |
| 			exit(EXIT_FAILURE);
 | |
| 		}
 | |
| 
 | |
| 		for(i=0;i<DATA_LENGTH;++i)
 | |
| 			if (skey.data[i] >= 32 && skey.data[i] <= 127)
 | |
| 				printf("%c", (char)skey.data[i]);
 | |
| 			else
 | |
| 				printf(" ");
 | |
| 
 | |
| 		printf("\n");
 | |
| 	}
 | |
| 
 | |
| 	return EXIT_SUCCESS;
 | |
| }
 | |
| 
 |