Finite field implementation. More...
#include <limits.h>
#include <string.h>
#include "epid/common/math/finitefield.h"
#include "epid/common/math/bignum-internal.h"
#include "epid/common/math/finitefield-internal.h"
#include "epid/common/memory.h"
#include "ext/ipp/include/ippcp.h"
#include "ext/ipp/include/ippcpepid.h"
Macros | |
#define | RNG_WATCHDOG (10) |
Number of tries for RNG. | |
Functions | |
EpidStatus | InitFiniteFieldFromIpp (IppsGFpState *ipp_ff, FiniteField *ff) |
Initializes a FiniteField structure. | |
EpidStatus | NewFiniteField (BigNumStr const *prime, FiniteField **ff) |
Creates new finite field. More... | |
EpidStatus | NewFiniteFieldViaBinomalExtension (FiniteField const *ground_field, FfElement const *ground_element, int degree, FiniteField **ff) |
Creates a new finite field using binomial extension. More... | |
void | DeleteFiniteField (FiniteField **ff) |
Frees a previously allocated FiniteField. More... | |
EpidStatus | NewFfElement (FiniteField const *ff, FfElement **new_ff_elem) |
Creates a new finite field element. More... | |
void | DeleteFfElement (FfElement **ff_elem) |
Frees a previously allocated FfElement. More... | |
EpidStatus | ReadFfElement (FiniteField *ff, void const *ff_elem_str, size_t strlen, FfElement *ff_elem) |
Deserializes a FfElement from a string. More... | |
EpidStatus | WriteFfElement (FiniteField *ff, FfElement const *ff_elem, void *ff_elem_str, size_t strlen) |
Serializes a finite field element to a string. More... | |
EpidStatus | FfNeg (FiniteField *ff, FfElement const *a, FfElement *r) |
Calculates the additive inverse of a finite field element. More... | |
EpidStatus | FfInv (FiniteField *ff, FfElement const *a, FfElement *r) |
Calculates the multiplicative inverse of a finite field element. More... | |
EpidStatus | FfAdd (FiniteField *ff, FfElement const *a, FfElement const *b, FfElement *r) |
Adds two finite field elements. More... | |
EpidStatus | FfMul (FiniteField *ff, FfElement const *a, FfElement const *b, FfElement *r) |
Multiplies two finite field elements. More... | |
EpidStatus | FfIsZero (FiniteField *ff, FfElement const *a, bool *is_zero) |
Checks if given finite field element is the additive identity (zero). More... | |
EpidStatus | FfExp (FiniteField *ff, FfElement const *a, BigNum const *b, FfElement *r) |
Raises an element of a finite field to a power. More... | |
EpidStatus | FfMultiExp (FiniteField *ff, FfElement const **p, BigNumStr const **b, size_t m, FfElement *r) |
Multi-exponentiates finite field elements. More... | |
EpidStatus | FfSscmMultiExp (FiniteField *ff, FfElement const **p, BigNumStr const **b, size_t m, FfElement *r) |
Software side-channel mitigated implementation of FfMultiExp. More... | |
EpidStatus | FfIsEqual (FiniteField *ff, FfElement const *a, FfElement const *b, bool *is_equal) |
Checks if two finite field elements are equal. More... | |
EpidStatus | FfHash (FiniteField *ff, void const *msg, size_t msg_len, HashAlg hash_alg, FfElement *r) |
Hashes an arbitrary message to an element in a finite field. More... | |
EpidStatus | FfGetRandom (FiniteField *ff, BigNumStr const *low_bound, BitSupplier rnd_func, void *rnd_param, FfElement *r) |
Generate random finite field element. More... | |
Finite field implementation.