engine/ccgost Win32 portability fixes.
authorAndy Polyakov <appro@openssl.org>
Sat, 5 Jan 2008 21:28:53 +0000 (21:28 +0000)
committerAndy Polyakov <appro@openssl.org>
Sat, 5 Jan 2008 21:28:53 +0000 (21:28 +0000)
engines/ccgost/gost89.c
engines/ccgost/gost_crypt.c
engines/ccgost/gost_keywrap.c
engines/ccgost/gosthash.c
engines/ccgost/gosthash.h

index 91a858a7bc7c424b5f766bcfaf63bc19f9248369..7ebae0f71f82a009b53842e785a9da1efe188c35 100644 (file)
@@ -164,8 +164,10 @@ void gostcrypt(gost_ctx *c, const byte *in, byte *out)
        n2 ^= f(c,n1+c->k[3]); n1 ^= f(c,n2+c->k[2]);
        n2 ^= f(c,n1+c->k[1]); n1 ^= f(c,n2+c->k[0]);
  
-       out[0] = (n2&0xff);  out[1] = (n2>>8)&0xff; out[2]=(n2>>16)&0xff; out[3]=n2>>24; 
-       out[4] = (n1&0xff);  out[5] = (n1>>8)&0xff; out[6]=(n1>>16)&0xff; out[7]=n1>>24;
+       out[0] = (byte)(n2&0xff);  out[1] = (byte)((n2>>8)&0xff);
+       out[2] = (byte)((n2>>16)&0xff); out[3]=(byte)(n2>>24); 
+       out[4] = (byte)(n1&0xff);  out[5] = (byte)((n1>>8)&0xff);
+       out[6] = (byte)((n1>>16)&0xff); out[7] = (byte)(n1>>24);
        } 
 /* Low-level decryption routine. Decrypts one 64-bit block */
 void gostdecrypt(gost_ctx *c, const byte *in,byte *out)
@@ -193,8 +195,11 @@ void gostdecrypt(gost_ctx *c, const byte *in,byte *out)
        n2 ^= f(c,n1+c->k[5]); n1 ^= f(c,n2+c->k[4]);
        n2 ^= f(c,n1+c->k[3]); n1 ^= f(c,n2+c->k[2]);
        n2 ^= f(c,n1+c->k[1]); n1 ^= f(c,n2+c->k[0]);
-       out[0] = (n2&0xff);  out[1] = (n2>>8)&0xff; out[2]=(n2>>16)&0xff; out[3]=n2>>24;
-       out[4] = (n1&0xff);  out[5] = (n1>>8)&0xff; out[6]=(n1>>16)&0xff; out[7]=n1>>24;
+
+       out[0] = (byte)(n2&0xff);  out[1] = (byte)((n2>>8)&0xff);
+       out[2] = (byte)((n2>>16)&0xff); out[3]=(byte)(n2>>24);
+       out[4] = (byte)(n1&0xff);  out[5] = (byte)((n1>>8)&0xff);
+       out[6] = (byte)((n1>>16)&0xff); out[7] = (byte)(n1>>24);
        } 
 
 /* Encrypts several blocks in ECB mode */
@@ -280,10 +285,10 @@ void gost_get_key(gost_ctx *c, byte *k)
        int i,j; 
        for(i=0,j=0;i<8;i++,j+=4)
                {
-               k[j]=c->k[i]& 0xFF;
-               k[j+1]=(c->k[i]>>8 )&0xFF;
-               k[j+2]=(c->k[i]>>16) &0xFF;
-               k[j+3]=(c->k[i]>>24) &0xFF;
+               k[j]=(byte)(c->k[i]& 0xFF);
+               k[j+1]=(byte)((c->k[i]>>8 )&0xFF);
+               k[j+2]=(byte)((c->k[i]>>16) &0xFF);
+               k[j+3]=(byte)((c->k[i]>>24) &0xFF);
                }               
        }
 
@@ -332,8 +337,10 @@ void mac_block(gost_ctx *c,byte *buffer,const  byte *block)
        n2 ^= f(c,n1+c->k[4]); n1 ^= f(c,n2+c->k[5]);
        n2 ^= f(c,n1+c->k[6]); n1 ^= f(c,n2+c->k[7]);
 
-       buffer[0] = (n1&0xff);  buffer[1] = (n1>>8)&0xff; buffer[2]=(n1>>16)&0xff; buffer[3]=n1>>24;
-       buffer[4] = (n2&0xff);  buffer[5] = (n2>>8)&0xff; buffer[6]=(n2>>16)&0xff; buffer[7]=n2>>24;
+       buffer[0] = (byte)(n1&0xff);  buffer[1] = (byte)((n1>>8)&0xff);
+       buffer[2] = (byte)((n1>>16)&0xff); buffer[3] = (byte)(n1>>24);
+       buffer[4] = (byte)(n2&0xff);  buffer[5] = (byte)((n2>>8)&0xff);
+       buffer[6] = (byte)((n2>>16)&0xff); buffer[7] = (byte)(n2>>24);
        }
 
 /* Get mac with specified number of bits from MAC state buffer */
index 277921f02d22df437127adccb14258532a09f0a3..d115d0bf3b8924a5b55e5923c8911bb7c0f401e8 100644 (file)
@@ -233,13 +233,19 @@ static void gost_cnt_next (void *ctx, unsigned char *iv, unsigned char *buf)
                }       
        g = buf1[0]|(buf1[1]<<8)|(buf1[2]<<16)|(buf1[3]<<24);
        g += 0x01010101;
-       buf1[0]=g&0xff; buf1[1]=(g>>8)&0xff; buf1[2]=(g>>16)&0xff; buf1[3]=(g>>24)&0xff;
+       buf1[0]=(unsigned char)(g&0xff);
+       buf1[1]=(unsigned char)((g>>8)&0xff);
+       buf1[2]=(unsigned char)((g>>16)&0xff);
+       buf1[3]=(unsigned char)((g>>24)&0xff);
        g = buf1[4]|(buf1[5]<<8)|(buf1[6]<<16)|(buf1[7]<<24);
        go = g;
        g += 0x01010104;
        if (go > g)      /*  overflow*/
                g++;
-       buf1[4]=g&0xff; buf1[5]=(g>>8)&0xff; buf1[6]=(g>>16)&0xff; buf1[7]=(g>>24)&0xff;
+       buf1[4]=(unsigned char)(g&0xff);
+       buf1[5]=(unsigned char)((g>>8)&0xff);
+       buf1[6]=(unsigned char)((g>>16)&0xff);
+       buf1[7]=(unsigned char)((g>>24)&0xff);
        memcpy(iv,buf1,8);
        gostcrypt(&(c->cctx),buf1,buf);
        c->count +=8;
index 014499077f4b0cf2df132c981b83d8e1dc35862c..c618f6da2832fe3299c77544c959fdff8f0efe6e 100644 (file)
@@ -44,8 +44,14 @@ void keyDiversifyCryptoPro(gost_ctx *ctx,const unsigned char *inputKey, const un
                                s2+=k;
                                }
                        }
-               S[0]=s1&0xff; S[1]=(s1>>8)&0xff; S[2]=(s1>>16)&0xff; S[3]=(s1>>24)&0xff; 
-               S[4]=s2&0xff; S[5]=(s2>>8)&0xff; S[6]=(s2>>16)&0xff; S[7]=(s2>>24)&0xff; 
+               S[0]=(unsigned char)(s1&0xff);
+               S[1]=(unsigned char)((s1>>8)&0xff);
+               S[2]=(unsigned char)((s1>>16)&0xff);
+               S[3]=(unsigned char)((s1>>24)&0xff); 
+               S[4]=(unsigned char)(s2&0xff);
+               S[5]=(unsigned char)((s2>>8)&0xff);
+               S[6]=(unsigned char)((s2>>16)&0xff);
+               S[7]=(unsigned char)((s2>>24)&0xff); 
                gost_key(ctx,outputKey);
                gost_enc_cfb(ctx,S,outputKey,outputKey,4);
                }
index de55e0c3aa9dcf55fc3d7ff3a52bf1a5efe42b16..6365c699982a4eac5dcf9c4f2cdfaf561190ed05 100644 (file)
@@ -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);
index bd26aeb276e4aabf7061df2916c57a375f7f90a2..4a2e441ece2741131288b790db80581cd26d8687 100644 (file)
 #define GOSTHASH_H
 #include "gost89.h"
 #include <stdlib.h>
+
+#if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__)
+typedef __int64 ghosthash_len;
+#elif defined(__arch64__)
+typedef long ghosthash_len;
+#else
+typedef long long ghosthash_len;
+#endif
+
 typedef struct gost_hash_ctx {
-               long long len;
+               ghosthash_len len;
                gost_ctx *cipher_ctx;
                int left;
                byte H[32];