コード例 #1
0
ファイル: FFT.cpp プロジェクト: ddemarco5/CRYPTO_chat
void UseFFTPrime(long index)
{
   long numprimes = FFTTables_store.length();

   if (index < 0 || index > numprimes)
      Error("invalid FFT prime index");

   if (index < numprimes) return;

   // index == numprimes

   long q, w;

   NextFFTPrime(q, w);


   FFTTables_store.SetLength(numprimes+1);
   FFTTables = FFTTables_store.elts();
   FFTTables[numprimes] = NTL_NEW_OP FFTPrimeInfo();
   if (!FFTTables[numprimes]) Error("out of memory in UseFFTPrime");

   FFTPrimeInfo& info = *FFTTables[numprimes];

   long bigtab = 0;

#ifdef NTL_FFT_BIGTAB
   if (index < NTL_FFT_BIGTAB_LIMIT)
      bigtab = 1;
#endif

   InitFFTPrimeInfo(info, q, w, bigtab);
   info.zz_p_context = Build_zz_pInfo(&info);

   // initialize data structures for the legacy inteface

   NumFFTPrimes = FFTTables_store.length();
   
   FFTPrime_store.SetLength(NumFFTPrimes);
   FFTPrime = FFTPrime_store.elts();
   FFTPrime[NumFFTPrimes-1] = q;

   FFTPrimeInv_store.SetLength(NumFFTPrimes);
   FFTPrimeInv = FFTPrimeInv_store.elts();
   FFTPrimeInv[NumFFTPrimes-1] = 1/((double) q);
}
コード例 #2
0
zz_pInfoT::zz_pInfoT(INIT_USER_FFT_TYPE, long q)
{
   long w;
   if (!IsFFTPrime(q, w)) LogicError("invalid user supplied prime");

   p = q;
   pinv = 1/((double) q);

   p_info_owner.make();
   p_info = p_info_owner.get();

   bool bigtab = false;
#ifdef NTL_FFT_BIGTAB
   bigtab = true;
#endif
   InitFFTPrimeInfo(*p_info, q, w, bigtab); 

   NumPrimes = 1;
   PrimeCnt = 0;

   MaxRoot = CalcMaxRoot(p);
}