1
0
mirror of https://github.com/bitwarden/server synced 2025-12-27 05:33:17 +00:00

Allow for binning of comb IDs by date and value

This commit is contained in:
Matt Gibson
2024-07-01 19:15:54 -07:00
parent 554a004d7a
commit 787996bc8a
2 changed files with 58 additions and 0 deletions

View File

@@ -76,6 +76,39 @@ public static class CoreHelpers
return new Guid(guidArray);
}
internal static DateTime DateFromComb(Guid combGuid)
{
var guidArray = combGuid.ToByteArray();
var daysArray = new byte[4];
var msecsArray = new byte[4];
Array.Copy(guidArray, guidArray.Length - 6, daysArray, 2, 2);
Array.Copy(guidArray, guidArray.Length - 4, msecsArray, 0, 4);
Array.Reverse(daysArray);
Array.Reverse(msecsArray);
var days = BitConverter.ToInt32(daysArray, 0);
var msecs = BitConverter.ToInt32(msecsArray, 0);
var time = new TimeSpan(days, 0, 0, 0, (int)(msecs * 3.333333));
return new DateTime(_baseDateTicks + time.Ticks, DateTimeKind.Utc);
}
internal static double BinForComb(Guid combGuid, int binCount)
{
// From System.Web.Util.HashCodeCombiner
uint CombineHashCodes(uint h1, byte h2)
{
return (uint)(((h1 << 5) + h1) ^ h2);
}
var guidArray = combGuid.ToByteArray();
var randomArray = new byte[10];
Array.Copy(guidArray, 0, randomArray, 0, 10);
var hash = randomArray.Aggregate((uint)randomArray.Length, CombineHashCodes);
return hash % binCount;
}
public static string CleanCertificateThumbprint(string thumbprint)
{
// Clean possible garbage characters from thumbprint copy/paste