Skip to content

Commit d97996f

Browse files
committed
fix: CRC32 X86 doesn't process remaining data
1 parent 67d1775 commit d97996f

File tree

4 files changed

+13
-15
lines changed

4 files changed

+13
-15
lines changed

CryptoBase/Digests/CRC32/Crc32X86.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,11 @@ public unsafe void Update(ReadOnlySpan<byte> source)
5050
fixed (byte* p = source)
5151
{
5252
_state = Update(p, source.Length, _state);
53+
source = source[^(source.Length % 0x10)..];
5354
}
5455
}
55-
else
56-
{
57-
_state = ~Crc32Table.Crc32.Append(~_state, source);
58-
}
56+
57+
_state = ~Crc32Table.Crc32.Append(~_state, source);
5958
}
6059

6160
public void GetHash(Span<byte> destination)

CryptoBase/Digests/CRC32C/Crc32CX86.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,18 +53,17 @@ public unsafe void Update(ReadOnlySpan<byte> source)
5353
fixed (byte* p = source)
5454
{
5555
_state = Update(p, source.Length, _state);
56+
source = source[^(source.Length % 0x10)..];
5657
}
5758
}
59+
60+
if (Sse42.IsSupported)
61+
{
62+
UpdateSse42(source);
63+
}
5864
else
5965
{
60-
if (Sse42.IsSupported)
61-
{
62-
UpdateSse42(source);
63-
}
64-
else
65-
{
66-
_state = ~Crc32Table.Crc32C.Append(~_state, source);
67-
}
66+
_state = ~Crc32Table.Crc32C.Append(~_state, source);
6867
}
6968
}
7069

UnitTest/CRC32Test.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ private static void TestC(IHash hash, string message, string expected)
5656
[DataRow(@"12345678901234567890123456789012345678901234567890123456789012345678901234567890", @"7ca94a72")]
5757
[DataRow(@"123456789", @"cbf43926")]
5858
[DataRow(@"The quick brown fox jumps over the lazy dog", @"414fa339")]
59-
[DataRow(@"e9ee3d0a4cc14560a54def3b5a34661eaff800cd6cb64b508c6570a4b4fbaee9c66406137d6640bcb73069c74e99fe5c70d769e7a50340158634d3ec32fad9f15b551e43c36d44fab418d4a2e09349edfce7a4f6547d4745aeb9c62a9e903c697d0fd3301d42497890d160be3301cc001e20ef15d9a2457ea52d312fbbea8ea05692c82743ee44aba3d235eb3bddcdb625f1a4177ae3417bb19fd5bc2e80ec10592599598f6046bca94c77ed61ebdd1084a78f5c8878482a9b583258efdf62f6f23a1fddb69f4574950632b4fd10413f1c53337b7aeb4a56b42695f6687a0782", @"48b84b16")]
59+
[DataRow(@"5c6f1913817f054beaa45c911b141120ad3822a5d1d27c38362b0b0498bc1e82d7806444f7d25b2ac8581626b6c4c37811c3e5a85e6007fc4dce60e9ab257349281db35eeef273ce326942deec8f9f046240e61072b32733e4be09e8753e53a2294b7bd7b3b1474fcd4bafa88ab0c8fc36ce4696ee093e4a3300064303430eff32d41657783a660fe72086f94db23b194b1d96f44283323a67e80e475c1afe08b910a1e2e5c242a5ed33c9a26135a66ecb766e514f20bd4a631d80f886408d7507238f5b505b2cc1df4092f4c400955de89dfc2136bad7e292ba6091c19c64d86cfa6870bb35af7930a730362b0c0deace27b46f48cdccd02231c1f22f8029", @"76472786")]
6060
public void CRC32(string message, string expected)
6161
{
6262
Test(new Crc32SF(), message, expected);
@@ -73,7 +73,7 @@ public void CRC32(string message, string expected)
7373
[DataRow(@"12345678901234567890123456789012345678901234567890123456789012345678901234567890", @"477a6781")]
7474
[DataRow(@"123456789", @"e3069283")]
7575
[DataRow(@"The quick brown fox jumps over the lazy dog", @"22620404")]
76-
[DataRow(@"e9ee3d0a4cc14560a54def3b5a34661eaff800cd6cb64b508c6570a4b4fbaee9c66406137d6640bcb73069c74e99fe5c70d769e7a50340158634d3ec32fad9f15b551e43c36d44fab418d4a2e09349edfce7a4f6547d4745aeb9c62a9e903c697d0fd3301d42497890d160be3301cc001e20ef15d9a2457ea52d312fbbea8ea05692c82743ee44aba3d235eb3bddcdb625f1a4177ae3417bb19fd5bc2e80ec10592599598f6046bca94c77ed61ebdd1084a78f5c8878482a9b583258efdf62f6f23a1fddb69f4574950632b4fd10413f1c53337b7aeb4a56b42695f6687a0782", @"c9c156ee")]
76+
[DataRow(@"5c6f1913817f054beaa45c911b141120ad3822a5d1d27c38362b0b0498bc1e82d7806444f7d25b2ac8581626b6c4c37811c3e5a85e6007fc4dce60e9ab257349281db35eeef273ce326942deec8f9f046240e61072b32733e4be09e8753e53a2294b7bd7b3b1474fcd4bafa88ab0c8fc36ce4696ee093e4a3300064303430eff32d41657783a660fe72086f94db23b194b1d96f44283323a67e80e475c1afe08b910a1e2e5c242a5ed33c9a26135a66ecb766e514f20bd4a631d80f886408d7507238f5b505b2cc1df4092f4c400955de89dfc2136bad7e292ba6091c19c64d86cfa6870bb35af7930a730362b0c0deace27b46f48cdccd02231c1f22f8029", @"83c1318e")]
7777
public void CRC32C(string message, string expected)
7878
{
7979
TestC(new Crc32CSF(), message, expected);

common.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<PropertyGroup>
33
<TargetFramework>net5.0</TargetFramework>
44
<LangVersion>latest</LangVersion>
5-
<Version>1.5.0</Version>
5+
<Version>1.5.1</Version>
66
<Nullable>enable</Nullable>
77
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
88
<Authors>HMBSbige</Authors>

0 commit comments

Comments
 (0)