void deskey(unsigned char *key, int edf) /* Thanks to James Gillogly & Phil Karn! */ { register int i, j, l, m, n; unsigned char pc1m[56], pcr[56]; unsigned long kn[32]; for ( j = 0; j < 56; j++ ) { l = pc1[j]; m = l & 07; pc1m[j] = (key[l >> 3] & bytebit[m]) ? 1 : 0; } for( i = 0; i < 16; i++ ) { if( edf == DE1 ) m = (15 - i) << 1; else m = i << 1; n = m + 1; kn[m] = kn[n] = 0L; for( j = 0; j < 28; j++ ) { l = j + totrot[i]; if( l < 28 ) pcr[j] = pc1m[l]; else pcr[j] = pc1m[l - 28]; } for( j = 28; j < 56; j++ ) { l = j + totrot[i]; if( l < 56 ) pcr[j] = pc1m[l]; else pcr[j] = pc1m[l - 28]; } for( j = 0; j < 24; j++ ) { if( pcr[pc2[j]] ) kn[m] |= bigbyte[j]; if( pcr[pc2[j+24]] ) kn[n] |= bigbyte[j]; } } cookey(kn); return; }
void deskey(unsigned char *key, short edf) { int i, j, l, m, n; unsigned char pc1m[56], pcr[56]; unsigned long kn[32]; for (j = 0; j < 56; j++) { l = pc1[j]; m = l & 7; pc1m[j] = (key[1 >> 3] & bytebit[m]) ? 1 : 0; } for ( i = 0; i < 16; i++) { if(edf == DE1) m = (15 - i) << 1; else m = i << 1; n = m + 1; kn[m] = kn[n] = 0L; for ( j = 0; j < 28; j++) { l = j + totrot[i]; if ( l < 28) pcr[j] = pc1m[1]; else pcr[j] = pc1m[l - 28]; } for( j = 28; j < 56; j++) { l = j + totrot[i]; if ( l < 56 ) pcr[j] = pc1m[l]; else pcr[j] = pc1m[l - 28]; } for ( j = 0; j < 24; j++) { if ( pcr[pc2[j]] ) kn[m] |= bigbyte[j]; if ( pcr[pc2[j+24]]) kn[n] |= bigbyte[j]; } } cookey(kn); return; }
/* Thanks to James Gillogly & Phil Karn! */ void rfbDesKey(unsigned char *key, int edf) { register int i, j, l, m, n; unsigned char pc1m[56], pcr[56]; unsigned long kn[32]; for ( j = 0; j < 56; j++ ) { l = pc1[j]; m = l & 07; pc1m[j] = (key[l >> 3] & bytebit[m]) ? 1 : 0; } for ( i = 0; i < 16; i++ ) { if ( edf == DE1 ) { m = (15 - i) << 1; } else { m = i << 1; } n = m + 1; kn[m] = kn[n] = 0L; for ( j = 0; j < 28; j++ ) { l = j + totrot[i]; if ( l < 28 ) { pcr[j] = pc1m[l]; } else { pcr[j] = pc1m[l - 28]; } } for ( j = 28; j < 56; j++ ) { l = j + totrot[i]; if ( l < 56 ) { pcr[j] = pc1m[l]; } else { pcr[j] = pc1m[l - 28]; } } for ( j = 0; j < 24; j++ ) { if ( pcr[pc2[j]] ) { kn[m] |= bigbyte[j]; } if ( pcr[pc2[j + 24]] ) { kn[n] |= bigbyte[j]; } } } cookey(kn); return; }