From: Andy Polyakov Date: Sat, 5 Jan 2008 21:28:53 +0000 (+0000) Subject: engine/ccgost Win32 portability fixes. X-Git-Tag: OpenSSL_0_9_8k^2~580 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=085ea803714f148b160499d289616af4c16fa089;p=oweals%2Fopenssl.git engine/ccgost Win32 portability fixes. --- diff --git a/engines/ccgost/gost89.c b/engines/ccgost/gost89.c index 91a858a7bc..7ebae0f71f 100644 --- a/engines/ccgost/gost89.c +++ b/engines/ccgost/gost89.c @@ -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 */ diff --git a/engines/ccgost/gost_crypt.c b/engines/ccgost/gost_crypt.c index 277921f02d..d115d0bf3b 100644 --- a/engines/ccgost/gost_crypt.c +++ b/engines/ccgost/gost_crypt.c @@ -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; diff --git a/engines/ccgost/gost_keywrap.c b/engines/ccgost/gost_keywrap.c index 014499077f..c618f6da28 100644 --- a/engines/ccgost/gost_keywrap.c +++ b/engines/ccgost/gost_keywrap.c @@ -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); } diff --git a/engines/ccgost/gosthash.c b/engines/ccgost/gosthash.c index de55e0c3aa..6365c69998 100644 --- a/engines/ccgost/gosthash.c +++ b/engines/ccgost/gosthash.c @@ -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); diff --git a/engines/ccgost/gosthash.h b/engines/ccgost/gosthash.h index bd26aeb276..4a2e441ece 100644 --- a/engines/ccgost/gosthash.h +++ b/engines/ccgost/gosthash.h @@ -10,8 +10,17 @@ #define GOSTHASH_H #include "gost89.h" #include + +#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];