I don't know if it is any good. I've never done this, thus, I noticed it is kinda slow.
Can you suggest improvements? I may use it in actual software in the future.
private int secgen(int minvalue, int maxvalue)
{
Func<int, int, int, int> modular = (a, b, mod) =>
{
long rem;
Math.DivRem((long)a + (long)b, (long)mod, out rem);
if (rem < minvalue)
rem += minvalue;
return (int)rem;
};
byte[] entropyBytes = new byte[257];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(entropyBytes);
int value = entropyBytes[0];
for (int i = 1; i < 257; i++)
{
value = modular(value, entropyBytes[i], maxvalue);
}
//MessageBox.Show(value.ToString());
return value;
}