MegaApi.Rsa.bmod2 C# (CSharp) Method

bmod2() public static method

public static bmod2 ( uint x, uint m, uint mu ) : uint[]
x uint
m uint
mu uint
return uint[]
        public static uint[] bmod2(uint[] x, uint[] m, uint[] mu)
        {
            var xl = x.Length - (m.Length << 1);
            if (xl > 0) return bmod2(x.Slice(0, xl).Concat(bmod2(x.Slice(xl), m, mu)), m, mu);

            int ml1 = m.Length + 1, ml2 = m.Length - 1;
            uint[] rr;
            //var q1=x.slice(ml2)
            //var q2=bmul(q1,mu)
            var q3 = bmul(x.Slice(ml2), mu).Slice(ml1);
            var r1 = x.Slice(0, ml1);
            var r2 = bmul(q3, m).Slice(0, ml1);
            var r = bsub(r1, r2);

            if (r.Length == 0)
            {
                r1[ml1] = 1;
                r = bsub(r1, r2);
            }
            for (var n = 0; ; n++)
            {
                rr = bsub(r, m);
                if (rr.Length == 0) break;
                r = rr;
                if (n >= 3) return bmod2(r, m, mu);
            }
            return r;
        }