Commit 61f00386 authored by Richard Levitte's avatar Richard Levitte
Browse files

The counter is big-endian. Since it comes as an array of char,

there's absolutely no need to special-case it on little-endian
machines.

Notified by Thierry Boivin <Thierry.Boivin@celsecat.com>
parent 2ae0352b
Loading
Loading
Loading
Loading
+1 −26
Original line number Diff line number Diff line
@@ -59,7 +59,7 @@
#include <openssl/aes.h>
#include "aes_locl.h"

/* NOTE: CTR mode is big-endian.  The rest of the AES code
/* NOTE: the IV/counter CTR mode is big-endian.  The rest of the AES code
 * is endian-neutral. */

/* increment counter (128-bit int) by 1 */
@@ -67,61 +67,36 @@ static void AES_ctr128_inc(unsigned char *counter) {
	unsigned long c;

	/* Grab bottom dword of counter and increment */
#ifdef L_ENDIAN
	c = GETU32(counter +  0);
	c++;
	PUTU32(counter +  0, c);
#else
	c = GETU32(counter + 12);
	c++;
	PUTU32(counter + 12, c);
#endif

	/* if no overflow, we're done */
	if (c)
		return;

	/* Grab 1st dword of counter and increment */
#ifdef L_ENDIAN
	c = GETU32(counter +  4);
	c++;
	PUTU32(counter +  4, c);
#else
	c = GETU32(counter +  8);
	c++;
	PUTU32(counter +  8, c);
#endif

	/* if no overflow, we're done */
	if (c)
		return;

	/* Grab 2nd dword of counter and increment */
#ifdef L_ENDIAN
	c = GETU32(counter +  8);
	c++;
	PUTU32(counter +  8, c);
#else
	c = GETU32(counter +  4);
	c++;
	PUTU32(counter +  4, c);
#endif

	/* if no overflow, we're done */
	if (c)
		return;

	/* Grab top dword of counter and increment */
#ifdef L_ENDIAN
	c = GETU32(counter + 12);
	c++;
	PUTU32(counter + 12, c);
#else
	c = GETU32(counter +  0);
	c++;
	PUTU32(counter +  0, c);
#endif

}

/* The input encrypted as though 128bit counter mode is being