From: Kurt Roeckx Date: Fri, 11 Mar 2016 00:06:51 +0000 (+0100) Subject: Save leaf_node and node_offset as character array X-Git-Tag: OpenSSL_1_1_0-pre4~58 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=a57410899af60eff20dfe932283775edc2603c2a;p=oweals%2Fopenssl.git Save leaf_node and node_offset as character array They are not numbers in the machine byte order. Reviewed-by: Andy Polyakov Reviewed-by: Rich Salz --- diff --git a/crypto/blake2/blake2_impl.h b/crypto/blake2/blake2_impl.h index bd02de9ad2..694f9bb434 100644 --- a/crypto/blake2/blake2_impl.h +++ b/crypto/blake2/blake2_impl.h @@ -18,7 +18,7 @@ #include #include "e_os.h" -static ossl_inline uint32_t load32(const void *src) +static ossl_inline uint32_t load32(const uint8_t *src) { const union { long one; @@ -30,16 +30,15 @@ static ossl_inline uint32_t load32(const void *src) memcpy(&w, src, sizeof(w)); return w; } else { - const uint8_t *p = (const uint8_t *)src; - uint32_t w = *p++; - w |= (uint32_t)(*p++) << 8; - w |= (uint32_t)(*p++) << 16; - w |= (uint32_t)(*p++) << 24; + uint32_t w = *src++; + w |= (uint32_t)(*src++) << 8; + w |= (uint32_t)(*src++) << 16; + w |= (uint32_t)(*src++) << 24; return w; } } -static ossl_inline uint64_t load64(const void *src) +static ossl_inline uint64_t load64(const uint8_t *src) { const union { long one; @@ -51,20 +50,19 @@ static ossl_inline uint64_t load64(const void *src) memcpy(&w, src, sizeof(w)); return w; } else { - const uint8_t *p = (const uint8_t *)src; - uint64_t w = *p++; - w |= (uint64_t)(*p++) << 8; - w |= (uint64_t)(*p++) << 16; - w |= (uint64_t)(*p++) << 24; - w |= (uint64_t)(*p++) << 32; - w |= (uint64_t)(*p++) << 40; - w |= (uint64_t)(*p++) << 48; - w |= (uint64_t)(*p++) << 56; + uint64_t w = *src++; + w |= (uint64_t)(*src++) << 8; + w |= (uint64_t)(*src++) << 16; + w |= (uint64_t)(*src++) << 24; + w |= (uint64_t)(*src++) << 32; + w |= (uint64_t)(*src++) << 40; + w |= (uint64_t)(*src++) << 48; + w |= (uint64_t)(*src++) << 56; return w; } } -static ossl_inline void store32(void *dst, uint32_t w) +static ossl_inline void store32(uint8_t *dst, uint32_t w) { const union { long one; @@ -82,7 +80,7 @@ static ossl_inline void store32(void *dst, uint32_t w) } } -static ossl_inline void store64(void *dst, uint64_t w) +static ossl_inline void store64(uint8_t *dst, uint64_t w) { const union { long one; @@ -100,19 +98,18 @@ static ossl_inline void store64(void *dst, uint64_t w) } } -static ossl_inline uint64_t load48(const void *src) +static ossl_inline uint64_t load48(const uint8_t *src) { - const uint8_t *p = (const uint8_t *)src; - uint64_t w = *p++; - w |= (uint64_t)(*p++) << 8; - w |= (uint64_t)(*p++) << 16; - w |= (uint64_t)(*p++) << 24; - w |= (uint64_t)(*p++) << 32; - w |= (uint64_t)(*p++) << 40; + uint64_t w = *src++; + w |= (uint64_t)(*src++) << 8; + w |= (uint64_t)(*src++) << 16; + w |= (uint64_t)(*src++) << 24; + w |= (uint64_t)(*src++) << 32; + w |= (uint64_t)(*src++) << 40; return w; } -static ossl_inline void store48(void *dst, uint64_t w) +static ossl_inline void store48(uint8_t *dst, uint64_t w) { uint8_t *p = (uint8_t *)dst; *p++ = (uint8_t)w; diff --git a/crypto/blake2/blake2b.c b/crypto/blake2/blake2b.c index d187e6bd21..621949013a 100644 --- a/crypto/blake2/blake2b.c +++ b/crypto/blake2/blake2b.c @@ -95,8 +95,8 @@ int BLAKE2b_Init(BLAKE2B_CTX *c) P->key_length = 0; P->fanout = 1; P->depth = 1; - store32(&P->leaf_length, 0); - store64(&P->node_offset, 0); + store32(P->leaf_length, 0); + store64(P->node_offset, 0); P->node_depth = 0; P->inner_length = 0; memset(P->reserved, 0, sizeof(P->reserved)); diff --git a/crypto/blake2/blake2s.c b/crypto/blake2/blake2s.c index eee615d944..75be06a79e 100644 --- a/crypto/blake2/blake2s.c +++ b/crypto/blake2/blake2s.c @@ -70,7 +70,7 @@ static ossl_inline void blake2s_init0(BLAKE2S_CTX *S) /* init2 xors IV with input parameter block */ static void blake2s_init_param(BLAKE2S_CTX *S, const BLAKE2S_PARAM *P) { - const uint32_t *p = (const uint32_t *)(P); + const uint8_t *p = (const uint8_t *)(P); size_t i; /* The param struct is carefully hand packed, and should be 32 bytes on @@ -79,7 +79,7 @@ static void blake2s_init_param(BLAKE2S_CTX *S, const BLAKE2S_PARAM *P) blake2s_init0(S); /* IV XOR ParamBlock */ for(i = 0; i < 8; ++i) { - S->h[i] ^= load32(&p[i]); + S->h[i] ^= load32(&p[i*4]); } } @@ -92,8 +92,8 @@ int BLAKE2s_Init(BLAKE2S_CTX *c) P->key_length = 0; P->fanout = 1; P->depth = 1; - store32(&P->leaf_length, 0); - store48(&P->node_offset, 0); + store32(P->leaf_length, 0); + store48(P->node_offset, 0); P->node_depth = 0; P->inner_length = 0; memset(P->salt, 0, sizeof(P->salt)); diff --git a/crypto/include/internal/blake2_locl.h b/crypto/include/internal/blake2_locl.h index 390065a8b2..ba438f4e3e 100644 --- a/crypto/include/internal/blake2_locl.h +++ b/crypto/include/internal/blake2_locl.h @@ -39,7 +39,7 @@ struct blake2s_param_st { uint8_t key_length; /* 2 */ uint8_t fanout; /* 3 */ uint8_t depth; /* 4 */ - uint32_t leaf_length; /* 8 */ + uint8_t leaf_length[4];/* 8 */ uint8_t node_offset[6];/* 14 */ uint8_t node_depth; /* 15 */ uint8_t inner_length; /* 16 */ @@ -62,8 +62,8 @@ struct blake2b_param_st { uint8_t key_length; /* 2 */ uint8_t fanout; /* 3 */ uint8_t depth; /* 4 */ - uint32_t leaf_length; /* 8 */ - uint64_t node_offset; /* 16 */ + uint8_t leaf_length[4];/* 8 */ + uint8_t node_offset[8];/* 16 */ uint8_t node_depth; /* 17 */ uint8_t inner_length; /* 18 */ uint8_t reserved[14]; /* 32 */