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

Bits

static class Bits
using System.Runtime.CompilerServices; namespace Org.BouncyCastle.Math.Raw { internal static class Bits { [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static uint BitPermuteStep(uint x, uint m, int s) { uint num = (x ^ (x >> s)) & m; return num ^ (num << s) ^ x; } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static ulong BitPermuteStep(ulong x, ulong m, int s) { ulong num = (x ^ (x >> s)) & m; return num ^ (num << s) ^ x; } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static void BitPermuteStep2(ref uint hi, ref uint lo, uint m, int s) { uint num = ((lo >> s) ^ hi) & m; lo ^= num << s; hi ^= num; } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static void BitPermuteStep2(ref ulong hi, ref ulong lo, ulong m, int s) { ulong num = ((lo >> s) ^ hi) & m; lo ^= num << s; hi ^= num; } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static uint BitPermuteStepSimple(uint x, uint m, int s) { return ((x & m) << s) | ((x >> s) & m); } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static ulong BitPermuteStepSimple(ulong x, ulong m, int s) { return ((x & m) << s) | ((x >> s) & m); } } }