User's Manual

54
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define SCRAMBLE_MAX 1024
void scramble_in(unsigned char* dst, unsigned src) {
unsigned i;
for(i=0;i<SCRAMBLE_LENGTH;++i)
dst[i] = (((src + 0x5a) >> i) * (i + 0x13)) ^ 0x3e;
}
int main() {
KEY_NET k;
unsigned i;
FILE* f;
srand(time(0));
f = fopen("table.h","wt");
if (!f) {
printf("Error opening the file table.h\n");
exit(EXIT_FAILURE);
}
fprintf(f,"void scramble_in(unsigned char* dst, unsigned src) {\n");
fprintf(f,"\tunsigned i;\n");
fprintf(f,"\tfor(i=0;i<SCRAMBLE_LENGTH;++i)\n");
fprintf(f,"\t\tdst[i] = (((src + 0x5a) >> i) * (i + 0x13)) ^ 0x3e;\n");
fprintf(f,"}\n\n");
fprintf(f,"#define SCRAMBLE_MAX %d\n\n",SCRAMBLE_MAX);
fprintf(f,"unsigned char SCRAMBLE[SCRAMBLE_MAX][SCRAMBLE_LENGTH] = {\n");
for(i=0;i<SCRAMBLE_MAX;++i) {
unsigned j;
k.net_command = NET_KEY_ACCESS;
k.command = SCRAMBLING_MODE;
scramble_in(k.data,i);
smartlink(&k);
if (k.status != ST_OK) {
printf("Error in SCRAMBLING_MODE\n");
exit(EXIT_FAILURE);
}
fprintf(f,"{ ");
for(j=0;j<SCRAMBLE_LENGTH;++j) {
unsigned v = k.data[j];
if (j)
fprintf(f,", ");
fprintf(f,"0x%02x",v);
}
fprintf(f," }");
if (i+1!=SCRAMBLE_MAX)
fprintf(f,",");
fprintf(f,"\n");
}
fprintf(f,"};\n");
fclose(f);
printf("Scrambling table written\n");