Exemple #1
0
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;
	}
Exemple #2
0
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;
}
Exemple #3
0
/* 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;
}