ctr129.c: fix typo, simplify ctr128_inc and fix "n=0" bug [from HEAD].
This commit is contained in:
parent
cb3c30059a
commit
cb457849fd
@ -61,14 +61,11 @@
|
|||||||
typedef unsigned int u32;
|
typedef unsigned int u32;
|
||||||
typedef unsigned char u8;
|
typedef unsigned char u8;
|
||||||
|
|
||||||
# define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] << 8) ^ ((u32)(pt)[3]))
|
|
||||||
# define PUTU32(ct, st) { (ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); (ct)[2] = (u8)((st) >> 8); (ct)[3] = (u8)(st); }
|
|
||||||
|
|
||||||
#define STRICT_ALIGNMENT
|
#define STRICT_ALIGNMENT
|
||||||
#if defined(__i386) || defined(__i386__) || \
|
#if defined(__i386) || defined(__i386__) || \
|
||||||
defined(__x86_64) || defined(__x86_64__) || \
|
defined(__x86_64) || defined(__x86_64__) || \
|
||||||
defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \
|
defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \
|
||||||
defined(__s390__) || defined(__s390x__)
|
defined(__s390__) || defined(__s390x__)
|
||||||
# undef STRICT_ALIGNMENT
|
# undef STRICT_ALIGNMENT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -77,18 +74,19 @@ typedef unsigned char u8;
|
|||||||
|
|
||||||
/* increment counter (128-bit int) by 1 */
|
/* increment counter (128-bit int) by 1 */
|
||||||
static void ctr128_inc(unsigned char *counter) {
|
static void ctr128_inc(unsigned char *counter) {
|
||||||
u32 c,n=16;
|
u32 n=16;
|
||||||
|
u8 c;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
n -= 4;
|
--n;
|
||||||
c = GETU32(counter+n);
|
c = counter[n];
|
||||||
++c; c &= 0xFFFFFFFF;
|
++c;
|
||||||
PUTU32(counter + n, c);
|
counter[n] = c;
|
||||||
if (c) return;
|
if (c) return;
|
||||||
} while (n);
|
} while (n);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(OPENSSL_SMALL_FOORPRINT)
|
#if !defined(OPENSSL_SMALL_FOOTPRINT)
|
||||||
static void ctr128_inc_aligned(unsigned char *counter) {
|
static void ctr128_inc_aligned(unsigned char *counter) {
|
||||||
size_t *data,c,n;
|
size_t *data,c,n;
|
||||||
const union { long one; char little; } is_endian = {1};
|
const union { long one; char little; } is_endian = {1};
|
||||||
@ -151,14 +149,14 @@ void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out,
|
|||||||
while (len>=16) {
|
while (len>=16) {
|
||||||
(*block)(ivec, ecount_buf, key);
|
(*block)(ivec, ecount_buf, key);
|
||||||
ctr128_inc_aligned(ivec);
|
ctr128_inc_aligned(ivec);
|
||||||
for (n=0; n<16; n+=sizeof(size_t))
|
for (; n<16; n+=sizeof(size_t))
|
||||||
*(size_t *)(out+n) =
|
*(size_t *)(out+n) =
|
||||||
*(size_t *)(in+n) ^ *(size_t *)(ecount_buf+n);
|
*(size_t *)(in+n) ^ *(size_t *)(ecount_buf+n);
|
||||||
len -= 16;
|
len -= 16;
|
||||||
out += 16;
|
out += 16;
|
||||||
in += 16;
|
in += 16;
|
||||||
|
n = 0;
|
||||||
}
|
}
|
||||||
n = 0;
|
|
||||||
if (len) {
|
if (len) {
|
||||||
(*block)(ivec, ecount_buf, key);
|
(*block)(ivec, ecount_buf, key);
|
||||||
ctr128_inc_aligned(ivec);
|
ctr128_inc_aligned(ivec);
|
||||||
|
Loading…
Reference in New Issue
Block a user