mirror of
https://github.com/henrydcase/pqc.git
synced 2024-12-02 04:11:26 +00:00
41 lines
1.8 KiB
C
41 lines
1.8 KiB
C
|
#ifndef MQDSS_GF31_H
|
||
|
#define MQDSS_GF31_H
|
||
|
|
||
|
#include <stddef.h>
|
||
|
#include <stdint.h>
|
||
|
|
||
|
typedef uint16_t gf31;
|
||
|
|
||
|
/* This performs a full unique reduction mod 13 on x; x can be any unsigned
|
||
|
16-bit integer (i.e. in the range [0, 65535]) */
|
||
|
gf31 PQCLEAN_MQDSS64_CLEAN_mod31(gf31 x);
|
||
|
|
||
|
/* Given a vector of elements in the range [0, 31], this reduces the elements
|
||
|
to the range [0, 30] by mapping 31 to 0 (i.e reduction mod 31) */
|
||
|
void PQCLEAN_MQDSS64_CLEAN_vgf31_unique(gf31 *out, const gf31 *in);
|
||
|
|
||
|
/* Given a vector of 16-bit integers (i.e. in [0, 65535], this reduces the
|
||
|
elements to the range [0, 30] by mapping 31 to 0 (i.e reduction mod 31) */
|
||
|
void PQCLEAN_MQDSS64_CLEAN_vgf31_shorten_unique(gf31 *out, const gf31 *in);
|
||
|
|
||
|
/* Given a seed, samples len gf31 elements (in the range [0, 30]), and places
|
||
|
them in a vector of 16-bit elements */
|
||
|
void PQCLEAN_MQDSS64_CLEAN_gf31_nrand(gf31 *out, int len, const unsigned char *seed, size_t seedlen);
|
||
|
|
||
|
/* Given a seed, samples len gf31 elements, transposed into unsigned range,
|
||
|
i.e. in the range [-15, 15], and places them in an array of 8-bit integers.
|
||
|
This is used for the expansion of F, which wants packed elements. */
|
||
|
void PQCLEAN_MQDSS64_CLEAN_gf31_nrand_schar(signed char *out, int len, const unsigned char *seed, size_t seedlen);
|
||
|
|
||
|
/* Unpacks an array of packed GF31 elements to one element per gf31.
|
||
|
Assumes that there is sufficient empty space available at the end of the
|
||
|
array to unpack. Can perform in-place. */
|
||
|
void PQCLEAN_MQDSS64_CLEAN_gf31_nunpack(gf31 *out, const unsigned char *in, unsigned int n);
|
||
|
|
||
|
/* Packs an array of GF31 elements from gf31's to concatenated 5-bit values.
|
||
|
Assumes that there is sufficient space available to unpack.
|
||
|
Can perform in-place. */
|
||
|
void PQCLEAN_MQDSS64_CLEAN_gf31_npack(unsigned char *out, const gf31 *in, unsigned int n);
|
||
|
|
||
|
#endif
|