Commit a5741089 authored by Kurt Roeckx's avatar Kurt Roeckx Committed by Rich Salz
Browse files

Save leaf_node and node_offset as character array



They are not numbers in the machine byte order.

Reviewed-by: default avatarAndy Polyakov <appro@openssl.org>
Reviewed-by: default avatarRich Salz <rsalz@openssl.org>
parent 208527a7
Loading
Loading
Loading
Loading
+24 −27
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@
#include <string.h>
#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;
+2 −2
Original line number Diff line number Diff line
@@ -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));
+4 −4
Original line number Diff line number Diff line
@@ -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));
+3 −3
Original line number Diff line number Diff line
@@ -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 */