Ian Goldberg 2 лет назад
Родитель
Сommit
dad77b99a7
1 измененных файлов с 11 добавлено и 3 удалено
  1. 11 3
      prg.hpp

+ 11 - 3
prg.hpp

@@ -15,14 +15,22 @@ static const struct PRGkey {
 // the left child, 1 for the right child
 static inline void prg(__m128i &out, __m128i seed, bool whichchild)
 {
-    AES_ECB_encrypt(out, set_lsb(seed, whichchild), prgkey.k);
+    __m128i in = set_lsb(seed, whichchild);
+    __m128i mid;
+    AES_ECB_encrypt(mid, set_lsb(seed, whichchild), prgkey.k);
+    out = _mm_xor_si128(mid, in);
 }
 
 // Compute both children of node seed
 static inline void prgboth(__m128i &left, __m128i &right, __m128i seed)
 {
-    AES_ECB_encrypt(left, set_lsb(seed, 0), prgkey.k);
-    AES_ECB_encrypt(right, set_lsb(seed, 1), prgkey.k);
+    __m128i in0 = set_lsb(seed, 0);
+    __m128i in1 = set_lsb(seed, 1);
+    __m128i mid0, mid1;
+    AES_ECB_encrypt(mid0, set_lsb(seed, 0), prgkey.k);
+    AES_ECB_encrypt(mid1, set_lsb(seed, 1), prgkey.k);
+    left = _mm_xor_si128(mid0, in0);
+    right = _mm_xor_si128(mid1, in1);
 }
 
 #endif