Skip to content

Commit

Permalink
[release/6.0] Fix XXHash for stripe size (#61923)
Browse files Browse the repository at this point in the history
* Fix XXHash for stripe size

* Add servicing properties to System.IO.Hashing

* Run package validation against 6.0.0 packages and enable it for IO Hashing.

Co-authored-by: Tornhoof <tornhoof@gmail.com>
Co-authored-by: Jeremy Barton <jbarton@microsoft.com>
Co-authored-by: Santiago Fernandez Madero <safern@microsoft.com>
  • Loading branch information
4 people committed Jan 6, 2022
1 parent 898f09a commit 1c2501d
Show file tree
Hide file tree
Showing 10 changed files with 47 additions and 5 deletions.
2 changes: 1 addition & 1 deletion eng/packaging.targets
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<EnablePackageValidation Condition="'$(DotNetBuildFromSource)' != 'true'">true</EnablePackageValidation>
<!-- Don't restore prebuilt packages during sourcebuild. -->
<DisablePackageBaselineValidation Condition="'$(DotNetBuildFromSource)' == 'true'">true</DisablePackageBaselineValidation>
<PackageValidationBaselineVersion Condition="'$(PackageValidationBaselineVersion)' == ''">$([MSBuild]::Subtract($(MajorVersion), 1)).0.0</PackageValidationBaselineVersion>
<PackageValidationBaselineVersion Condition="'$(PackageValidationBaselineVersion)' == ''">6.0.0</PackageValidationBaselineVersion>
<!-- PackDependsOn is the right hook in a targets file if the NuGet.Build.Tasks.Pack nuget package is used, otherwise
BeforePack must be used. Setting both to ensure that we are always running before other targets. -->
<PackDependsOn>AddNETStandardCompatErrorFileForPackaging;IncludeAnalyzersInPackage;$(PackDependsOn)</PackDependsOn>
Expand Down
4 changes: 2 additions & 2 deletions src/libraries/System.IO.Hashing/src/System.IO.Hashing.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
<Nullable>enable</Nullable>
<TargetFrameworks>$(NetCoreAppCurrent);netstandard2.0;net461</TargetFrameworks>
<IsPackable>true</IsPackable>
<!-- TODO: Remove when the package ships with .NET 6. -->
<DisablePackageBaselineValidation>true</DisablePackageBaselineValidation>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<ServicingVersion>1</ServicingVersion>
<PackageDescription>Provides non-cryptographic hash algorithms, such as CRC-32.

Commonly Used Types:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ private static int StaticHash(ReadOnlySpan<byte> source, Span<byte> destination,
int totalLength = source.Length;
State state = new State((uint)seed);

while (source.Length > StripeSize)
while (source.Length >= StripeSize)
{
state.ProcessStripe(source);
source = source.Slice(StripeSize);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ private static int StaticHash(ReadOnlySpan<byte> source, Span<byte> destination,
int totalLength = source.Length;
State state = new State((ulong)seed);

while (source.Length > StripeSize)
while (source.Length >= StripeSize)
{
state.ProcessStripe(source);
source = source.Slice(StripeSize);
Expand Down
7 changes: 7 additions & 0 deletions src/libraries/System.IO.Hashing/tests/XxHash32Tests.007.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ public static IEnumerable<object[]> TestCases
private const string DotNetHashesThis3 = DotNetHashesThis + DotNetHashesThis + DotNetHashesThis;
private const string DotNetNCHashing = ".NET now has non-crypto hashing";
private const string DotNetNCHashing3 = DotNetNCHashing + DotNetNCHashing + DotNetNCHashing;
private const string SixteenBytes = ".NET Hashes This";
private const string SixteenBytes3 = SixteenBytes + SixteenBytes + SixteenBytes;

protected static IEnumerable<TestCase> TestCaseDefinitions { get; } =
new[]
Expand Down Expand Up @@ -77,6 +79,11 @@ public static IEnumerable<object[]> TestCases
$"{DotNetNCHashing} (x3)",
Encoding.ASCII.GetBytes(DotNetNCHashing3),
"CABC8ABD"),
// stripe size
new TestCase(
$"{SixteenBytes} (x3)",
Encoding.ASCII.GetBytes(SixteenBytes3),
"AD98EBD3")
};

protected override NonCryptographicHashAlgorithm CreateInstance() => new XxHash32(Seed);
Expand Down
7 changes: 7 additions & 0 deletions src/libraries/System.IO.Hashing/tests/XxHash32Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ public static IEnumerable<object[]> TestCases
private const string DotNetHashesThis3 = DotNetHashesThis + DotNetHashesThis + DotNetHashesThis;
private const string DotNetNCHashing = ".NET now has non-crypto hashing";
private const string DotNetNCHashing3 = DotNetNCHashing + DotNetNCHashing + DotNetNCHashing;
private const string SixteenBytes = ".NET Hashes This";
private const string SixteenBytes3 = SixteenBytes + SixteenBytes + SixteenBytes;

protected static IEnumerable<TestCase> TestCaseDefinitions { get; } =
new[]
Expand Down Expand Up @@ -90,6 +92,11 @@ public static IEnumerable<object[]> TestCases
$"{DotNetNCHashing} (x3)",
Encoding.ASCII.GetBytes(DotNetNCHashing3),
"65242024"),
// stripe size
new TestCase(
$"{SixteenBytes} (x3)",
Encoding.ASCII.GetBytes(SixteenBytes3),
"29DA7472")
};

protected override NonCryptographicHashAlgorithm CreateInstance() => new XxHash32();
Expand Down
7 changes: 7 additions & 0 deletions src/libraries/System.IO.Hashing/tests/XxHash32Tests.f00d.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ public static IEnumerable<object[]> TestCases
private const string DotNetHashesThis3 = DotNetHashesThis + DotNetHashesThis + DotNetHashesThis;
private const string DotNetNCHashing = ".NET now has non-crypto hashing";
private const string DotNetNCHashing3 = DotNetNCHashing + DotNetNCHashing + DotNetNCHashing;
private const string SixteenBytes = ".NET Hashes This";
private const string SixteenBytes3 = SixteenBytes + SixteenBytes + SixteenBytes;

protected static IEnumerable<TestCase> TestCaseDefinitions { get; } =
new[]
Expand Down Expand Up @@ -77,6 +79,11 @@ public static IEnumerable<object[]> TestCases
$"{DotNetNCHashing} (x3)",
Encoding.ASCII.GetBytes(DotNetNCHashing3),
"5A513E6D"),
// stripe size
new TestCase(
$"{SixteenBytes} (x3)",
Encoding.ASCII.GetBytes(SixteenBytes3),
"B38A9A45")
};

protected override NonCryptographicHashAlgorithm CreateInstance() => new XxHash32(Seed);
Expand Down
7 changes: 7 additions & 0 deletions src/libraries/System.IO.Hashing/tests/XxHash64Tests.007.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ public static IEnumerable<object[]> TestCases
private const string DotNetNCHashing = ".NET now has non-crypto hashing";
private const string SixtyThreeBytes = "A sixty-three byte test input requires substantial forethought!";
private const string SixtyThreeBytes3 = SixtyThreeBytes + SixtyThreeBytes + SixtyThreeBytes;
private const string ThirtyTwoBytes = "This string has 32 ASCII bytes..";
private const string ThirtyTwoBytes3 = ThirtyTwoBytes + ThirtyTwoBytes + ThirtyTwoBytes;

protected static IEnumerable<TestCase> TestCaseDefinitions { get; } =
new[]
Expand Down Expand Up @@ -87,6 +89,11 @@ public static IEnumerable<object[]> TestCases
$"{SixtyThreeBytes} (x3)",
Encoding.ASCII.GetBytes(SixtyThreeBytes3),
"D6095B93EB10BEDA"),
// stripe size
new TestCase(
$"{ThirtyTwoBytes} (x3)",
Encoding.ASCII.GetBytes(ThirtyTwoBytes3),
"45116421CF932B1F")
};

protected override NonCryptographicHashAlgorithm CreateInstance() => new XxHash64(Seed);
Expand Down
7 changes: 7 additions & 0 deletions src/libraries/System.IO.Hashing/tests/XxHash64Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ public static IEnumerable<object[]> TestCases
private const string DotNetNCHashing = ".NET now has non-crypto hashing";
private const string SixtyThreeBytes = "A sixty-three byte test input requires substantial forethought!";
private const string SixtyThreeBytes3 = SixtyThreeBytes + SixtyThreeBytes + SixtyThreeBytes;
private const string ThirtyTwoBytes = "This string has 32 ASCII bytes..";
private const string ThirtyTwoBytes3 = ThirtyTwoBytes + ThirtyTwoBytes + ThirtyTwoBytes;

protected static IEnumerable<TestCase> TestCaseDefinitions { get; } =
new[]
Expand Down Expand Up @@ -103,6 +105,11 @@ public static IEnumerable<object[]> TestCases
$"{SixtyThreeBytes} (x3)",
Encoding.ASCII.GetBytes(SixtyThreeBytes3),
"239C7B3A85BD22B3"),
// stripe size
new TestCase(
$"{ThirtyTwoBytes} (x3)",
Encoding.ASCII.GetBytes(ThirtyTwoBytes3),
"975E3E6FE7E67FBC")
};

protected override NonCryptographicHashAlgorithm CreateInstance() => new XxHash64();
Expand Down
7 changes: 7 additions & 0 deletions src/libraries/System.IO.Hashing/tests/XxHash64Tests.f00d.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ public static IEnumerable<object[]> TestCases
private const string DotNetNCHashing = ".NET now has non-crypto hashing";
private const string SixtyThreeBytes = "A sixty-three byte test input requires substantial forethought!";
private const string SixtyThreeBytes3 = SixtyThreeBytes + SixtyThreeBytes + SixtyThreeBytes;
private const string ThirtyTwoBytes = "This string has 32 ASCII bytes..";
private const string ThirtyTwoBytes3 = ThirtyTwoBytes + ThirtyTwoBytes + ThirtyTwoBytes;

protected static IEnumerable<TestCase> TestCaseDefinitions { get; } =
new[]
Expand Down Expand Up @@ -87,6 +89,11 @@ public static IEnumerable<object[]> TestCases
$"{SixtyThreeBytes} (x3)",
Encoding.ASCII.GetBytes(SixtyThreeBytes3),
"6F1C62EB48EA2FEC"),
// stripe size
new TestCase(
$"{ThirtyTwoBytes} (x3)",
Encoding.ASCII.GetBytes(ThirtyTwoBytes3),
"B358EB96B8E3E7AD")
};

protected override NonCryptographicHashAlgorithm CreateInstance() => new XxHash64(Seed);
Expand Down

0 comments on commit 1c2501d

Please sign in to comment.