|
@@ -169,11 +169,17 @@ public:
|
|
|
// Append length, multiplied by 8 (because bits!)
|
|
|
const uint_fast64_t bits = __crypto_be(count_ << 3);
|
|
|
if (sizeof(word_t) == 4) {
|
|
|
- memcpy(buffer_.words + bsize - 2, &bits, sizeof(bits));
|
|
|
+#if LITTLE_ENDIAN == BYTE_ORDER
|
|
|
+ buffer_.words[bsize - 2] = bits;
|
|
|
+ buffer_.words[bsize - 1] = bits >> 32;
|
|
|
+#else // LITTLE_ENDIAN != BYTE_ORDER
|
|
|
+ buffer_.words[bsize - 2] = bits >> 32;
|
|
|
+ buffer_.words[bsize - 1] = bits;
|
|
|
+#endif // LITTLE_ENDIAN != BYTE_ORDER
|
|
|
}
|
|
|
else {
|
|
|
buffer_.words[bsize - 2] = 0;
|
|
|
- buffer_.words[bsize - 1] = (word_t)bits;
|
|
|
+ buffer_.words[bsize - 1] = bits;
|
|
|
}
|
|
|
|
|
|
// Last transform:
|
|
@@ -340,8 +346,15 @@ public:
|
|
|
|
|
|
// Append length, multiplied by 8 (because bits!)
|
|
|
const uint_fast64_t bits = __crypto_le(count_ << 3);
|
|
|
- memcpy(buffer_.words + 14, &bits, sizeof(bits));
|
|
|
+#if LITTLE_ENDIAN == BYTE_ORDER
|
|
|
+ buffer_.words[14] = bits;
|
|
|
+ buffer_.words[15] = bits >> 32;
|
|
|
+#else // LITTLE_ENDIAN != BYTE_ORDER
|
|
|
+ buffer_.words[14] = bits >> 32;
|
|
|
+ buffer_.words[15] = bits;
|
|
|
+#endif // LITTLE_ENDIAN != BYTE_ORDER
|
|
|
transform(buffer_.words);
|
|
|
+
|
|
|
#if BIG_ENDIAN == BYTE_ORDER
|
|
|
state_.words[0] = __crypto_bswap(state_.words[0]);
|
|
|
state_.words[1] = __crypto_bswap(state_.words[1]);
|