#endif
#include <assert.h>
-int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char *iv,
+int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16],
const unsigned char *inp, unsigned char *out,
size_t len, int enc)
{
scratch.u[1] = ((u64*)inp)[1]^tweak.u[1];
#endif
(*ctx->block1)(scratch.c,scratch.c,ctx->key1);
+#if defined(STRICT_ALIGNMENT)
scratch.u[0] ^= tweak.u[0];
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];
+#endif
inp += 16;
out += 16;
len -= 16;
unsigned int carry,res;
res = 0x87&(((int)tweak.d[3])>>31);
- carry = tweak.u[0]>>63;
+ carry = (unsigned int)(tweak.u[0]>>63);
tweak.u[0] = (tweak.u[0]<<1)^res;
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) {
unsigned int carry,res;
res = 0x87&(((int)tweak.d[3])>>31);
- carry = tweak.u[0]>>63;
+ carry = (unsigned int)(tweak.u[0]>>63);
tweak1.u[0] = (tweak.u[0]<<1)^res;
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);
scratch.u[0] ^= tweak.u[0];
scratch.u[1] ^= tweak.u[1];
(*ctx->block1)(scratch.c,scratch.c,ctx->key1);
+#if defined(STRICT_ALIGNMENT)
scratch.u[0] ^= tweak.u[0];
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];
+#endif
}
return 0;