<PackageReference Include="BouncyCastle.Cryptography" Version="2.6.0" />

FalconCommon

class FalconCommon
namespace Org.BouncyCastle.Pqc.Crypto.Falcon { internal class FalconCommon { internal uint[] l2bound = new uint[11] { 0, 101498, 208714, 428865, 892039, 1852696, 3842630, 7959734, 16468416, 34034726, 70265242 }; internal void hash_to_point_vartime(SHAKE256 sc, ushort[] xsrc, int x, uint logn) { int num = 1 << (int)logn; while (num > 0) { byte[] array = new byte[2]; sc.i_shake256_extract(array, 0, 2); uint num2 = (uint)((array[0] << 8) | array[1]); if (num2 < 61445) { while (num2 >= 12289) { num2 -= 12289; } xsrc[x++] = (ushort)num2; num--; } } } internal bool is_short(short[] s1src, int s1, short[] s2src, int s2, uint logn) { int num = 1 << (int)logn; uint num2 = 0; uint num3 = 0; for (int i = 0; i < num; i++) { int num4 = s1src[s1 + i]; num2 = (uint)((int)num2 + num4 * num4); num3 |= num2; num4 = s2src[s2 + i]; num2 = (uint)((int)num2 + num4 * num4); num3 |= num2; } num2 = (uint)((int)num2 | (int)(0 - (num3 >> 31))); return num2 <= l2bound[logn]; } internal bool is_short_half(uint sqn, short[] s2src, int s2, uint logn) { int num = 1 << (int)logn; uint num2 = (uint)(0 - (sqn >> 31)); for (int i = 0; i < num; i++) { int num3 = s2src[s2 + i]; sqn = (uint)((int)sqn + num3 * num3); num2 |= sqn; } sqn = (uint)((int)sqn | (int)(0 - (num2 >> 31))); return sqn <= l2bound[logn]; } } }