packages feed

KpqC-0.1.0: cbits/third_party/HAETAE/src/symmetric-shake.c

// SPDX-License-Identifier: MIT

#include "fips202.h"
#include "params.h"
#include "symmetric.h"

#include <stdint.h>

void shake128_stream_init(keccak_state *state,
                          const uint8_t seed[HAETAE_SEEDBYTES],
                          uint16_t nonce) {
  uint8_t t[2];
  t[0] = nonce;
  t[1] = nonce >> 8;

  shake128_init(state);
  shake128_absorb(state, seed, HAETAE_SEEDBYTES);
  shake128_absorb(state, t, 2);
  shake128_finalize(state);
}

void shake256_stream_init(keccak_state *state,
                          const uint8_t seed[HAETAE_CRHBYTES], uint16_t nonce) {
  uint8_t t[2];
  t[0] = nonce;
  t[1] = nonce >> 8;

  shake256_init(state);
  shake256_absorb(state, seed, HAETAE_CRHBYTES);
  shake256_absorb(state, t, 2);
  shake256_finalize(state);
}

void shake256_absorb_twice(keccak_state *state, const uint8_t *in1,
                           size_t in1len, const uint8_t *in2, size_t in2len) {
  shake256_init(state);
  shake256_absorb(state, in1, in1len);
  shake256_absorb(state, in2, in2len);
  shake256_finalize(state);
}

void shake256_absorb_thrice(keccak_state *state, const uint8_t *in1,
                            size_t in1len, const uint8_t *in2, size_t in2len,
                            const uint8_t *in3, size_t in3len) {
  shake256_init(state);
  shake256_absorb(state, in1, in1len);
  shake256_absorb(state, in2, in2len);
  shake256_absorb(state, in3, in3len);
  shake256_finalize(state);
}