keccak-fast.c

Minimal SIMD keccak implementation
git clone git://git.finwo.net/lib/keccak-fast.c
Log | Files | Refs | README | LICENSE

keccak-fast-internal.h (2366B)


      1 #ifndef FINWO_KECCAK_FAST_INTERNAL_H
      2 #define FINWO_KECCAK_FAST_INTERNAL_H
      3 
      4 #include <stddef.h>
      5 #include <stdint.h>
      6 
      7 #include "keccak-fast.h"
      8 
      9 typedef void (*kf_batch_perm_fn)(uint64_t states[][25], size_t count);
     10 
     11 #define KF_LANES_MAX 8
     12 
     13 #define KF_PRIO_SCALAR  0
     14 #define KF_PRIO_BMI    10
     15 #define KF_PRIO_AVX2   20
     16 #define KF_PRIO_AVX512 30
     17 
     18 extern kf_batch_perm_fn kf_batch_perm;
     19 extern kf_batch_perm_fn kf_batch_perm12;
     20 extern int              kf_batch_priority;
     21 extern int              kf_batch_lanes;
     22 
     23 extern int         kf_backend_priority;
     24 extern const char *kf_backend_label;
     25 extern const char *kf_batch_label;
     26 
     27 int kf_scalar_shake128(uint8_t *out, size_t outlen, const uint8_t *in,
     28                        size_t inlen);
     29 int kf_scalar_shake256(uint8_t *out, size_t outlen, const uint8_t *in,
     30                        size_t inlen);
     31 int kf_scalar_sha3_224(uint8_t *out, size_t outlen, const uint8_t *in,
     32                        size_t inlen);
     33 int kf_scalar_sha3_256(uint8_t *out, size_t outlen, const uint8_t *in,
     34                        size_t inlen);
     35 int kf_scalar_sha3_384(uint8_t *out, size_t outlen, const uint8_t *in,
     36                        size_t inlen);
     37 int kf_scalar_sha3_512(uint8_t *out, size_t outlen, const uint8_t *in,
     38                        size_t inlen);
     39 int kf_scalar_turboshake128(uint8_t *out, size_t outlen, const uint8_t *in,
     40                             size_t inlen);
     41 int kf_scalar_turboshake256(uint8_t *out, size_t outlen, const uint8_t *in,
     42                             size_t inlen);
     43 void kf_scalar_permute(uint64_t state[25]);
     44 void kf_scalar_batch(uint64_t states[][25], size_t count);
     45 void kf_scalar_batch12(uint64_t states[][25], size_t count);
     46 
     47 #if (defined(__x86_64__) || defined(_M_X64) || defined(__i386__)) && \
     48   !defined(KECCAK_FAST_NO_BMI)
     49 void kf_bmi_batch(uint64_t states[][25], size_t count);
     50 void kf_bmi_batch12(uint64_t states[][25], size_t count);
     51 #endif
     52 #if (defined(__x86_64__) || defined(_M_X64) || defined(__i386__)) && \
     53   !defined(KECCAK_FAST_NO_AVX2)
     54 void kf_avx2_batch(uint64_t states[][25], size_t count);
     55 void kf_avx2_batch12(uint64_t states[][25], size_t count);
     56 #endif
     57 #if (defined(__x86_64__) || defined(_M_X64) || defined(__i386__)) && \
     58   !defined(KECCAK_FAST_NO_AVX512)
     59 void kf_avx512_batch(uint64_t states[][25], size_t count);
     60 void kf_avx512_batch12(uint64_t states[][25], size_t count);
     61 #endif
     62 
     63 #endif