Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 

75 рядки
3.3 KiB

  1. #include <stdint.h>
  2. #include <string.h>
  3. #include "address.h"
  4. #include "hash_state.h"
  5. #include "params.h"
  6. #include "thash.h"
  7. #include "fips202.h"
  8. /**
  9. * Takes an array of inblocks concatenated arrays of PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_N bytes.
  10. */
  11. static void PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_thash(
  12. unsigned char *out, unsigned char *buf,
  13. const unsigned char *in, unsigned int inblocks,
  14. const unsigned char *pub_seed, uint32_t addr[8]) {
  15. memcpy(buf, pub_seed, PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_N);
  16. PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_addr_to_bytes(buf + PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_N, addr);
  17. memcpy(buf + PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_N + PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_ADDR_BYTES, in, inblocks * PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_N);
  18. shake256(out, PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_N, buf, PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_N + PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_ADDR_BYTES + inblocks * PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_N);
  19. }
  20. /* The wrappers below ensure that we use fixed-size buffers on the stack */
  21. void PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_thash_1(
  22. unsigned char *out, const unsigned char *in,
  23. const unsigned char *pub_seed, uint32_t addr[8],
  24. const hash_state *hash_state_seeded) {
  25. unsigned char buf[PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_N + PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_ADDR_BYTES + 1 * PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_N];
  26. PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_thash(
  27. out, buf, in, 1, pub_seed, addr);
  28. (void)hash_state_seeded; /* Avoid unused parameter warning. */
  29. }
  30. void PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_thash_2(
  31. unsigned char *out, const unsigned char *in,
  32. const unsigned char *pub_seed, uint32_t addr[8],
  33. const hash_state *hash_state_seeded) {
  34. unsigned char buf[PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_N + PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_ADDR_BYTES + 2 * PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_N];
  35. PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_thash(
  36. out, buf, in, 2, pub_seed, addr);
  37. (void)hash_state_seeded; /* Avoid unused parameter warning. */
  38. }
  39. void PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_thash_WOTS_LEN(
  40. unsigned char *out, const unsigned char *in,
  41. const unsigned char *pub_seed, uint32_t addr[8],
  42. const hash_state *hash_state_seeded) {
  43. unsigned char buf[PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_N + PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_ADDR_BYTES + PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_WOTS_LEN * PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_N];
  44. PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_thash(
  45. out, buf, in, PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_WOTS_LEN, pub_seed, addr);
  46. (void)hash_state_seeded; /* Avoid unused parameter warning. */
  47. }
  48. void PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_thash_FORS_TREES(
  49. unsigned char *out, const unsigned char *in,
  50. const unsigned char *pub_seed, uint32_t addr[8],
  51. const hash_state *hash_state_seeded) {
  52. unsigned char buf[PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_N + PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_ADDR_BYTES + PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_FORS_TREES * PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_N];
  53. PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_thash(
  54. out, buf, in, PQCLEAN_SPHINCSSHAKE256192SSIMPLE_AVX2_FORS_TREES, pub_seed, addr);
  55. (void)hash_state_seeded; /* Avoid unused parameter warning. */
  56. }