MCPcopy Create free account
hub / github.com/Tripwire/tripwire-open-source / RecursiveMultiplyBottom

Function RecursiveMultiplyBottom

src/cryptlib/integer.cpp:552–574  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

550// B[N] - multiplicant
551
552void RecursiveMultiplyBottom(word *R, word *T, const word *A, const word *B, unsigned int N)
553{
554 assert(N>=2 && N%2==0);
555
556 if (N==2)
557 AtomicMultiplyBottom(R, A[0], A[1], B[0], B[1]);
558 else if (N==4)
559 {
560 AtomicMultiply(R, A[0], A[1], B[0], B[1]);
561 AtomicMultiplyBottomAdd(R+2, A[0], A[1], B[2], B[3]);
562 AtomicMultiplyBottomAdd(R+2, A[2], A[3], B[0], B[1]);
563 }
564 else
565 {
566 const unsigned int N2 = N/2;
567
568 RecursiveMultiply(R, T, A0, B0, N2);
569 RecursiveMultiplyBottom(T0, T1, A1, B0, N2);
570 Add(R1, R1, T0, N2);
571 RecursiveMultiplyBottom(T0, T1, A0, B1, N2);
572 Add(R1, R1, T0, N2);
573 }
574}
575
576// R[N] --- upper half of A*B
577// T[2*N] - temporary work space

Callers 3

MontgomeryReduceFunction · 0.85
HalfMontgomeryReduceFunction · 0.85

Calls 4

AtomicMultiplyBottomFunction · 0.85
AtomicMultiplyFunction · 0.85
AtomicMultiplyBottomAddFunction · 0.85
RecursiveMultiplyFunction · 0.85

Tested by

no test coverage detected