Как возвести в степень значение biginteger на biginteger?
Никто в реальных реализациях такой фигнёй не занимается. Ты постигаешь основы криптографии, но забыл изучить раздел "модульная арифметика".
https://ru.wikipedia.org/wiki/Возведение_в_степень...
Само число ведь не нужно. Нужен остаток от деления по модулю.
В противном случае тебе нужно будет реализовать класс, куда будут упаковываться числа нужной битности для 1024 бит тебе потребуется  16 long-ов. Ну и дальше - реализовать арифметику.
Отличное свойство модуля в том, что можно при вычислениях брать модуль на каждом этапе (если нет делений - в этом случае надо искать обратное по модулю). Поэтому исходное выражение можно переписать так: (g^m mod n^2) * (r^n mod n^2) mod n^2

И код вычисления этого такой:
nn = n.multiply(n);
res = g.modPow(m, nn).multiply(r.modPow(n, nn)).mod(nn);