Ejemplo n.º 1
0
        /// <summary>
        /// Mask Generation Function
        /// </summary>
        /// <param name="Z">Initial pseudorandom Seed.</param>
        /// <param name="l">Length of output required.</param>
        /// <returns></returns>
        private byte[] MGF(byte[] Z, int l)
        {
            if (l > (Math.Pow(2, 32)))
            {
                throw new ArgumentException("Mask too long.");
            }
            else
            {
                List <byte> result = new List <byte>();
                for (int i = 0; i <= l / rsaParams.hLen; i++)
                {
                    List <byte> data = new List <byte>();
                    data.AddRange(Z);
                    data.AddRange(RSAxUtils.I2OSP(i, 4, false));
                    result.AddRange(rsaParams.ComputeHash(data.ToArray()));
                }

                if (l <= result.Count)
                {
                    return(result.GetRange(0, l).ToArray());
                }
                else
                {
                    throw new ArgumentException("Invalid Mask Length.");
                }
            }
        }