![]() |
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.
1.8.11