[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openssl-dev
Subject:    [openssl.org #2431] Member of Te4 in aes_core.c needs to be cast to u32 before being shifted
From:       " via RT" <rt () openssl ! org>
Date:       2011-01-13 18:01:16
Message-ID: rt-3.4.5-54659-1294941676-1977.2431-21-0 () openssl ! org
[Download RAW message or body]

In aes_core.c, Te4 is an array of u8. When its members are to be
shifted, those members need to be cast to u32 explicitly. This is
necessary especially in 8/16-bit embedded environments such as SDCC
(http://sdcc.sourceforge.net/). 

My patch: 

Index: aes_core.c
===================================================================
RCS file: /v/openssl/cvs/openssl/crypto/aes/aes_core.c,v
retrieving revision 1.10
diff -u -r1.10 aes_core.c
 --- aes_core.c	25 Jan 2007 20:47:00 -0000	1.10
+++ aes_core.c	13 Jan 2011 14:27:14 -0000
@@ -1229,10 +1229,10 @@
		while (1) {
			temp  = rk[3];
			rk[4] = rk[0] ^
 -				(Te4[(temp >> 16) & 0xff] << 24) ^
 -				(Te4[(temp >>  8) & 0xff] << 16) ^
 -				(Te4[(temp      ) & 0xff] << 8) ^
 -				(Te4[(temp >> 24)       ]) ^
+				((u32)Te4[(temp >> 16) & 0xff] << 24) ^
+				((u32)Te4[(temp >>  8) & 0xff] << 16) ^
+				((u32)Te4[(temp      ) & 0xff] << 8) ^
+				((u32)Te4[(temp >> 24)       ]) ^
				rcon[i];
			rk[5] = rk[1] ^ rk[4];
			rk[6] = rk[2] ^ rk[5];
@@ -1249,10 +1249,10 @@
		while (1) {
			temp = rk[ 5];
			rk[ 6] = rk[ 0] ^
 -				(Te4[(temp >> 16) & 0xff] << 24) ^
 -				(Te4[(temp >>  8) & 0xff] << 16) ^
 -				(Te4[(temp      ) & 0xff] << 8) ^
 -				(Te4[(temp >> 24)       ]) ^
+				((u32)Te4[(temp >> 16) & 0xff] << 24) ^
+				((u32)Te4[(temp >>  8) & 0xff] << 16) ^
+				((u32)Te4[(temp      ) & 0xff] << 8) ^
+				((u32)Te4[(temp >> 24)       ]) ^
				rcon[i];
			rk[ 7] = rk[ 1] ^ rk[ 6];
			rk[ 8] = rk[ 2] ^ rk[ 7];
@@ -1271,10 +1271,10 @@
		while (1) {
			temp = rk[ 7];
			rk[ 8] = rk[ 0] ^
 -				(Te4[(temp >> 16) & 0xff] << 24) ^
 -				(Te4[(temp >>  8) & 0xff] << 16) ^
 -				(Te4[(temp      ) & 0xff] << 8) ^
 -				(Te4[(temp >> 24)       ]) ^
+				((u32)Te4[(temp >> 16) & 0xff] << 24) ^
+				((u32)Te4[(temp >>  8) & 0xff] << 16) ^
+				((u32)Te4[(temp      ) & 0xff] << 8) ^
+				((u32)Te4[(temp >> 24)       ]) ^
				rcon[i];
			rk[ 9] = rk[ 1] ^ rk[ 8];
			rk[10] = rk[ 2] ^ rk[ 9];
@@ -1284,10 +1284,10 @@
			}
			temp = rk[11];
			rk[12] = rk[ 4] ^
 -				(Te4[(temp >> 24)       ] << 24) ^
 -				(Te4[(temp >> 16) & 0xff] << 16) ^
 -				(Te4[(temp >>  8) & 0xff] << 8) ^
 -				(Te4[(temp      ) & 0xff]);
+				((u32)Te4[(temp >> 24)       ] << 24) ^
+				((u32)Te4[(temp >> 16) & 0xff] << 16) ^
+				((u32)Te4[(temp >>  8) & 0xff] << 8) ^
+				((u32)Te4[(temp      ) & 0xff]);
			rk[13] = rk[ 5] ^ rk[12];
			rk[14] = rk[ 6] ^ rk[13];
			rk[15] = rk[ 7] ^ rk[14]; 


 ------------------------------------------------------------------------
                                                From Beijing, China

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       openssl-dev@openssl.org
Automated List Manager                           majordomo@openssl.org
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic