Fabcoin Core
0.16.2
P2P Digital Currency
|
#include "pch.h"
#include "nbtheory.h"
#include "integer.h"
#include "modarith.h"
#include "algparam.h"
#include "smartptr.h"
#include "misc.h"
#include <math.h>
#include <vector>
Go to the source code of this file.
Classes | |
struct | NewPrimeTable |
struct | NewLastSmallPrimeSquared |
class | PrimeSieve |
Functions | |
const word16 * | GetPrimeTable (unsigned int &size) |
bool | IsSmallPrime (const Integer &p) |
Tests whether a number is a small prime. More... | |
bool | TrialDivision (const Integer &p, unsigned bound) |
bool | SmallDivisorsTest (const Integer &p) |
bool | IsFermatProbablePrime (const Integer &n, const Integer &b) |
bool | IsStrongProbablePrime (const Integer &n, const Integer &b) |
bool | RabinMillerTest (RandomNumberGenerator &rng, const Integer &n, unsigned int rounds) |
bool | IsLucasProbablePrime (const Integer &n) |
bool | IsStrongLucasProbablePrime (const Integer &n) |
bool | IsPrime (const Integer &p) |
Verifies a prime number. More... | |
bool | VerifyPrime (RandomNumberGenerator &rng, const Integer &p, unsigned int level) |
Verifies a prime number. More... | |
unsigned int | PrimeSearchInterval (const Integer &max) |
AlgorithmParameters | MakeParametersForTwoPrimesOfEqualSize (unsigned int productBitLength) |
bool | FirstPrime (Integer &p, const Integer &max, const Integer &equiv, const Integer &mod, const PrimeSelector *pSelector) |
Finds a random prime of special form. More... | |
Integer | MihailescuProvablePrime (RandomNumberGenerator &rng, unsigned int pbits) |
Generates a provable prime. More... | |
Integer | MaurerProvablePrime (RandomNumberGenerator &rng, unsigned int bits) |
Generates a provable prime. More... | |
Integer | CRT (const Integer &xp, const Integer &p, const Integer &xq, const Integer &q, const Integer &u) |
Integer | ModularSquareRoot (const Integer &a, const Integer &p) |
bool | SolveModularQuadraticEquation (Integer &r1, Integer &r2, const Integer &a, const Integer &b, const Integer &c, const Integer &p) |
Integer | ModularRoot (const Integer &a, const Integer &dp, const Integer &dq, const Integer &p, const Integer &q, const Integer &u) |
Integer | ModularRoot (const Integer &a, const Integer &e, const Integer &p, const Integer &q) |
int | Jacobi (const Integer &aIn, const Integer &bIn) |
Integer | Lucas (const Integer &e, const Integer &pIn, const Integer &n) |
Integer | InverseLucas (const Integer &e, const Integer &m, const Integer &p, const Integer &q, const Integer &u) |
unsigned int | FactoringWorkFactor (unsigned int n) |
unsigned int | DiscreteLogWorkFactor (unsigned int n) |
Variables | |
const word | s_lastSmallPrime = 32719 |
unsigned int DiscreteLogWorkFactor | ( | unsigned int | n | ) |
unsigned int FactoringWorkFactor | ( | unsigned int | n | ) |
bool FirstPrime | ( | Integer & | p, |
const Integer & | max, | ||
const Integer & | equiv, | ||
const Integer & | mod, | ||
const PrimeSelector * | pSelector | ||
) |
Finds a random prime of special form.
p | an Integer reference to receive the prime |
max | the maximum value |
equiv | the equivalence class based on the parameter mod |
mod | the modulus used to reduce the equivalence class |
pSelector | pointer to a PrimeSelector function for the application to signal suitability |
FirstPrime() uses a fast sieve to find the first probable prime in {x | p<=x<=max and xmod==equiv}
Definition at line 381 of file nbtheory.cpp.
const word16* GetPrimeTable | ( | unsigned int & | size | ) |
Integer InverseLucas | ( | const Integer & | e, |
const Integer & | m, | ||
const Integer & | p, | ||
const Integer & | q, | ||
const Integer & | u | ||
) |
Definition at line 1000 of file nbtheory.cpp.
bool IsLucasProbablePrime | ( | const Integer & | n | ) |
bool IsPrime | ( | const Integer & | p | ) |
Verifies a prime number.
p | a candidate prime to test |
IsPrime() is suitable for testing candidate primes when creating them. Internally, IsPrime() utilizes SmallDivisorsTest(), IsStrongProbablePrime() and IsStrongLucasProbablePrime().
Definition at line 239 of file nbtheory.cpp.
bool IsSmallPrime | ( | const Integer & | p | ) |
Tests whether a number is a small prime.
p | a candidate prime to test |
Internally, the library maintains a table fo the first 32719 prime numbers in sorted order. IsSmallPrime() searches the table and returns true if p is in the table.
Definition at line 62 of file nbtheory.cpp.
bool IsStrongLucasProbablePrime | ( | const Integer & | n | ) |
Definition at line 184 of file nbtheory.cpp.
Definition at line 107 of file nbtheory.cpp.
Definition at line 787 of file nbtheory.cpp.
Definition at line 814 of file nbtheory.cpp.
AlgorithmParameters MakeParametersForTwoPrimesOfEqualSize | ( | unsigned int | productBitLength | ) |
Definition at line 267 of file nbtheory.cpp.
Integer MaurerProvablePrime | ( | RandomNumberGenerator & | rng, |
unsigned int | bits | ||
) |
Generates a provable prime.
rng | a RandomNumberGenerator to produce keying material |
bits | the number of bits in the prime number |
Definition at line 512 of file nbtheory.cpp.
Integer MihailescuProvablePrime | ( | RandomNumberGenerator & | rng, |
unsigned int | bits | ||
) |
Generates a provable prime.
rng | a RandomNumberGenerator to produce keying material |
bits | the number of bits in the prime number |
Mihailescu's methods performs a search using algorithmic progressions.
Definition at line 472 of file nbtheory.cpp.
Integer ModularRoot | ( | const Integer & | a, |
const Integer & | dp, | ||
const Integer & | dq, | ||
const Integer & | p, | ||
const Integer & | q, | ||
const Integer & | u | ||
) |
Definition at line 648 of file nbtheory.cpp.
Definition at line 574 of file nbtheory.cpp.
unsigned int PrimeSearchInterval | ( | const Integer & | max | ) |
Definition at line 257 of file nbtheory.cpp.
bool RabinMillerTest | ( | RandomNumberGenerator & | rng, |
const Integer & | n, | ||
unsigned int | rounds | ||
) |
Definition at line 140 of file nbtheory.cpp.
bool SmallDivisorsTest | ( | const Integer & | p | ) |
Definition at line 91 of file nbtheory.cpp.
bool SolveModularQuadraticEquation | ( | Integer & | r1, |
Integer & | r2, | ||
const Integer & | a, | ||
const Integer & | b, | ||
const Integer & | c, | ||
const Integer & | p | ||
) |
Definition at line 623 of file nbtheory.cpp.
bool TrialDivision | ( | const Integer & | p, |
unsigned | bound | ||
) |
TrialDivision() true if p is divisible by some prime less than bound. bound not be greater than the largest entry in the prime table, which is 32719.
Definition at line 73 of file nbtheory.cpp.
bool VerifyPrime | ( | RandomNumberGenerator & | rng, |
const Integer & | p, | ||
unsigned int | level = 1 |
||
) |
Verifies a prime number.
rng | a RandomNumberGenerator for randomized testing |
p | a candidate prime to test |
level | the level of thoroughness of testing |
VerifyPrime() is suitable for testing candidate primes created by others. Internally, VerifyPrime() utilizes IsPrime() and one-round RabinMillerTest(). If the candiate passes and level is greater than 1, then 10 round RabinMillerTest() primality testing is performed.
Definition at line 249 of file nbtheory.cpp.
const word s_lastSmallPrime = 32719 |
Definition at line 23 of file nbtheory.cpp.