From 37c3a9dcf1a34cbe4241e3e056dc7e4c7d00bd9d Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 9 May 2014 12:05:04 -0400 Subject: [PATCH] ChiperBlock XOR --- aes.cpp | 6 ++---- aes.h | 5 +++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/aes.cpp b/aes.cpp index 2036ac35..48dc8fc2 100644 --- a/aes.cpp +++ b/aes.cpp @@ -165,8 +165,7 @@ namespace crypto { for (int i = 0; i < numBlocks; i++) { - m_LastBlock.ll[0] ^= in[i].ll[0]; - m_LastBlock.ll[1] ^= in[i].ll[1]; + m_LastBlock ^= in[i]; m_ECBEncryption.Encrypt (&m_LastBlock, &m_LastBlock); out[i] = m_LastBlock; } @@ -186,8 +185,7 @@ namespace crypto { ChipherBlock tmp = in[i]; m_ECBDecryption.Decrypt (in + i, out + i); - out[i].ll[0] ^= m_IV.ll[0]; - out[i].ll[1] ^= m_IV.ll[1]; + out[i] ^= m_IV; m_IV = tmp; } } diff --git a/aes.h b/aes.h index 89a3a62d..dac7d378 100644 --- a/aes.h +++ b/aes.h @@ -14,13 +14,14 @@ namespace crypto uint8_t buf[16]; uint64_t ll[2]; - void operator^(const ChipherBlock& other) // XOR + void operator^=(const ChipherBlock& other) // XOR { #ifdef __x86_64__ __asm__ ( "movups (%[b1]), %%xmm0 \n" - "pxor (%[b2]), %%xmm0 \n" + "movups (%[b2]), %%xmm1 \n" // b2 might not be 16-bytes aligned + "pxor %%xmm1, %%xmm0 \n" "movups %%xmm0, (%[b1]) \n" : : [b1]"r"(buf), [b2]"r"(other.buf): "memory", "%xmm0" );