Home | History | Annotate | Line # | Download | only in ref
      1 
      2 #define BLAKE2_USE_SSSE3
      3 #define BLAKE2_USE_SSE41
      4 #define BLAKE2_USE_AVX2
      5 
      6 #include <stdint.h>
      7 #include <string.h>
      8 
      9 #include "blake2.h"
     10 #include "private/common.h"
     11 #include "private/sse2_64_32.h"
     12 
     13 #if defined(HAVE_AVX2INTRIN_H) && defined(HAVE_EMMINTRIN_H) && \
     14     defined(HAVE_TMMINTRIN_H) && defined(HAVE_SMMINTRIN_H)
     15 
     16 # ifdef __GNUC__
     17 #  pragma GCC target("sse2")
     18 #  pragma GCC target("ssse3")
     19 #  pragma GCC target("sse4.1")
     20 #  pragma GCC target("avx2")
     21 # endif
     22 
     23 # include <emmintrin.h>
     24 # include <immintrin.h>
     25 # include <smmintrin.h>
     26 # include <tmmintrin.h>
     27 
     28 # include "blake2b-compress-avx2.h"
     29 
     30 CRYPTO_ALIGN(64)
     31 static const uint64_t blake2b_IV[8] = {
     32     0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, 0x3c6ef372fe94f82bULL,
     33     0xa54ff53a5f1d36f1ULL, 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL,
     34     0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL
     35 };
     36 
     37 int
     38 blake2b_compress_avx2(blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES])
     39 {
     40     __m256i a = LOADU(&S->h[0]);
     41     __m256i b = LOADU(&S->h[4]);
     42     BLAKE2B_COMPRESS_V1(a, b, block, S->t[0], S->t[1], S->f[0], S->f[1]);
     43     STOREU(&S->h[0], a);
     44     STOREU(&S->h[4], b);
     45 
     46     return 0;
     47 }
     48 
     49 #endif
     50