MCPcopy Create free account
hub / github.com/c3d/tao3D / RecursiveInverseModPower2

Function RecursiveInverseModPower2

libcryptopp/cryptopp/integer.cpp:2284–2307  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2282// A[N] ----- an odd number as input
2283
2284void RecursiveInverseModPower2(word *R, word *T, const word *A, size_t N)
2285{
2286 if (N==2)
2287 {
2288 T[0] = AtomicInverseModPower2(A[0]);
2289 T[1] = 0;
2290 s_pBot[0](T+2, T, A);
2291 TwosComplement(T+2, 2);
2292 Increment(T+2, 2, 2);
2293 s_pBot[0](R, T, T+2);
2294 }
2295 else
2296 {
2297 const size_t N2 = N/2;
2298 RecursiveInverseModPower2(R0, T0, A0, N2);
2299 T0[0] = 1;
2300 SetWords(T0+1, 0, N2-1);
2301 MultiplyTop(R1, T1, T0, R0, A0, N2);
2302 MultiplyBottom(T0, T1, R0, A1, N2);
2303 Add(T0, R1, T0, N2);
2304 TwosComplement(T0, N2);
2305 MultiplyBottom(R1, T1, R0, T0, N2);
2306 }
2307}
2308
2309// R[N] --- result = X/(2**(WORD_BITS*N)) mod M
2310// T[3*N] - temporary work space

Callers 1

Calls 7

AtomicInverseModPower2Function · 0.85
TwosComplementFunction · 0.85
IncrementFunction · 0.85
SetWordsFunction · 0.85
MultiplyTopFunction · 0.85
MultiplyBottomFunction · 0.85
AddFunction · 0.85

Tested by

no test coverage detected