/* * 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; }