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

DtlsReplayWindow

sealed class DtlsReplayWindow
using System; namespace Org.BouncyCastle.Tls { internal sealed class DtlsReplayWindow { private const long ValidSeqMask = 281474976710655; private const long WindowSize = 64; private long m_latestConfirmedSeq = -1; private ulong m_bitmap; internal bool ShouldDiscard(long seq) { if ((seq & 281474976710655) != seq) return true; if (seq <= m_latestConfirmedSeq) { long num = m_latestConfirmedSeq - seq; if (num >= 64) return true; if (((long)m_bitmap & (1 << (int)num)) != 0) return true; } return false; } internal void ReportAuthenticated(long seq, out bool isLatestConfirmed) { if ((seq & 281474976710655) != seq) throw new ArgumentException("out of range", "seq"); if (seq <= m_latestConfirmedSeq) { long num = m_latestConfirmedSeq - seq; if (num < 64) m_bitmap |= (ulong)(1 << (int)num); isLatestConfirmed = false; } else { long num2 = seq - m_latestConfirmedSeq; if (num2 >= 64) m_bitmap = 1; else { m_bitmap <<= (int)num2; m_bitmap |= 1; } m_latestConfirmedSeq = seq; isLatestConfirmed = true; } } internal void Reset(long seq) { if ((seq & 281474976710655) != seq) throw new ArgumentException("out of range", "seq"); m_latestConfirmedSeq = seq; m_bitmap = ulong.MaxValue >> (int)System.Math.Max(0, 63 - seq); } } }