gosthash.c: use memmove in circle_xor8, as input pointers can be equal
[openssl.git] / engines / ccgost / gosthash.c
index 1acd16317bf384966f6dcaaf9163587bbe77edd8..8c278aa6452e1e80555f79d442eff45d1e7be22c 100644 (file)
@@ -42,7 +42,7 @@ static void circle_xor8 (const byte *w, byte *k)
        byte buf[8];
        int i;
        memcpy(buf,w,8);
-       memcpy(k,w+8,24);
+       memmove(k,w+8,24);
        for(i=0;i<8;i++) 
                k[i+24]=buf[i]^k[i];
        }
@@ -86,7 +86,7 @@ static void xor_blocks (byte *result,const byte *a,const byte *b,size_t len)
  */
 static int hash_step(gost_ctx *c,byte *H,const byte *M) 
        {
-       static byte U[32],W[32],V[32],S[32],Key[32];
+       byte U[32],W[32],V[32],S[32],Key[32];
        int i;
        /* Compute first key */
        xor_blocks(W,H,M,32);
@@ -185,7 +185,7 @@ int hash_block(gost_hash_ctx *ctx,const byte *block, size_t length)
        if (ctx->left)
                {
                /*There are some bytes from previous step*/
-               int add_bytes = 32-ctx->left;
+               unsigned int add_bytes = 32-ctx->left;
                if (add_bytes>length)
                        {
                        add_bytes = length;
@@ -228,7 +228,7 @@ int finish_hash(gost_hash_ctx *ctx,byte *hashval)
        byte buf[32];
        byte H[32];
        byte S[32];
-       long long fin_len=ctx->len;
+       ghosthash_len fin_len=ctx->len;
        byte *bptr;
        memcpy(H,ctx->H,32);
        memcpy(S,ctx->S,32);
@@ -245,7 +245,7 @@ int finish_hash(gost_hash_ctx *ctx,byte *hashval)
        fin_len<<=3; /* Hash length in BITS!!*/
        while(fin_len>0)
                {
-               *(bptr++)=fin_len&0xFF;
+               *(bptr++)=(byte)(fin_len&0xFF);
                fin_len>>=8;
                };
        hash_step(ctx->cipher_ctx,H,buf);
@@ -253,4 +253,3 @@ int finish_hash(gost_hash_ctx *ctx,byte *hashval)
        memcpy(hashval,H,32);
        return 1;
        }
-