#include <afsconfig.h>
#include <afs/param.h>
-RCSID("$Header$");
+RCSID
+ ("$Header$");
#ifndef KERNEL
#include <stdio.h>
#ifdef AFS_PTHREAD_ENV
pthread_mutex_t rxkad_stats_mutex;
#endif /* AFS_PTHREAD_ENV */
-
+
/* encrypt == 0 ==> decrypt, else encrypt */
-afs_int32 des_ecb_encrypt(afs_uint32 *clear, afs_uint32 *cipher,
- register des_key_schedule schedule, int encrypt)
+afs_int32
+des_ecb_encrypt(afs_uint32 * clear, afs_uint32 * cipher,
+ register des_key_schedule schedule, int encrypt)
{
/* better pass 8 bytes, length not checked here */
- register afs_uint32 R1 = 0, L1 = 0; /* R1 = r10, L1 = r9 */
- register afs_uint32 R2 = 0, L2 = 0; /* R2 = r8, L2 = r7 */
+ register afs_uint32 R1 = 0, L1 = 0; /* R1 = r10, L1 = r9 */
+ register afs_uint32 R2 = 0, L2 = 0; /* R2 = r8, L2 = r7 */
afs_int32 i;
/* one more registers left on VAX, see below P_temp_p */
#ifdef BITS16
sbox_in_16_a S_in_16_a;
sbox_in_16_b S_in_16_b;
sbox_in_16_c S_in_16_c;
- unsigned int *S_in_a_16_p = (unsigned int *) &S_in_16_a;
- unsigned int *S_in_b_16_p = (unsigned int *) &S_in_16_b;
- unsigned int *S_in_c_16_p = (unsigned int *) &S_in_16_c;
+ unsigned int *S_in_a_16_p = (unsigned int *)&S_in_16_a;
+ unsigned int *S_in_b_16_p = (unsigned int *)&S_in_16_b;
+ unsigned int *S_in_c_16_p = (unsigned int *)&S_in_16_c;
#endif
#ifndef BITS32
#ifndef BITS16
#endif
#endif
afs_uint32 P_temp;
- register unsigned char *P_temp_p = (unsigned char *) & P_temp;
+ register unsigned char *P_temp_p = (unsigned char *)&P_temp;
#ifdef BITS16
sbox_out S_out;
- afs_uint32 *S_out_p = (afs_uint32 *) &S_out;
+ afs_uint32 *S_out_p = (afs_uint32 *) & S_out;
#endif
afs_uint32 R_save, L_save;
#ifdef DEBUG
afs_uint32 dbg_tmp[2];
#endif
- LOCK_RXKAD_STATS
- if (encrypt) rxkad_stats.des_encrypts[DES_ENCRYPT]++;
- else rxkad_stats.des_encrypts[DES_DECRYPT]++;
+ LOCK_RXKAD_STATS if (encrypt)
+ rxkad_stats.des_encrypts[DES_ENCRYPT]++;
+ else
+ rxkad_stats.des_encrypts[DES_DECRYPT]++;
UNLOCK_RXKAD_STATS
-
- /*
- * Use L1,R1 and L2,R2 as two sets of "64-bit" registers always
- * work from L1,R1 input to L2,R2 output; initialize the cleartext
- * into registers.
- */
+ /*
+ * Use L1,R1 and L2,R2 as two sets of "64-bit" registers always
+ * work from L1,R1 input to L2,R2 output; initialize the cleartext
+ * into registers.
+ */
#ifdef MUSTALIGN
#ifdef DEBUG
- /*
- * If the alignment is wrong, the programmer really screwed up --
- * we aren't even getting the right data type. His problem. Keep
- * this code for debugging.
- */
- /* Make sure schedule is ok */
- if ((afs_int32) schedule & 3) {
- fprintf(stderr,"des.c schedule arg pointer not aligned\n");
+ /*
+ * If the alignment is wrong, the programmer really screwed up --
+ * we aren't even getting the right data type. His problem. Keep
+ * this code for debugging.
+ */
+ /* Make sure schedule is ok */
+ if ((afs_int32) schedule & 3) {
+ fprintf(stderr, "des.c schedule arg pointer not aligned\n");
abort();
}
#endif
memcpy((char *)&R_save, (char *)clear, sizeof(R_save));
L1 = L_save;
R1 = R_save;
- }
- else
+ } else
#endif
{
- if (clear) L1 = *clear++;
- else L1 = 0;
- if (clear) R1 = *clear;
- else R1 = 0;
+ if (clear)
+ L1 = *clear++;
+ else
+ L1 = 0;
+ if (clear)
+ R1 = *clear;
+ else
+ R1 = 0;
}
#ifdef DEBUG
i = 0;
dbg_tmp[0] = L1;
dbg_tmp[1] = R1;
- printf("iter = %2d before IP\n\t\tL1 R1 = ",i);
- des_cblock_print_file (dbg_tmp, stdout);
+ printf("iter = %2d before IP\n\t\tL1 R1 = ", i);
+ des_cblock_print_file(dbg_tmp, stdout);
}
DBG_PRINT("before IP");
R1 = R2;
/* iterate through the inner loop */
- for (i = 0; i <= (AUTH_DES_ITER-1); i++) {
+ for (i = 0; i <= (AUTH_DES_ITER - 1); i++) {
#ifdef DEBUG
if (des_debug & 2) {
dbg_tmp[0] = L1;
dbg_tmp[1] = R1;
- printf("iter = %2d start loop\n\t\tL1 R1 = ",i);
- des_cblock_print_file (dbg_tmp, stdout);
+ printf("iter = %2d start loop\n\t\tL1 R1 = ", i);
+ des_cblock_print_file(dbg_tmp, stdout);
DBG_PRINT("start loop");
}
-
#endif
R_save = R1;
#include "e.c"
#else /* Bill's fast E */
L2 = (R1 << 1);
- if (R1 & (1<<31))
- L2 |= 1<<0;
+ if (R1 & (1 << 31))
+ L2 |= 1 << 0;
L2 &= 077;
- L2 |= (R1 <<3) & 07700;
- L2 |= (R1 <<5) & 0770000;
- L2 |= (R1 <<7) & 077000000;
- L2 |= (R1 <<9) & 07700000000;
- L2 |= (R1 <<11) & 030000000000;
+ L2 |= (R1 << 3) & 07700;
+ L2 |= (R1 << 5) & 0770000;
+ L2 |= (R1 << 7) & 077000000;
+ L2 |= (R1 << 9) & 07700000000;
+ L2 |= (R1 << 11) & 030000000000;
/* now from right to right */
R2 = ((R1 >> 17) & 0176000);
- if (R1 & (1<<0)) R2 |= 1<<15;
+ if (R1 & (1 << 0))
+ R2 |= 1 << 15;
R2 |= ((R1 >> 21) & 017);
R2 |= ((R1 >> 19) & 01760);
/* right to left */
asm(" rotl $1,r10,r7");
L2 &= 077;
- L2 |= (R1 <<3) & 07700;
- L2 |= (R1 <<5) & 0770000;
- L2 |= (R1 <<7) & 077000000;
- L2 |= (R1 <<9) & 07700000000;
- L2 |= (R1 <<11) & 030000000000;
+ L2 |= (R1 << 3) & 07700;
+ L2 |= (R1 << 5) & 0770000;
+ L2 |= (R1 << 7) & 077000000;
+ L2 |= (R1 << 9) & 07700000000;
+ L2 |= (R1 << 11) & 030000000000;
asm(" rotl $-17,r10,r8");
R2 &= 0176000;
dbg_tmp[0] = L1;
dbg_tmp[1] = R1;
DBG_PRINT("after e");
- printf("iter = %2d after e\n\t\tL1 R1 = ",i);
- des_cblock_print_file (dbg_tmp, stdout);
+ printf("iter = %2d after e\n\t\tL1 R1 = ", i);
+ des_cblock_print_file(dbg_tmp, stdout);
}
#endif
* First XOR left half.
*/
if (encrypt) {
- L1 ^= *(((afs_uint32 *) &schedule[i] )+0);
+ L1 ^= *(((afs_uint32 *) & schedule[i]) + 0);
/* now right half */
- R1 ^= *(((afs_uint32 *) &schedule[i] )+1);
- }
- else {
- L1 ^= *(((afs_uint32 *) &schedule[AUTH_DES_ITER-i-1] )+0);
+ R1 ^= *(((afs_uint32 *) & schedule[i]) + 1);
+ } else {
+ L1 ^= *(((afs_uint32 *) & schedule[AUTH_DES_ITER - i - 1]) + 0);
/* now right half */
- R1 ^= *(((afs_uint32 *) &schedule[AUTH_DES_ITER-i-1] )+1);
+ R1 ^= *(((afs_uint32 *) & schedule[AUTH_DES_ITER - i - 1]) + 1);
}
/* dont have to reset input to L1, R1 */
dbg_tmp[0] = L1;
dbg_tmp[1] = R1;
DBG_PRINT("after xor");
- printf("iter = %2d after xor\n\t\tL1 R1 =",i);
- des_cblock_print_file (dbg_tmp, stdout);
+ printf("iter = %2d after xor\n\t\tL1 R1 =", i);
+ des_cblock_print_file(dbg_tmp, stdout);
}
#endif
/* from S_in to S_out */
#ifdef BITS16
- *S_in_a_16_p = L1&0xffff;
- *S_in_b_16_p = (L1>>16)&0xffff;
- *S_in_c_16_p = R1&0xffff;
- (*(afs_uint32 *) &S_out) =
- (unsigned) S_adj[0][S_in_16_a.b0];
- S_out.b1 = (unsigned) S_adj[1][S_in_16_a.b1];
+ *S_in_a_16_p = L1 & 0xffff;
+ *S_in_b_16_p = (L1 >> 16) & 0xffff;
+ *S_in_c_16_p = R1 & 0xffff;
+ (*(afs_uint32 *) & S_out) = (unsigned)S_adj[0][S_in_16_a.b0];
+ S_out.b1 = (unsigned)S_adj[1][S_in_16_a.b1];
/* b2 spans two words */
S_out.b2 = (unsigned)
- S_adj[2][(unsigned) S_in_16_a.b2
- + (((unsigned) S_in_16_b.b2) << 4)];
- S_out.b3 = (unsigned) S_adj[3][S_in_16_b.b3];
- S_out.b4 = (unsigned) S_adj[4][S_in_16_b.b4];
+ S_adj[2][(unsigned)S_in_16_a.b2 +
+ (((unsigned)S_in_16_b.b2) << 4)];
+ S_out.b3 = (unsigned)S_adj[3][S_in_16_b.b3];
+ S_out.b4 = (unsigned)S_adj[4][S_in_16_b.b4];
/* b5 spans both parts */
S_out.b5 = (unsigned)
- S_adj[5][(unsigned) S_in_16_b.b5
- + (((unsigned) S_in_16_c.b5) << 2)];
- S_out.b6 = (unsigned) S_adj[6][S_in_16_c.b6];
- S_out.b7 = (unsigned) S_adj[7][S_in_16_c.b7];
+ S_adj[5][(unsigned)S_in_16_b.b5 +
+ (((unsigned)S_in_16_c.b5) << 2)];
+ S_out.b6 = (unsigned)S_adj[6][S_in_16_c.b6];
+ S_out.b7 = (unsigned)S_adj[7][S_in_16_c.b7];
R1 = *S_out_p;
#else
/* is a 32 bit sys */
#ifndef VAXASM
- R2 = (unsigned) S_adj[0][L1 & 077];
- L2 = (unsigned) S_adj[1][(L1 >> 6) & 077];
- R2 |= (L2 <<4 );
- L2 = (unsigned) S_adj[2][(L1 >> 12) & 077];
- R2 |= (L2 <<8);
- L2 = (unsigned) S_adj[3][(L1 >> 18) & 077];
- R2 |= (L2 <<12);
- L2 = (unsigned) S_adj[4][(L1 >> 24) & 077];
- R2 |= (L2 <<16);
+ R2 = (unsigned)S_adj[0][L1 & 077];
+ L2 = (unsigned)S_adj[1][(L1 >> 6) & 077];
+ R2 |= (L2 << 4);
+ L2 = (unsigned)S_adj[2][(L1 >> 12) & 077];
+ R2 |= (L2 << 8);
+ L2 = (unsigned)S_adj[3][(L1 >> 18) & 077];
+ R2 |= (L2 << 12);
+ L2 = (unsigned)S_adj[4][(L1 >> 24) & 077];
+ R2 |= (L2 << 16);
/* b5 spans both parts */
L2 = (unsigned)
- S_adj[5][(unsigned) ((L1 >>30) & 03) + ((R1 & 017) << 2)];
+ S_adj[5][(unsigned)((L1 >> 30) & 03) + ((R1 & 017) << 2)];
R2 |= (L2 << 20);
- L2 = (unsigned) S_adj[6][(R1 >> 4) & 077];
- R2 |= (L2 <<24);
- L2 = (unsigned) S_adj[7][(R1 >> 10) & 077];
- R1 = R2 | (L2 <<28);
+ L2 = (unsigned)S_adj[6][(R1 >> 4) & 077];
+ R2 |= (L2 << 24);
+ L2 = (unsigned)S_adj[7][(R1 >> 10) & 077];
+ R1 = R2 | (L2 << 28);
/* reset input to L1, R1 */
#else /* vaxasm */
/*
dbg_tmp[0] = L1;
dbg_tmp[1] = R1;
DBG_PRINT("after s");
- printf("iter = %2d after s\n\t\tL1 R1 = ",i);
- des_cblock_print_file (dbg_tmp, stdout);
+ printf("iter = %2d after s\n\t\tL1 R1 = ", i);
+ des_cblock_print_file(dbg_tmp, stdout);
}
#endif
dbg_tmp[0] = L1;
dbg_tmp[1] = R1;
DBG_PRINT("after p");
- printf("iter = %2d after p\n\t\tL1 R1 = ",i);
- des_cblock_print_file (dbg_tmp, stdout);
+ printf("iter = %2d after p\n\t\tL1 R1 = ", i);
+ des_cblock_print_file(dbg_tmp, stdout);
}
#endif
dbg_tmp[0] = L1;
dbg_tmp[1] = R1;
DBG_PRINT("before FP");
- printf("iter = %2d before FP\n\t\tL1 R1 = ",i);
- des_cblock_print_file (dbg_tmp, stdout);
+ printf("iter = %2d before FP\n\t\tL1 R1 = ", i);
+ des_cblock_print_file(dbg_tmp, stdout);
}
-
#endif
/*FP_start:*/
#ifdef MUSTALIGN
if ((afs_int32) cipher & 3) {
- L_save = L2; /* cant bcopy a reg */
+ L_save = L2; /* cant bcopy a reg */
R_save = R2;
memcpy((char *)cipher++, (char *)&L_save, sizeof(L_save));
memcpy((char *)cipher, (char *)&R_save, sizeof(R_save));
- }
- else
+ } else
#endif
{
*cipher++ = L2;
dbg_tmp[0] = L1;
dbg_tmp[1] = R1;
DBG_PRINT("done");
- printf("iter = %2d done\n\t\tL1 R1 = ",i);
- des_cblock_print_file (dbg_tmp, stdout);
+ printf("iter = %2d done\n\t\tL1 R1 = ", i);
+ des_cblock_print_file(dbg_tmp, stdout);
}
#endif
/* that's it, no errors can be returned */
return 0;
}
-