|
|
researchv10 Norman
extern int shift[];
extern long keys_L[], keys_H[];
extern long PC1[], PC2[];
compkeys(key, rev)
long key[2];
int rev;
{
register long low, high;
register long lowkey, highkey;
register long i, j;
int iiiii;
int carry1, carry2, carry3;
low = 0;
high = 0;
for (i = 0, j = key[1]; i < 64; i += 2) {
if (j < 0) {
low |= PC1[i];
high |= PC1[i + 1];
}
j += j;
}
for (j = key[0]; i < 128; i += 2) {
if (j < 0) {
low |= PC1[i];
high |= PC1[i + 1];
}
j += j;
}
for (iiiii = 0; iiiii < 16; iiiii++) {
for (j = 0; j < shift[iiiii]; j++) {
carry1 = 0;
carry2 = 0;
carry3 = 0;
if (low < 0)
carry1 = 020;
if (low & 010)
carry2 = 0400;
if (high < 0)
carry3 = 1;
low <<= 1;
low &= ~020;
low |= carry1;
low |= carry3;
high <<= 1;
high |= carry2;
}
lowkey = 0;
highkey = 0;
for (i = 0, j = high; i < 64; i += 2) {
if (j < 0) {
lowkey |= PC2[i];
highkey |= PC2[i + 1];
}
j += j;
}
for (j = low; i < 128; i += 2) {
if (j < 0) {
lowkey |= PC2[i];
highkey |= PC2[i + 1];
}
j += j;
}
if (rev) {
keys_L[15 - iiiii] = lowkey;
keys_H[15 - iiiii] = highkey;
} else {
keys_L[iiiii] = lowkey;
keys_H[iiiii] = highkey;
}
}
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.