Jose\Util\RSA::exponentiate PHP Method

exponentiate() private static method

Operation with primes 'p' and 'q' is appox. 2x faster.
private static exponentiate ( RSAKey $key, BigInteger $c ) : BigInteger
$key Jose\KeyConverter\RSAKey
$c BigInteger
return BigInteger
    private static function exponentiate(RSAKey $key, BigInteger $c)
    {
        if ($key->isPublic() || empty($key->getPrimes())) {
            return $c->modPow($key->getExponent(), $key->getModulus());
        }
        $p = $key->getPrimes()[0];
        $q = $key->getPrimes()[1];
        $dP = $key->getExponents()[0];
        $dQ = $key->getExponents()[1];
        $qInv = $key->getCoefficient();
        $m1 = $c->modPow($dP, $p);
        $m2 = $c->modPow($dQ, $q);
        $h = $qInv->multiply($m1->subtract($m2)->add($p))->mod($p);
        $m = $m2->add($h->multiply($q));
        return $m;
    }