Gapotchenko.FX.Data.Integrity.Checksum.Crc32
2022.2.7
Prefix Reserved
See the version list below for details.
dotnet add package Gapotchenko.FX.Data.Integrity.Checksum.Crc32 --version 2022.2.7
NuGet\Install-Package Gapotchenko.FX.Data.Integrity.Checksum.Crc32 -Version 2022.2.7
<PackageReference Include="Gapotchenko.FX.Data.Integrity.Checksum.Crc32" Version="2022.2.7" />
paket add Gapotchenko.FX.Data.Integrity.Checksum.Crc32 --version 2022.2.7
#r "nuget: Gapotchenko.FX.Data.Integrity.Checksum.Crc32, 2022.2.7"
// Install Gapotchenko.FX.Data.Integrity.Checksum.Crc32 as a Cake Addin #addin nuget:?package=Gapotchenko.FX.Data.Integrity.Checksum.Crc32&version=2022.2.7 // Install Gapotchenko.FX.Data.Integrity.Checksum.Crc32 as a Cake Tool #tool nuget:?package=Gapotchenko.FX.Data.Integrity.Checksum.Crc32&version=2022.2.7
Overview
The module provides the implementation of checksum algorithms belonging to CRC-32 family.
Quick Start
Use the following code to calculate a CRC-32 checksum for the specified data, be it System.Byte[]
, System.ReadOnlySpan<Byte>
or System.IO.Stream
:
using Gapotchenko.FX.Data.Integrity.Checksum;
var checksum = Crc32.Standard.ComputeChecksum(data);
If you need to calculate a CRC-32 checksum iteratively then the following approach becomes handy:
var iterator = Crc32.Standard.CreateIterator();
iterator.ComputeBlock(...); // block 1
// ...
iterator.ComputeBlock(...); // block N
// Compute the final checksum:
var checksum = iterator.ComputeFinal();
Available CRC-32 Algorithms
CRC-32 family of cyclic redundancy checks consists of several attested checksum algorithms with predefined parameters:
Algorithm | Aliases | Gapotchenko.FX Implementation | Parameters: poly | init | refin | refout | xorout | check |
---|---|---|---|---|---|---|---|---|
CRC-32 (standard, recommended) | CRC-32/ISO-HDLC, CRC-32/ADCCP, CRC-32/V-42, CRC-32/XZ, PKZIP | Crc32.Standard |
0x04c11db7 | 0xffffffff | true | true | 0xffffffff | 0xcbf43926 |
CRC-32C | CRC-32/BASE91-C, CRC-32/CASTAGNOLI, CRC-32/INTERLAKEN, CRC-32/ISCSI | Crc32.Attested.C |
0x1edc6f41 | 0xffffffff | true | true | 0xffffffff | 0xe3069283 |
CRC-32Q | CRC-32/AIXM | Crc32.Attested.Q |
0x814141ab | 0x00000000 | false | false | 0x00000000 | 0x3010bf7f |
CRC-32/AUTOSAR | Crc32.Attested.Autosar |
0xf4acfb13 | 0xffffffff | true | true | 0xffffffff | 0x1697d06a | |
CRC-32/POSIX | CRC-32/CKSUM, CKSUM | Crc32.Attested.Posix |
0x04c11db7 | 0x00000000 | false | false | 0xffffffff | 0x765e7680 |
CRC-32/BZIP2 | CRC-32/DECT-B, CRC-32/AAL5, B-CRC-32 | Crc32.Attested.BZip2 |
0x04c11db7 | 0xffffffff | false | false | 0xffffffff | 0xfc891918 |
CRC-32/MEF | Crc32.Attested.Mef |
0x741b8cd7 | 0xffffffff | true | true | 0x00000000 | 0xd2c22f51 | |
CRC-32/MPEG-2 | Crc32.Attested.Mpeg2 |
0x04c11db7 | 0xffffffff | false | false | 0x00000000 | 0x0376e6e7 |
The check
parameter shows what checksum value an algorithm should produce for "123456789"
input string interpreted as an ASCII data:
// Get the byte representation of the ASCII string.
var data = Encoding.ASCII.GetBytes("123456789");
// Compute the checksum.
var checksum = Crc32.Standard.ComputeChecksum(data);
// Print out the result ("Checksum = 0xcbf43926" for standard CRC-32).
Console.WriteLine("Checksum = 0x{0:x}", checksum);
Recommended CRC-32 Algorithm
Among all other posibilities, it is recommended to use the standard CRC-32 algorithm which comes under CRC-32, CRC-32/ISO-HDLC, CRC-32/ADCCP, CRC-32/V-42, CRC-32/XZ, PKZIP aliases and is available via Crc32.Standard
property.
All other predefined algorithms are available via the corresponding properties of Crc32.Attested
class.
Custom CRC-32 Algorithms
Once in a while, you may encounter a custom CRC-32 algorithm that is neither widely known nor characterized. In that case, you can instantiate a custom checksum algorithm with the desired parameters by hand:
var checksumAlgorithm = new CustomCrc32(poly, init, refin, refout, xorout);
If you want to formalize a custom algorithm even further, you may opt-in to creating a separate class for it with a convenient accessor property:
/// <summary>
/// Defines a custom CRC-32 algorithm.
/// </summary>
sealed class FooCrc32 : CustomCrc32
{
FooCrc32() :
base(poly, init, refin, refout, xorout)
{
}
public static FooCrc32 Instance { get; } = new FooCrc32();
}
That will allow you to use the algorithm effortlessly from several places in the codebase later:
var checksum = FooCrc32.Instance.ComputeChecksum(...);
Commonly Used Types
- Gapotchenko.FX.Data.Integrity.Checksum.Crc32
Other Modules
Let's continue with a look at some other modules provided by Gapotchenko.FX:
- Gapotchenko.FX
- Gapotchenko.FX.AppModel.Information
- Gapotchenko.FX.Collections
- Gapotchenko.FX.Console
- Gapotchenko.FX.Data
- Gapotchenko.FX.Diagnostics
- Gapotchenko.FX.IO
- Gapotchenko.FX.Linq
- Gapotchenko.FX.Math
- Gapotchenko.FX.Memory
- Gapotchenko.FX.Security.Cryptography
- Gapotchenko.FX.Text
- Gapotchenko.FX.Threading
Or look at the full list of modules.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 is compatible. netcoreapp2.1 is compatible. netcoreapp2.2 was computed. netcoreapp3.0 is compatible. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net46 is compatible. net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 is compatible. net472 is compatible. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETCoreApp 2.0
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2022.2.7)
- Gapotchenko.FX.Numerics (>= 2022.2.7)
-
.NETCoreApp 2.1
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2022.2.7)
- Gapotchenko.FX.Numerics (>= 2022.2.7)
-
.NETCoreApp 3.0
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2022.2.7)
- Gapotchenko.FX.Numerics (>= 2022.2.7)
-
.NETFramework 4.6
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2022.2.7)
- Gapotchenko.FX.Numerics (>= 2022.2.7)
- System.ValueTuple (>= 4.5.0)
-
.NETFramework 4.7.1
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2022.2.7)
- Gapotchenko.FX.Numerics (>= 2022.2.7)
-
.NETFramework 4.7.2
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2022.2.7)
- Gapotchenko.FX.Numerics (>= 2022.2.7)
-
.NETStandard 2.0
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2022.2.7)
- Gapotchenko.FX.Numerics (>= 2022.2.7)
-
.NETStandard 2.1
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2022.2.7)
- Gapotchenko.FX.Numerics (>= 2022.2.7)
-
net5.0
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2022.2.7)
- Gapotchenko.FX.Numerics (>= 2022.2.7)
-
net6.0
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2022.2.7)
- Gapotchenko.FX.Numerics (>= 2022.2.7)
-
net7.0
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2022.2.7)
- Gapotchenko.FX.Numerics (>= 2022.2.7)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.