public static uint[] bexpmod(uint[] g, uint[] e, uint[] m)
{
uint[] a = g.ToArray();
int l = e.Length - 1;
int n = nbits(e[l]) - 2;
for (; l >= 0; l--)
{
for (; n >= 0; n -= 1)
{
a = bmod(bsqr(a), m);
if ((e[l] & (1 << n)) != 0) a = bmod(bmul(a, g), m);
}
n = bs - 1;
}
return a;
}