public static uint[] RSAdecrypt(uint[] m, uint[] d, uint[] p, uint[] q, uint[] u)
{
var xp = bmodexp(bmod(m, p), bmod(d, bsub(p, new uint[] { 1 })), p);
var xq = bmodexp(bmod(m, q), bmod(d, bsub(q, new uint[] { 1 })), q);
var t = bsub(xq, xp);
if (t.Length == 0)
{
t = bsub(xp, xq);
t = bmod(bmul(t, u), q);
t = bsub(q, t);
}
else
{
t = bmod(bmul(t, u), q);
}
return badd(bmul(t, p), xp);
}