Implemented virtual memory free

Removed legacy AES code
This commit is contained in:
tevador
2019-03-08 11:46:03 +01:00
parent 6e8c83fdb6
commit 096a7c0d7b
9 changed files with 44 additions and 134 deletions
-57
View File
@@ -17,11 +17,8 @@ You should have received a copy of the GNU General Public License
along with RandomX. If not, see<http://www.gnu.org/licenses/>.
*/
// Parts of this file are originally copyright (c) xmr-stak
#include <cstring>
#include "Cache.hpp"
#include "softAes.h"
#include "argon2.h"
#include "argon2_core.h"
@@ -29,52 +26,6 @@ namespace RandomX {
static_assert(ArgonMemorySize % (ArgonLanes * ARGON2_SYNC_POINTS) == 0, "ArgonMemorySize - invalid value");
// This will shift and xor tmp1 into itself as 4 32-bit vals such as
// sl_xor(a1 a2 a3 a4) = a1 (a2^a1) (a3^a2^a1) (a4^a3^a2^a1)
static inline __m128i sl_xor(__m128i tmp1) {
__m128i tmp4;
tmp4 = _mm_slli_si128(tmp1, 0x04);
tmp1 = _mm_xor_si128(tmp1, tmp4);
tmp4 = _mm_slli_si128(tmp4, 0x04);
tmp1 = _mm_xor_si128(tmp1, tmp4);
tmp4 = _mm_slli_si128(tmp4, 0x04);
tmp1 = _mm_xor_si128(tmp1, tmp4);
return tmp1;
}
template<uint8_t rcon, bool soft>
static inline void aesGenKeys(__m128i* xout0, __m128i* xout2) {
__m128i xout1 = soft ? soft_aeskeygenassist(*xout2, rcon) : _mm_aeskeygenassist_si128(*xout2, rcon);
xout1 = _mm_shuffle_epi32(xout1, 0xFF);
*xout0 = sl_xor(*xout0);
*xout0 = _mm_xor_si128(*xout0, xout1);
xout1 = soft ? soft_aeskeygenassist(*xout0, 0x00) : _mm_aeskeygenassist_si128(*xout0, 0x00);
xout1 = _mm_shuffle_epi32(xout1, 0xAA);
*xout2 = sl_xor(*xout2);
*xout2 = _mm_xor_si128(*xout2, xout1);
}
template<bool soft>
static inline void expandAesKeys(const __m128i* seed, __m128i* keys) {
__m128i xout0, xout2;
xout0 = _mm_load_si128(seed);
xout2 = _mm_load_si128(seed + 1);
*keys++ = xout0;
*keys++ = xout2;
aesGenKeys<0x01, soft>(&xout0, &xout2);
*keys++ = xout0;
*keys++ = xout2;
aesGenKeys<0x02, soft>(&xout0, &xout2);
*keys++ = xout0;
*keys++ = xout2;
aesGenKeys<0x04, soft>(&xout0, &xout2);
*keys++ = xout0;
*keys++ = xout2;
aesGenKeys<0x08, soft>(&xout0, &xout2);
*keys++ = xout0;
*keys++ = xout2;
}
void Cache::argonFill(const void* seed, size_t seedSize) {
uint32_t memory_blocks, segment_length;
argon2_instance_t instance;
@@ -128,16 +79,8 @@ namespace RandomX {
fill_memory_blocks(&instance);
}
template<bool softAes>
void Cache::initialize(const void* seed, size_t seedSize) {
//Argon2d memory fill
argonFill(seed, seedSize);
//AES keys
expandAesKeys<softAes>((__m128i*)seed, keys.data());
}
template void Cache::initialize<true>(const void*, size_t);
template void Cache::initialize<false>(const void*, size_t);
}