public static uint[] mpi2b(byte[] s)
{
uint bn = 1;
List<uint> r = new List<uint>();
int rn = 0;
uint sb = 256;
uint c = 0;
int sn = s.Length;
if (sn < 2) return new uint[] { 0 };
int len = (sn - 2) * 8;
int bits = s[0] * 256 + s[1];
if (bits > len || bits < len - 8) return new uint[] { 0 };
for (var n = 0; n < len; n++)
{
if ((sb <<= 1) > 255)
{
sb = 1; c = s[--sn];
}
if (bn > bm)
{
bn = 1;
++rn;
Utils.EnsureIndex(r, rn);
r[rn] = 0;
}
if ((c & sb) != 0) { Utils.EnsureIndex(r, rn); r[rn] |= bn; }
bn <<= 1;
}
return r.ToArray();
}