libff icon indicating copy to clipboard operation
libff copied to clipboard

Prime field

Open vherbert opened this issue 4 years ago • 4 comments

Hi,

I would like to employ your lib with prime field as possible. But doc is missing, I obtain strange behaviour with my usage.

#include <cstdint>
#include <stdexcept>
#include <libff/algebra/fields/fp.hpp>

using namespace std;

const mp_size_t limbcount = 4;
libff::bigint<limbcount> mod= libff::bigint<limbcount>("21888242871839275222246405745257275088548364400416034343698204186575808495617");
typedef libff::Fp_model<limbcount, mod> FieldT;

int main()
{
	assert(FieldT::modulus_is_valid());
	FieldT x = FieldT::random_element();
	FieldT y = FieldT::one();
	FieldT z = x + y;
	mod.print();
	x.print();
	y.print();
	z.print();
        FieldT::one().print()
	assert(FieldT::zero() != FieldT::one());	
}

fail

Help would be appreciated. Thanks.

`

vherbert avatar Jun 18 '20 14:06 vherbert

It seems to require to define at least inv and Rsquared class members, resp. equal to modulus^(-1) mod W, where W = 2^(word size) and R^2, where R = W^k, where k = ??

vherbert avatar Jun 18 '20 15:06 vherbert

Same problem here. Any suggestion about how to fix this?

AthrunArthur avatar Dec 09 '20 09:12 AthrunArthur

Seems missed defining values here is <fp.hpp>

template<mp_size_t n, const bigint<n>& modulus>
size_t Fp_model<n, modulus>::num_bits;

template<mp_size_t n, const bigint<n>& modulus>
bigint<n> Fp_model<n, modulus>::euler;

template<mp_size_t n, const bigint<n>& modulus>
size_t Fp_model<n, modulus>::s;

template<mp_size_t n, const bigint<n>& modulus>
bigint<n> Fp_model<n, modulus>::t;

template<mp_size_t n, const bigint<n>& modulus>
bigint<n> Fp_model<n, modulus>::t_minus_1_over_2;

template<mp_size_t n, const bigint<n>& modulus>
Fp_model<n, modulus> Fp_model<n, modulus>::nqr;

template<mp_size_t n, const bigint<n>& modulus>
Fp_model<n, modulus> Fp_model<n, modulus>::nqr_to_t;

template<mp_size_t n, const bigint<n>& modulus>
Fp_model<n, modulus> Fp_model<n, modulus>::multiplicative_generator;

template<mp_size_t n, const bigint<n>& modulus>
Fp_model<n, modulus> Fp_model<n, modulus>::root_of_unity;

template<mp_size_t n, const bigint<n>& modulus>
mp_limb_t Fp_model<n, modulus>::inv;

template<mp_size_t n, const bigint<n>& modulus>
bigint<n> Fp_model<n, modulus>::Rsquared;

template<mp_size_t n, const bigint<n>& modulus>
bigint<n> Fp_model<n, modulus>::Rcubed;

AthrunArthur avatar Dec 09 '20 09:12 AthrunArthur

Just in case anyone have the same problem, you may check this repo:

https://github.com/niekbouman/libff_init.git

AthrunArthur avatar Dec 14 '20 08:12 AthrunArthur