0bee10929f
git-svn-id: svn://10.65.10.50/trunk@11940 c028cbd2-c16b-5b4b-a496-9718f37d4682
240 lines
5.1 KiB
C
Executable File
240 lines
5.1 KiB
C
Executable File
/*
|
|
* SmartKey Demo Program
|
|
* Copyright EUTRON 1993-2004
|
|
*/
|
|
|
|
#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", (unsigned)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 unknown"); 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;
|
|
case '4' : printf(", memory 896 byte"); break;
|
|
default : printf(", memory unknown"); 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 unknown"); 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;
|
|
case '4' : printf(", memory 896 byte"); break;
|
|
default : printf(", memory unknown"); 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 unknown"); 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;
|
|
}
|
|
|