[PATCH 04/10] crypto/des_generic: Simplify pc1-using code.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I think a modern compiler can do without the step-by-step
instructions and schedule it pretty well by itself.
---
 crypto/des_generic.c |   32 ++++++++++++++++----------------
 1 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/crypto/des_generic.c b/crypto/des_generic.c
index 6434a39..24d7f93 100644
--- a/crypto/des_generic.c
+++ b/crypto/des_generic.c
@@ -594,10 +594,10 @@ unsigned long des_ekey(u32 *pe, const u8 *k)
 	unsigned long a, b, c, d, w;
 	const u32 *pt = pc2;
 
-	d = k[4]; d &= 0x0e; d <<= 4; d |= k[0] & 0x1e; d = pc1[d];
-	c = k[5]; c &= 0x0e; c <<= 4; c |= k[1] & 0x1e; c = pc1[c];
-	b = k[6]; b &= 0x0e; b <<= 4; b |= k[2] & 0x1e; b = pc1[b];
-	a = k[7]; a &= 0x0e; a <<= 4; a |= k[3] & 0x1e; a = pc1[a];
+	d = pc1[ ((k[4] & 0x0e) << 4) + (k[0] & 0x1e) ];
+	c = pc1[ ((k[5] & 0x0e) << 4) + (k[1] & 0x1e) ];
+	b = pc1[ ((k[6] & 0x0e) << 4) + (k[2] & 0x1e) ];
+	a = pc1[ ((k[7] & 0x0e) << 4) + (k[3] & 0x1e) ];
 
 	pe[15 * 2 + 0] = PC2(pt, a, b, c, d); d = rs[d];
 	pe[14 * 2 + 0] = PC2(pt, d, a, b, c); c = rs[c]; b = rs[b];
@@ -622,10 +622,10 @@ unsigned long des_ekey(u32 *pe, const u8 *k)
 	/* Skip to next table set */
 	pt += 512;
 
-	d = k[0]; d &= 0xe0; d >>= 4; d |= k[4] & 0xf0; d = pc1[d + 1];
-	c = k[1]; c &= 0xe0; c >>= 4; c |= k[5] & 0xf0; c = pc1[c + 1];
-	b = k[2]; b &= 0xe0; b >>= 4; b |= k[6] & 0xf0; b = pc1[b + 1];
-	a = k[3]; a &= 0xe0; a >>= 4; a |= k[7] & 0xf0; a = pc1[a + 1];
+	d = pc1[ ((k[0] & 0xe0) >> 4) + (k[4] & 0xf0) + 1 ];
+	c = pc1[ ((k[1] & 0xe0) >> 4) + (k[5] & 0xf0) + 1 ];
+	b = pc1[ ((k[2] & 0xe0) >> 4) + (k[6] & 0xf0) + 1 ];
+	a = pc1[ ((k[3] & 0xe0) >> 4) + (k[7] & 0xf0) + 1 ];
 
 	/* Check if second half is weak */
 	w |= (a ^ c) | (b ^ d) | (rs[a] ^ c) | (b ^ rs[d]);
@@ -674,10 +674,10 @@ static void dkey(u32 *pe, const u8 *k)
 	unsigned long a, b, c, d;
 	const u32 *pt = pc2;
 
-	d = k[4]; d &= 0x0e; d <<= 4; d |= k[0] & 0x1e; d = pc1[d];
-	c = k[5]; c &= 0x0e; c <<= 4; c |= k[1] & 0x1e; c = pc1[c];
-	b = k[6]; b &= 0x0e; b <<= 4; b |= k[2] & 0x1e; b = pc1[b];
-	a = k[7]; a &= 0x0e; a <<= 4; a |= k[3] & 0x1e; a = pc1[a];
+	d = pc1[ ((k[4] & 0x0e) << 4) + (k[0] & 0x1e) ];
+	c = pc1[ ((k[5] & 0x0e) << 4) + (k[1] & 0x1e) ];
+	b = pc1[ ((k[6] & 0x0e) << 4) + (k[2] & 0x1e) ];
+	a = pc1[ ((k[7] & 0x0e) << 4) + (k[3] & 0x1e) ];
 
 	pe[ 0 * 2] = PC2(pt, a, b, c, d); d = rs[d];
 	pe[ 1 * 2] = PC2(pt, d, a, b, c); c = rs[c]; b = rs[b];
@@ -699,10 +699,10 @@ static void dkey(u32 *pe, const u8 *k)
 	/* Skip to next table set */
 	pt += 512;
 
-	d = k[0]; d &= 0xe0; d >>= 4; d |= k[4] & 0xf0; d = pc1[d + 1];
-	c = k[1]; c &= 0xe0; c >>= 4; c |= k[5] & 0xf0; c = pc1[c + 1];
-	b = k[2]; b &= 0xe0; b >>= 4; b |= k[6] & 0xf0; b = pc1[b + 1];
-	a = k[3]; a &= 0xe0; a >>= 4; a |= k[7] & 0xf0; a = pc1[a + 1];
+	d = pc1[ ((k[0] & 0xe0) >> 4) + (k[4] & 0xf0) + 1 ];
+	c = pc1[ ((k[1] & 0xe0) >> 4) + (k[5] & 0xf0) + 1 ];
+	b = pc1[ ((k[2] & 0xe0) >> 4) + (k[6] & 0xf0) + 1 ];
+	a = pc1[ ((k[3] & 0xe0) >> 4) + (k[7] & 0xf0) + 1 ];
 
 	pe[ 0 * 2 + 1] = PC2(pt, a, b, c, d); d = rs[d];
 	pe[ 1 * 2 + 1] = PC2(pt, d, a, b, c); c = rs[c]; b = rs[b];
-- 
1.6.0.6

--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel]     [Gnu Classpath]     [Gnu Crypto]     [DM Crypt]     [Netfilter]     [Bugtraq]

  Powered by Linux