+/**
+ * Perform a bitwise xor between \a in and \a inout, and store
+ * the result into \a inout.
+ */
+INLINE void xor_block(void *out, const void *in1, const void *in2, size_t len)
+{
+ if (is_aligned(out, sizeof(uint32_t)) &&
+ is_aligned(in1, sizeof(uint32_t)) &&
+ is_aligned(in2, sizeof(uint32_t)))
+ {
+ uint32_t *obuf = (uint32_t *)((size_t)out);
+ const uint32_t *ibuf1 = (const uint32_t *)((size_t)in1);
+ const uint32_t *ibuf2 = (const uint32_t *)((size_t)in2);
+
+ xor_block_32(obuf, ibuf1, ibuf2, len);
+ }
+ else
+ {
+ uint8_t *obuf = (uint8_t *)((size_t)out);
+ const uint8_t *ibuf1 = (const uint8_t *)((size_t)in1);
+ const uint8_t *ibuf2 = (const uint8_t *)((size_t)in2);
+
+ xor_block_8(obuf, ibuf1, ibuf2, len);
+ }