提交 f62df694 编写于 作者: A Andy Polyakov

ctr129.c: fix typo, simplify ctr128_inc and fix "n=0" bug.

上级 42feba47
...@@ -61,9 +61,6 @@ ...@@ -61,9 +61,6 @@
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__) || \
...@@ -77,18 +74,19 @@ typedef unsigned char u8; ...@@ -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, ...@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册