X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=crypto%2Fmodes%2Fxts128.c;h=9cf27a25e9607b67cfcd5b696b5cdbf1e9aae77f;hb=3c075bf07f2d57c0272260409bf38fb6f438b016;hp=ebdc5ea649d7e8b9c9c3be33ebd85126be411d3d;hpb=84ed90f88b0542b85a9aa50723c7787cb3bb4bd5;p=oweals%2Fopenssl.git diff --git a/crypto/modes/xts128.c b/crypto/modes/xts128.c index ebdc5ea649..9cf27a25e9 100644 --- a/crypto/modes/xts128.c +++ b/crypto/modes/xts128.c @@ -89,8 +89,8 @@ int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16], scratch.u[1] ^= tweak.u[1]; memcpy(out,scratch.c,16); #else - ((u64*)out)[0] = scratch.u[0]^tweak.u[0]; - ((u64*)out)[1] = scratch.u[1]^tweak.u[1]; + ((u64*)out)[0] = scratch.u[0]^=tweak.u[0]; + ((u64*)out)[1] = scratch.u[1]^=tweak.u[1]; #endif inp += 16; out += 16; @@ -107,14 +107,15 @@ int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16], tweak.u[1] = (tweak.u[1]<<1)|carry; } else { - unsigned int carry,c; + size_t c; - for (carry=0,i=0;i<16;++i) { - c = tweak.c[i]; - tweak.c[i] = (c<<1)|carry; - carry = c>>7; + for (c=0,i=0;i<16;++i) { + /*+ substitutes for |, because c is 1 bit */ + c += ((size_t)tweak.c[i])<<1; + tweak.c[i] = (u8)c; + c = c>>8; } - tweak.c[0] ^= 0x87&(0-carry); + tweak.c[0] ^= (u8)(0x87&(0-c)); } } if (enc) { @@ -142,14 +143,15 @@ int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16], tweak1.u[1] = (tweak.u[1]<<1)|carry; } else { - unsigned int carry,c; + size_t c; - for (carry=0,i=0;i<16;++i) { - c = tweak.c[i]; - tweak1.c[i] = (c<<1)|carry; - carry = c>>7; + for (c=0,i=0;i<16;++i) { + /*+ substitutes for |, because c is 1 bit */ + c += ((size_t)tweak.c[i])<<1; + tweak1.c[i] = (u8)c; + c = c>>8; } - tweak1.c[0] ^= 0x87&(0-carry); + tweak1.c[0] ^= (u8)(0x87&(0-c)); } #if defined(STRICT_ALIGNMENT) memcpy(scratch.c,inp,16);