mirror of
https://github.com/aaru-dps/AaruBenchmark.git
synced 2025-12-16 19:24:36 +00:00
General refactor and cleanup.
This commit is contained in:
@@ -1,116 +1,116 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
<SchemaVersion>2.0</SchemaVersion>
|
<SchemaVersion>2.0</SchemaVersion>
|
||||||
<ProjectGuid>{CC48B324-A532-4A45-87A6-6F91F7141E8D}</ProjectGuid>
|
<ProjectGuid>{CC48B324-A532-4A45-87A6-6F91F7141E8D}</ProjectGuid>
|
||||||
<OutputType>Library</OutputType>
|
<OutputType>Library</OutputType>
|
||||||
<RootNamespace>Aaru.Checksums</RootNamespace>
|
<RootNamespace>Aaru.Checksums</RootNamespace>
|
||||||
<AssemblyName>Aaru6.Checksums</AssemblyName>
|
<AssemblyName>Aaru6.Checksums</AssemblyName>
|
||||||
<ReleaseVersion>$(Version)</ReleaseVersion>
|
<ReleaseVersion>$(Version)</ReleaseVersion>
|
||||||
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
|
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
|
||||||
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
|
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
|
||||||
<Version>6.0.0-alpha6</Version>
|
<Version>6.0.0-alpha6</Version>
|
||||||
<Company>Claunia.com</Company>
|
<Company>Claunia.com</Company>
|
||||||
<Copyright>Copyright © 2011-2024 Natalia Portillo</Copyright>
|
<Copyright>Copyright © 2011-2024 Natalia Portillo</Copyright>
|
||||||
<Product>Aaru Data Preservation Suite</Product>
|
<Product>Aaru Data Preservation Suite</Product>
|
||||||
<Title>Aaru6.Checksums</Title>
|
<Title>Aaru6.Checksums</Title>
|
||||||
<ApplicationVersion>$(Version)</ApplicationVersion>
|
<ApplicationVersion>$(Version)</ApplicationVersion>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
<LangVersion>10</LangVersion>
|
<LangVersion>10</LangVersion>
|
||||||
<Description>C# implementation of CRC16, CRC32, CRC64, Fletcher, MD5, SHA1, SHA2 and SpamSum.</Description>
|
<Description>C# implementation of CRC16, CRC32, CRC64, Fletcher, MD5, SHA1, SHA2 and SpamSum.</Description>
|
||||||
<PackageProjectUrl>https://github.com/aaru-dps/</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/aaru-dps/</PackageProjectUrl>
|
||||||
<PackageLicenseExpression>LGPL-2.1-only</PackageLicenseExpression>
|
<PackageLicenseExpression>LGPL-2.1-only</PackageLicenseExpression>
|
||||||
<RepositoryUrl>https://github.com/aaru-dps/Aaru.Checksums</RepositoryUrl>
|
<RepositoryUrl>https://github.com/aaru-dps/Aaru.Checksums</RepositoryUrl>
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
<NeutralLanguage>en-US</NeutralLanguage>
|
<NeutralLanguage>en-US</NeutralLanguage>
|
||||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||||
<IncludeSymbols>true</IncludeSymbols>
|
<IncludeSymbols>true</IncludeSymbols>
|
||||||
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
|
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
|
||||||
<Authors>Natalia Portillo <claunia@claunia.com></Authors>
|
<Authors>Natalia Portillo <claunia@claunia.com></Authors>
|
||||||
<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
|
<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<Optimize>false</Optimize>
|
<Optimize>false</Optimize>
|
||||||
<OutputPath>bin\Debug</OutputPath>
|
<OutputPath>bin\Debug</OutputPath>
|
||||||
<DefineConstants>DEBUG;</DefineConstants>
|
<DefineConstants>DEBUG;</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<ConsolePause>false</ConsolePause>
|
<ConsolePause>false</ConsolePause>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
<Optimize>true</Optimize>
|
<Optimize>true</Optimize>
|
||||||
<OutputPath>bin\Release</OutputPath>
|
<OutputPath>bin\Release</OutputPath>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<ConsolePause>false</ConsolePause>
|
<ConsolePause>false</ConsolePause>
|
||||||
<PublishReadyToRun>true</PublishReadyToRun>
|
<PublishReadyToRun>true</PublishReadyToRun>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="System"/>
|
<Reference Include="System"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Adler32\neon.cs"/>
|
<Compile Include="Adler32\neon.cs"/>
|
||||||
<Compile Include="Adler32\ssse3.cs"/>
|
<Compile Include="Adler32\ssse3.cs"/>
|
||||||
<Compile Include="CRC16CCITTContext.cs"/>
|
<Compile Include="CRC16CCITTContext.cs"/>
|
||||||
<Compile Include="CRC16IBMContext.cs"/>
|
<Compile Include="CRC16IBMContext.cs"/>
|
||||||
<Compile Include="CRC32\clmul.cs"/>
|
<Compile Include="CRC32\clmul.cs"/>
|
||||||
<Compile Include="CRC32\arm_simd.cs"/>
|
<Compile Include="CRC32\arm_simd.cs"/>
|
||||||
<Compile Include="CRC32\vmull.cs"/>
|
<Compile Include="CRC32\vmull.cs"/>
|
||||||
<Compile Include="CRC64\clmul.cs"/>
|
<Compile Include="CRC64\clmul.cs"/>
|
||||||
<Compile Include="Fletcher32\neon.cs"/>
|
<Compile Include="Fletcher32\neon.cs"/>
|
||||||
<Compile Include="Fletcher32\ssse3.cs"/>
|
<Compile Include="Fletcher32\ssse3.cs"/>
|
||||||
<Compile Include="Native.cs"/>
|
<Compile Include="Native.cs"/>
|
||||||
<Compile Include="SpamSumContext.cs"/>
|
<Compile Include="SpamSumContext.cs"/>
|
||||||
<Compile Include="Adler32Context.cs"/>
|
<Compile Include="Adler32Context.cs"/>
|
||||||
<Compile Include="CRC16Context.cs"/>
|
<Compile Include="CRC16Context.cs"/>
|
||||||
<Compile Include="CRC32Context.cs"/>
|
<Compile Include="CRC32Context.cs"/>
|
||||||
<Compile Include="CRC64Context.cs"/>
|
<Compile Include="CRC64Context.cs"/>
|
||||||
<Compile Include="FletcherContext.cs"/>
|
<Compile Include="FletcherContext.cs"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="..\LICENSE.LGPL">
|
<EmbeddedResource Include="..\LICENSE.LGPL">
|
||||||
<Link>LICENSE.LGPL</Link>
|
<Link>LICENSE.LGPL</Link>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Aaru.Checksums.Native" Version="6.0.0-alpha.10" />
|
<PackageReference Include="Aaru.Checksums.Native" Version="6.0.0-alpha.10"/>
|
||||||
<PackageReference Include="Aaru.CommonTypes" Version="5.3.2" />
|
<PackageReference Include="Aaru.CommonTypes" Version="5.3.2"/>
|
||||||
<PackageReference Include="Unclassified.NetRevisionTask" Version="0.4.3" PrivateAssets="all"/>
|
<PackageReference Include="Unclassified.NetRevisionTask" Version="0.4.3" PrivateAssets="all"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ProjectExtensions>
|
<ProjectExtensions>
|
||||||
<MonoDevelop>
|
<MonoDevelop>
|
||||||
<Properties>
|
<Properties>
|
||||||
<Policies>
|
<Policies>
|
||||||
<StandardHeader IncludeInNewFiles="True" Text="/***************************************************************************
Aaru Data Preservation Suite
----------------------------------------------------------------------------
 
Filename : ${FileName}
Author(s) : ${AuthorName} <${AuthorEmail}>

Component : Component
 
--[ Description ] ----------------------------------------------------------
 
 Description
 
--[ License ] --------------------------------------------------------------
 
 This library is free software; you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as
 published by the Free Software Foundation; either version 2.1 of the
 License, or (at your option) any later version.

 This library is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public
 License along with this library; if not, see <http://www.gnu.org/licenses/>.

----------------------------------------------------------------------------
Copyright © 2011-${Year} ${CopyrightHolder}
****************************************************************************/"/>
|
<StandardHeader IncludeInNewFiles="True" Text="/***************************************************************************
Aaru Data Preservation Suite
----------------------------------------------------------------------------
 
Filename : ${FileName}
Author(s) : ${AuthorName} <${AuthorEmail}>

Component : Component
 
--[ Description ] ----------------------------------------------------------
 
 Description
 
--[ License ] --------------------------------------------------------------
 
 This library is free software; you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as
 published by the Free Software Foundation; either version 2.1 of the
 License, or (at your option) any later version.

 This library is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public
 License along with this library; if not, see <http://www.gnu.org/licenses/>.

----------------------------------------------------------------------------
Copyright © 2011-${Year} ${CopyrightHolder}
****************************************************************************/"/>
|
||||||
<TextStylePolicy FileWidth="120" TabWidth="4" IndentWidth="4" RemoveTrailingWhitespace="True" NoTabsAfterNonTabs="False" EolMarker="Native" TabsToSpaces="True" scope="text/x-csharp"/>
|
<TextStylePolicy FileWidth="120" TabWidth="4" IndentWidth="4" RemoveTrailingWhitespace="True" NoTabsAfterNonTabs="False" EolMarker="Native" TabsToSpaces="True" scope="text/x-csharp"/>
|
||||||
<CSharpFormattingPolicy IndentBlock="True" IndentBraces="False" IndentSwitchSection="True" IndentSwitchCaseSection="True" LabelPositioning="OneLess" NewLinesForBracesInTypes="True" NewLinesForBracesInMethods="True" NewLinesForBracesInProperties="True" NewLinesForBracesInAccessors="True" NewLinesForBracesInAnonymousMethods="True" NewLinesForBracesInControlBlocks="True" NewLinesForBracesInAnonymousTypes="True" NewLinesForBracesInObjectCollectionArrayInitializers="True" NewLinesForBracesInLambdaExpressionBody="True" NewLineForElse="True" NewLineForCatch="True" NewLineForFinally="True" NewLineForMembersInObjectInit="True" NewLineForMembersInAnonymousTypes="True" NewLineForClausesInQuery="True" SpacingAfterMethodDeclarationName="False" SpaceWithinMethodDeclarationParenthesis="False" SpaceBetweenEmptyMethodDeclarationParentheses="False" SpaceAfterMethodCallName="False" SpaceWithinMethodCallParentheses="False" SpaceBetweenEmptyMethodCallParentheses="False" SpaceWithinExpressionParentheses="False" SpaceWithinCastParentheses="False" SpaceWithinOtherParentheses="False" SpaceAfterCast="False" SpacesIgnoreAroundVariableDeclaration="False" SpaceBeforeOpenSquareBracket="False" SpaceBetweenEmptySquareBrackets="False" SpaceWithinSquareBrackets="False" SpaceAfterColonInBaseTypeDeclaration="True" SpaceAfterComma="True" SpaceAfterDot="False" SpaceAfterSemicolonsInForStatement="True" SpaceBeforeColonInBaseTypeDeclaration="True" SpaceBeforeComma="False" SpaceBeforeDot="False" SpaceBeforeSemicolonsInForStatement="False" SpacingAroundBinaryOperator="Single" WrappingPreserveSingleLine="True" WrappingKeepStatementsOnSingleLine="True" PlaceSystemDirectiveFirst="True" SpaceAfterControlFlowStatementKeyword="False" scope="text/x-csharp"/>
|
<CSharpFormattingPolicy IndentBlock="True" IndentBraces="False" IndentSwitchSection="True" IndentSwitchCaseSection="True" LabelPositioning="OneLess" NewLinesForBracesInTypes="True" NewLinesForBracesInMethods="True" NewLinesForBracesInProperties="True" NewLinesForBracesInAccessors="True" NewLinesForBracesInAnonymousMethods="True" NewLinesForBracesInControlBlocks="True" NewLinesForBracesInAnonymousTypes="True" NewLinesForBracesInObjectCollectionArrayInitializers="True" NewLinesForBracesInLambdaExpressionBody="True" NewLineForElse="True" NewLineForCatch="True" NewLineForFinally="True" NewLineForMembersInObjectInit="True" NewLineForMembersInAnonymousTypes="True" NewLineForClausesInQuery="True" SpacingAfterMethodDeclarationName="False" SpaceWithinMethodDeclarationParenthesis="False" SpaceBetweenEmptyMethodDeclarationParentheses="False" SpaceAfterMethodCallName="False" SpaceWithinMethodCallParentheses="False" SpaceBetweenEmptyMethodCallParentheses="False" SpaceWithinExpressionParentheses="False" SpaceWithinCastParentheses="False" SpaceWithinOtherParentheses="False" SpaceAfterCast="False" SpacesIgnoreAroundVariableDeclaration="False" SpaceBeforeOpenSquareBracket="False" SpaceBetweenEmptySquareBrackets="False" SpaceWithinSquareBrackets="False" SpaceAfterColonInBaseTypeDeclaration="True" SpaceAfterComma="True" SpaceAfterDot="False" SpaceAfterSemicolonsInForStatement="True" SpaceBeforeColonInBaseTypeDeclaration="True" SpaceBeforeComma="False" SpaceBeforeDot="False" SpaceBeforeSemicolonsInForStatement="False" SpacingAroundBinaryOperator="Single" WrappingPreserveSingleLine="True" WrappingKeepStatementsOnSingleLine="True" PlaceSystemDirectiveFirst="True" SpaceAfterControlFlowStatementKeyword="False" scope="text/x-csharp"/>
|
||||||
</Policies>
|
</Policies>
|
||||||
</Properties>
|
</Properties>
|
||||||
</MonoDevelop>
|
</MonoDevelop>
|
||||||
</ProjectExtensions>
|
</ProjectExtensions>
|
||||||
<PropertyGroup Condition="$(TargetFramework.StartsWith('net4')) and '$(OS)' == 'Unix'">
|
<PropertyGroup Condition="$(TargetFramework.StartsWith('net4')) and '$(OS)' == 'Unix'">
|
||||||
<!-- When compiling .NET SDK 2.0 projects targeting .NET 4.x on Mono using 'dotnet build' you -->
|
<!-- When compiling .NET SDK 2.0 projects targeting .NET 4.x on Mono using 'dotnet build' you -->
|
||||||
<!-- have to teach MSBuild where the Mono copy of the reference asssemblies is -->
|
<!-- have to teach MSBuild where the Mono copy of the reference asssemblies is -->
|
||||||
<!-- Look in the standard install locations -->
|
<!-- Look in the standard install locations -->
|
||||||
<BaseFrameworkPathOverrideForMono Condition="'$(BaseFrameworkPathOverrideForMono)' == '' AND EXISTS('/Library/Frameworks/Mono.framework/Versions/Current/lib/mono')">/Library/Frameworks/Mono.framework/Versions/Current/lib/mono</BaseFrameworkPathOverrideForMono>
|
<BaseFrameworkPathOverrideForMono Condition="'$(BaseFrameworkPathOverrideForMono)' == '' AND EXISTS('/Library/Frameworks/Mono.framework/Versions/Current/lib/mono')">/Library/Frameworks/Mono.framework/Versions/Current/lib/mono</BaseFrameworkPathOverrideForMono>
|
||||||
<BaseFrameworkPathOverrideForMono Condition="'$(BaseFrameworkPathOverrideForMono)' == '' AND EXISTS('/usr/lib/mono')">/usr/lib/mono</BaseFrameworkPathOverrideForMono>
|
<BaseFrameworkPathOverrideForMono Condition="'$(BaseFrameworkPathOverrideForMono)' == '' AND EXISTS('/usr/lib/mono')">/usr/lib/mono</BaseFrameworkPathOverrideForMono>
|
||||||
<BaseFrameworkPathOverrideForMono Condition="'$(BaseFrameworkPathOverrideForMono)' == '' AND EXISTS('/usr/local/lib/mono')">/usr/local/lib/mono</BaseFrameworkPathOverrideForMono>
|
<BaseFrameworkPathOverrideForMono Condition="'$(BaseFrameworkPathOverrideForMono)' == '' AND EXISTS('/usr/local/lib/mono')">/usr/local/lib/mono</BaseFrameworkPathOverrideForMono>
|
||||||
<!-- If we found Mono reference assemblies, then use them -->
|
<!-- If we found Mono reference assemblies, then use them -->
|
||||||
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net40'">$(BaseFrameworkPathOverrideForMono)/4.0-api</FrameworkPathOverride>
|
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net40'">$(BaseFrameworkPathOverrideForMono)/4.0-api</FrameworkPathOverride>
|
||||||
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net45'">$(BaseFrameworkPathOverrideForMono)/4.5-api</FrameworkPathOverride>
|
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net45'">$(BaseFrameworkPathOverrideForMono)/4.5-api</FrameworkPathOverride>
|
||||||
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net451'">$(BaseFrameworkPathOverrideForMono)/4.5.1-api</FrameworkPathOverride>
|
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net451'">$(BaseFrameworkPathOverrideForMono)/4.5.1-api</FrameworkPathOverride>
|
||||||
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net452'">$(BaseFrameworkPathOverrideForMono)/4.5.2-api</FrameworkPathOverride>
|
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net452'">$(BaseFrameworkPathOverrideForMono)/4.5.2-api</FrameworkPathOverride>
|
||||||
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net46'">$(BaseFrameworkPathOverrideForMono)/4.6-api</FrameworkPathOverride>
|
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net46'">$(BaseFrameworkPathOverrideForMono)/4.6-api</FrameworkPathOverride>
|
||||||
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net461'">$(BaseFrameworkPathOverrideForMono)/4.6.1-api</FrameworkPathOverride>
|
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net461'">$(BaseFrameworkPathOverrideForMono)/4.6.1-api</FrameworkPathOverride>
|
||||||
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net462'">$(BaseFrameworkPathOverrideForMono)/4.6.2-api</FrameworkPathOverride>
|
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net462'">$(BaseFrameworkPathOverrideForMono)/4.6.2-api</FrameworkPathOverride>
|
||||||
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net47'">$(BaseFrameworkPathOverrideForMono)/4.7-api</FrameworkPathOverride>
|
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net47'">$(BaseFrameworkPathOverrideForMono)/4.7-api</FrameworkPathOverride>
|
||||||
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net471'">$(BaseFrameworkPathOverrideForMono)/4.7.1-api</FrameworkPathOverride>
|
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net471'">$(BaseFrameworkPathOverrideForMono)/4.7.1-api</FrameworkPathOverride>
|
||||||
<EnableFrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != ''">true</EnableFrameworkPathOverride>
|
<EnableFrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != ''">true</EnableFrameworkPathOverride>
|
||||||
<!-- Add the Facades directory. Not sure how else to do this. Necessary at least for .NET 4.5 -->
|
<!-- Add the Facades directory. Not sure how else to do this. Necessary at least for .NET 4.5 -->
|
||||||
<AssemblySearchPaths Condition="'$(BaseFrameworkPathOverrideForMono)' != ''">$(FrameworkPathOverride)/Facades;$(AssemblySearchPaths)</AssemblySearchPaths>
|
<AssemblySearchPaths Condition="'$(BaseFrameworkPathOverrideForMono)' != ''">$(FrameworkPathOverride)/Facades;$(AssemblySearchPaths)</AssemblySearchPaths>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -73,8 +73,7 @@ static class neon
|
|||||||
{
|
{
|
||||||
uint n = Adler32Context.NMAX / BLOCK_SIZE; /* The NMAX constraint. */
|
uint n = Adler32Context.NMAX / BLOCK_SIZE; /* The NMAX constraint. */
|
||||||
|
|
||||||
if(n > blocks)
|
if(n > blocks) n = blocks;
|
||||||
n = blocks;
|
|
||||||
|
|
||||||
blocks -= n;
|
blocks -= n;
|
||||||
/*
|
/*
|
||||||
@@ -93,21 +92,41 @@ static class neon
|
|||||||
/*
|
/*
|
||||||
* Load 32 input bytes.
|
* Load 32 input bytes.
|
||||||
*/
|
*/
|
||||||
var bytes1 = Vector128.Create(buf[bufPos], buf[bufPos + 1], buf[bufPos + 2],
|
var bytes1 = Vector128.Create(buf[bufPos],
|
||||||
buf[bufPos + 3], buf[bufPos + 4], buf[bufPos + 5],
|
buf[bufPos + 1],
|
||||||
buf[bufPos + 6], buf[bufPos + 7], buf[bufPos + 8],
|
buf[bufPos + 2],
|
||||||
buf[bufPos + 9], buf[bufPos + 10], buf[bufPos + 11],
|
buf[bufPos + 3],
|
||||||
buf[bufPos + 12], buf[bufPos + 13], buf[bufPos + 14],
|
buf[bufPos + 4],
|
||||||
buf[bufPos + 15]);
|
buf[bufPos + 5],
|
||||||
|
buf[bufPos + 6],
|
||||||
|
buf[bufPos + 7],
|
||||||
|
buf[bufPos + 8],
|
||||||
|
buf[bufPos + 9],
|
||||||
|
buf[bufPos + 10],
|
||||||
|
buf[bufPos + 11],
|
||||||
|
buf[bufPos + 12],
|
||||||
|
buf[bufPos + 13],
|
||||||
|
buf[bufPos + 14],
|
||||||
|
buf[bufPos + 15]);
|
||||||
|
|
||||||
bufPos += 16;
|
bufPos += 16;
|
||||||
|
|
||||||
var bytes2 = Vector128.Create(buf[bufPos], buf[bufPos + 1], buf[bufPos + 2],
|
var bytes2 = Vector128.Create(buf[bufPos],
|
||||||
buf[bufPos + 3], buf[bufPos + 4], buf[bufPos + 5],
|
buf[bufPos + 1],
|
||||||
buf[bufPos + 6], buf[bufPos + 7], buf[bufPos + 8],
|
buf[bufPos + 2],
|
||||||
buf[bufPos + 9], buf[bufPos + 10], buf[bufPos + 11],
|
buf[bufPos + 3],
|
||||||
buf[bufPos + 12], buf[bufPos + 13], buf[bufPos + 14],
|
buf[bufPos + 4],
|
||||||
buf[bufPos + 15]);
|
buf[bufPos + 5],
|
||||||
|
buf[bufPos + 6],
|
||||||
|
buf[bufPos + 7],
|
||||||
|
buf[bufPos + 8],
|
||||||
|
buf[bufPos + 9],
|
||||||
|
buf[bufPos + 10],
|
||||||
|
buf[bufPos + 11],
|
||||||
|
buf[bufPos + 12],
|
||||||
|
buf[bufPos + 13],
|
||||||
|
buf[bufPos + 14],
|
||||||
|
buf[bufPos + 15]);
|
||||||
|
|
||||||
bufPos += 16;
|
bufPos += 16;
|
||||||
/*
|
/*
|
||||||
@@ -118,11 +137,11 @@ static class neon
|
|||||||
/*
|
/*
|
||||||
* Horizontally add the bytes for s1.
|
* Horizontally add the bytes for s1.
|
||||||
*/
|
*/
|
||||||
v_s1 =
|
v_s1 = AdvSimd.AddPairwiseWideningAndAdd(v_s1,
|
||||||
AdvSimd.AddPairwiseWideningAndAdd(v_s1,
|
AdvSimd
|
||||||
AdvSimd.
|
.AddPairwiseWideningAndAdd(AdvSimd
|
||||||
AddPairwiseWideningAndAdd(AdvSimd.AddPairwiseWidening(bytes1),
|
.AddPairwiseWidening(bytes1),
|
||||||
bytes2));
|
bytes2));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Vertically add the bytes for s2.
|
* Vertically add the bytes for s2.
|
||||||
@@ -138,28 +157,36 @@ static class neon
|
|||||||
/*
|
/*
|
||||||
* Multiply-add bytes by [ 32, 31, 30, ... ] for s2.
|
* Multiply-add bytes by [ 32, 31, 30, ... ] for s2.
|
||||||
*/
|
*/
|
||||||
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2, v_column_sum_1.GetLower(),
|
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2,
|
||||||
|
v_column_sum_1.GetLower(),
|
||||||
Vector64.Create((ushort)32, 31, 30, 29));
|
Vector64.Create((ushort)32, 31, 30, 29));
|
||||||
|
|
||||||
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2, v_column_sum_1.GetUpper(),
|
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2,
|
||||||
|
v_column_sum_1.GetUpper(),
|
||||||
Vector64.Create((ushort)28, 27, 26, 25));
|
Vector64.Create((ushort)28, 27, 26, 25));
|
||||||
|
|
||||||
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2, v_column_sum_2.GetLower(),
|
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2,
|
||||||
|
v_column_sum_2.GetLower(),
|
||||||
Vector64.Create((ushort)24, 23, 22, 21));
|
Vector64.Create((ushort)24, 23, 22, 21));
|
||||||
|
|
||||||
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2, v_column_sum_2.GetUpper(),
|
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2,
|
||||||
|
v_column_sum_2.GetUpper(),
|
||||||
Vector64.Create((ushort)20, 19, 18, 17));
|
Vector64.Create((ushort)20, 19, 18, 17));
|
||||||
|
|
||||||
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2, v_column_sum_3.GetLower(),
|
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2,
|
||||||
|
v_column_sum_3.GetLower(),
|
||||||
Vector64.Create((ushort)16, 15, 14, 13));
|
Vector64.Create((ushort)16, 15, 14, 13));
|
||||||
|
|
||||||
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2, v_column_sum_3.GetUpper(),
|
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2,
|
||||||
|
v_column_sum_3.GetUpper(),
|
||||||
Vector64.Create((ushort)12, 11, 10, 9));
|
Vector64.Create((ushort)12, 11, 10, 9));
|
||||||
|
|
||||||
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2, v_column_sum_4.GetLower(),
|
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2,
|
||||||
|
v_column_sum_4.GetLower(),
|
||||||
Vector64.Create((ushort)8, 7, 6, 5));
|
Vector64.Create((ushort)8, 7, 6, 5));
|
||||||
|
|
||||||
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2, v_column_sum_4.GetUpper(),
|
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2,
|
||||||
|
v_column_sum_4.GetUpper(),
|
||||||
Vector64.Create((ushort)4, 3, 2, 1));
|
Vector64.Create((ushort)4, 3, 2, 1));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -203,11 +230,9 @@ static class neon
|
|||||||
len -= 16;
|
len -= 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(len-- != 0)
|
while(len-- != 0) s2 += s1 += buf[bufPos++];
|
||||||
s2 += s1 += buf[bufPos++];
|
|
||||||
|
|
||||||
if(s1 >= Adler32Context.ADLER_MODULE)
|
if(s1 >= Adler32Context.ADLER_MODULE) s1 -= Adler32Context.ADLER_MODULE;
|
||||||
s1 -= Adler32Context.ADLER_MODULE;
|
|
||||||
|
|
||||||
s2 %= Adler32Context.ADLER_MODULE;
|
s2 %= Adler32Context.ADLER_MODULE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,13 +70,12 @@ static class ssse3
|
|||||||
{
|
{
|
||||||
uint n = Adler32Context.NMAX / BLOCK_SIZE; /* The NMAX constraint. */
|
uint n = Adler32Context.NMAX / BLOCK_SIZE; /* The NMAX constraint. */
|
||||||
|
|
||||||
if(n > blocks)
|
if(n > blocks) n = blocks;
|
||||||
n = blocks;
|
|
||||||
|
|
||||||
blocks -= n;
|
blocks -= n;
|
||||||
|
|
||||||
Vector128<byte> tap1 = Vector128.Create(32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17).
|
Vector128<byte> tap1 = Vector128.Create(32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17)
|
||||||
AsByte();
|
.AsByte();
|
||||||
|
|
||||||
Vector128<byte> tap2 = Vector128.Create(16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1).AsByte();
|
Vector128<byte> tap2 = Vector128.Create(16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1).AsByte();
|
||||||
Vector128<byte> zero = Vector128.Create(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0).AsByte();
|
Vector128<byte> zero = Vector128.Create(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0).AsByte();
|
||||||
@@ -167,11 +166,9 @@ static class ssse3
|
|||||||
len -= 16;
|
len -= 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(len-- != 0)
|
while(len-- != 0) s2 += s1 += buf[bufPos++];
|
||||||
s2 += s1 += buf[bufPos++];
|
|
||||||
|
|
||||||
if(s1 >= Adler32Context.ADLER_MODULE)
|
if(s1 >= Adler32Context.ADLER_MODULE) s1 -= Adler32Context.ADLER_MODULE;
|
||||||
s1 -= Adler32Context.ADLER_MODULE;
|
|
||||||
|
|
||||||
s2 %= Adler32Context.ADLER_MODULE;
|
s2 %= Adler32Context.ADLER_MODULE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,63 +64,12 @@ public sealed class Adler32Context : IChecksum
|
|||||||
_sum1 = 1;
|
_sum1 = 1;
|
||||||
_sum2 = 0;
|
_sum2 = 0;
|
||||||
|
|
||||||
if(!Native.IsSupported)
|
if(!Native.IsSupported) return;
|
||||||
return;
|
|
||||||
|
|
||||||
_nativeContext = adler32_init();
|
_nativeContext = adler32_init();
|
||||||
_useNative = _nativeContext != IntPtr.Zero;
|
_useNative = _nativeContext != IntPtr.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IChecksum Members
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Updates the hash with data.</summary>
|
|
||||||
/// <param name="data">Data buffer.</param>
|
|
||||||
/// <param name="len">Length of buffer to hash.</param>
|
|
||||||
public void Update(byte[] data, uint len) => Step(ref _sum1, ref _sum2, data, len, _useNative, _nativeContext);
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Updates the hash with data.</summary>
|
|
||||||
/// <param name="data">Data buffer.</param>
|
|
||||||
public void Update(byte[] data) => Update(data, (uint)data.Length);
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Returns a byte array of the hash value.</summary>
|
|
||||||
public byte[] Final()
|
|
||||||
{
|
|
||||||
var finalSum = (uint)(_sum2 << 16 | _sum1);
|
|
||||||
|
|
||||||
if(!_useNative)
|
|
||||||
return BigEndianBitConverter.GetBytes(finalSum);
|
|
||||||
|
|
||||||
adler32_final(_nativeContext, ref finalSum);
|
|
||||||
adler32_free(_nativeContext);
|
|
||||||
|
|
||||||
return BigEndianBitConverter.GetBytes(finalSum);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Returns a hexadecimal representation of the hash value.</summary>
|
|
||||||
public string End()
|
|
||||||
{
|
|
||||||
var finalSum = (uint)(_sum2 << 16 | _sum1);
|
|
||||||
|
|
||||||
if(_useNative)
|
|
||||||
{
|
|
||||||
adler32_final(_nativeContext, ref finalSum);
|
|
||||||
adler32_free(_nativeContext);
|
|
||||||
}
|
|
||||||
|
|
||||||
var adlerOutput = new StringBuilder();
|
|
||||||
|
|
||||||
for(var i = 0; i < BigEndianBitConverter.GetBytes(finalSum).Length; i++)
|
|
||||||
adlerOutput.Append(BigEndianBitConverter.GetBytes(finalSum)[i].ToString("x2"));
|
|
||||||
|
|
||||||
return adlerOutput.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
||||||
static extern IntPtr adler32_init();
|
static extern IntPtr adler32_init();
|
||||||
|
|
||||||
@@ -167,13 +116,11 @@ public sealed class Adler32Context : IChecksum
|
|||||||
{
|
{
|
||||||
sum1 += data[dataOff];
|
sum1 += data[dataOff];
|
||||||
|
|
||||||
if(sum1 >= ADLER_MODULE)
|
if(sum1 >= ADLER_MODULE) sum1 -= ADLER_MODULE;
|
||||||
sum1 -= ADLER_MODULE;
|
|
||||||
|
|
||||||
sum2 += sum1;
|
sum2 += sum1;
|
||||||
|
|
||||||
if(sum2 >= ADLER_MODULE)
|
if(sum2 >= ADLER_MODULE) sum2 -= ADLER_MODULE;
|
||||||
sum2 -= ADLER_MODULE;
|
|
||||||
|
|
||||||
preSum1 = (ushort)(sum1 & 0xFFFF);
|
preSum1 = (ushort)(sum1 & 0xFFFF);
|
||||||
preSum2 = (ushort)(sum2 & 0xFFFF);
|
preSum2 = (ushort)(sum2 & 0xFFFF);
|
||||||
@@ -190,8 +137,7 @@ public sealed class Adler32Context : IChecksum
|
|||||||
sum2 += sum1;
|
sum2 += sum1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(sum1 >= ADLER_MODULE)
|
if(sum1 >= ADLER_MODULE) sum1 -= ADLER_MODULE;
|
||||||
sum1 -= ADLER_MODULE;
|
|
||||||
|
|
||||||
sum2 %= ADLER_MODULE; /* only added so many ADLER_MODULE's */
|
sum2 %= ADLER_MODULE; /* only added so many ADLER_MODULE's */
|
||||||
preSum1 = (ushort)(sum1 & 0xFFFF);
|
preSum1 = (ushort)(sum1 & 0xFFFF);
|
||||||
@@ -327,8 +273,7 @@ public sealed class Adler32Context : IChecksum
|
|||||||
{
|
{
|
||||||
nativeContext = adler32_init();
|
nativeContext = adler32_init();
|
||||||
|
|
||||||
if(nativeContext == IntPtr.Zero)
|
if(nativeContext == IntPtr.Zero) useNative = false;
|
||||||
useNative = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var fileStream = new FileStream(filename, FileMode.Open);
|
var fileStream = new FileStream(filename, FileMode.Open);
|
||||||
@@ -357,8 +302,7 @@ public sealed class Adler32Context : IChecksum
|
|||||||
|
|
||||||
var adlerOutput = new StringBuilder();
|
var adlerOutput = new StringBuilder();
|
||||||
|
|
||||||
foreach(byte h in hash)
|
foreach(byte h in hash) adlerOutput.Append(h.ToString("x2"));
|
||||||
adlerOutput.Append(h.ToString("x2"));
|
|
||||||
|
|
||||||
fileStream.Close();
|
fileStream.Close();
|
||||||
|
|
||||||
@@ -378,8 +322,7 @@ public sealed class Adler32Context : IChecksum
|
|||||||
{
|
{
|
||||||
nativeContext = adler32_init();
|
nativeContext = adler32_init();
|
||||||
|
|
||||||
if(nativeContext == IntPtr.Zero)
|
if(nativeContext == IntPtr.Zero) useNative = false;
|
||||||
useNative = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ushort localSum1 = 1;
|
ushort localSum1 = 1;
|
||||||
@@ -399,8 +342,7 @@ public sealed class Adler32Context : IChecksum
|
|||||||
|
|
||||||
var adlerOutput = new StringBuilder();
|
var adlerOutput = new StringBuilder();
|
||||||
|
|
||||||
foreach(byte h in hash)
|
foreach(byte h in hash) adlerOutput.Append(h.ToString("x2"));
|
||||||
adlerOutput.Append(h.ToString("x2"));
|
|
||||||
|
|
||||||
return adlerOutput.ToString();
|
return adlerOutput.ToString();
|
||||||
}
|
}
|
||||||
@@ -409,4 +351,53 @@ public sealed class Adler32Context : IChecksum
|
|||||||
/// <param name="data">Data buffer.</param>
|
/// <param name="data">Data buffer.</param>
|
||||||
/// <param name="hash">Byte array of the hash value.</param>
|
/// <param name="hash">Byte array of the hash value.</param>
|
||||||
public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash);
|
public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash);
|
||||||
|
|
||||||
|
#region IChecksum Members
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Updates the hash with data.</summary>
|
||||||
|
/// <param name="data">Data buffer.</param>
|
||||||
|
/// <param name="len">Length of buffer to hash.</param>
|
||||||
|
public void Update(byte[] data, uint len) => Step(ref _sum1, ref _sum2, data, len, _useNative, _nativeContext);
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Updates the hash with data.</summary>
|
||||||
|
/// <param name="data">Data buffer.</param>
|
||||||
|
public void Update(byte[] data) => Update(data, (uint)data.Length);
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Returns a byte array of the hash value.</summary>
|
||||||
|
public byte[] Final()
|
||||||
|
{
|
||||||
|
var finalSum = (uint)(_sum2 << 16 | _sum1);
|
||||||
|
|
||||||
|
if(!_useNative) return BigEndianBitConverter.GetBytes(finalSum);
|
||||||
|
|
||||||
|
adler32_final(_nativeContext, ref finalSum);
|
||||||
|
adler32_free(_nativeContext);
|
||||||
|
|
||||||
|
return BigEndianBitConverter.GetBytes(finalSum);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Returns a hexadecimal representation of the hash value.</summary>
|
||||||
|
public string End()
|
||||||
|
{
|
||||||
|
var finalSum = (uint)(_sum2 << 16 | _sum1);
|
||||||
|
|
||||||
|
if(_useNative)
|
||||||
|
{
|
||||||
|
adler32_final(_nativeContext, ref finalSum);
|
||||||
|
adler32_free(_nativeContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
var adlerOutput = new StringBuilder();
|
||||||
|
|
||||||
|
for(var i = 0; i < BigEndianBitConverter.GetBytes(finalSum).Length; i++)
|
||||||
|
adlerOutput.Append(BigEndianBitConverter.GetBytes(finalSum)[i].ToString("x2"));
|
||||||
|
|
||||||
|
return adlerOutput.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -46,203 +46,187 @@ public sealed class CRC16CCITTContext : Crc16Context
|
|||||||
{
|
{
|
||||||
new ushort[]
|
new ushort[]
|
||||||
{
|
{
|
||||||
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, 0x8108, 0x9129, 0xA14A, 0xB16B,
|
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C,
|
||||||
0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
|
0xD1AD, 0xE1CE, 0xF1EF, 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, 0x9339, 0x8318,
|
||||||
0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, 0x2462, 0x3443, 0x0420, 0x1401,
|
0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4,
|
||||||
0x64E6, 0x74C7, 0x44A4, 0x5485, 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
|
0x5485, 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, 0x3653, 0x2672, 0x1611, 0x0630,
|
||||||
0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, 0xB75B, 0xA77A, 0x9719, 0x8738,
|
0x76D7, 0x66F6, 0x5695, 0x46B4, 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, 0x48C4,
|
||||||
0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
|
0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969,
|
||||||
0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96,
|
0xA90A, 0xB92B, 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, 0xDBFD, 0xCBDC, 0xFBBF,
|
||||||
0x1A71, 0x0A50, 0x3A33, 0x2A12, 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
|
0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
|
||||||
0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD,
|
0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13,
|
||||||
0xAD2A, 0xBD0B, 0x8D68, 0x9D49, 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
|
0x2E32, 0x1E51, 0x0E70, 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, 0x9188, 0x81A9,
|
||||||
0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, 0x9188, 0x81A9, 0xB1CA, 0xA1EB,
|
0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046,
|
||||||
0xD10C, 0xC12D, 0xF14E, 0xE16F, 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
|
0x6067, 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, 0x02B1, 0x1290, 0x22F3, 0x32D2,
|
||||||
0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, 0x02B1, 0x1290, 0x22F3, 0x32D2,
|
0x4235, 0x5214, 0x6277, 0x7256, 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, 0x34E2,
|
||||||
0x4235, 0x5214, 0x6277, 0x7256, 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
|
0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E,
|
||||||
0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xA7DB, 0xB7FA, 0x8799, 0x97B8,
|
0xC71D, 0xD73C, 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, 0xD94C, 0xC96D, 0xF90E,
|
||||||
0xE75F, 0xF77E, 0xC71D, 0xD73C, 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
|
0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
|
||||||
0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, 0x5844, 0x4865, 0x7806, 0x6827,
|
0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1,
|
||||||
0x18C0, 0x08E1, 0x3882, 0x28A3, 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
|
0x1AD0, 0x2AB3, 0x3A92, 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, 0x7C26, 0x6C07,
|
||||||
0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D,
|
0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9,
|
||||||
0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
|
0x9FF8, 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
|
||||||
0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, 0x6E17, 0x7E36, 0x4E55, 0x5E74,
|
|
||||||
0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
|
|
||||||
},
|
},
|
||||||
new ushort[]
|
new ushort[]
|
||||||
{
|
{
|
||||||
0x0000, 0x3331, 0x6662, 0x5553, 0xCCC4, 0xFFF5, 0xAAA6, 0x9997, 0x89A9, 0xBA98, 0xEFCB, 0xDCFA,
|
0x0000, 0x3331, 0x6662, 0x5553, 0xCCC4, 0xFFF5, 0xAAA6, 0x9997, 0x89A9, 0xBA98, 0xEFCB, 0xDCFA, 0x456D,
|
||||||
0x456D, 0x765C, 0x230F, 0x103E, 0x0373, 0x3042, 0x6511, 0x5620, 0xCFB7, 0xFC86, 0xA9D5, 0x9AE4,
|
0x765C, 0x230F, 0x103E, 0x0373, 0x3042, 0x6511, 0x5620, 0xCFB7, 0xFC86, 0xA9D5, 0x9AE4, 0x8ADA, 0xB9EB,
|
||||||
0x8ADA, 0xB9EB, 0xECB8, 0xDF89, 0x461E, 0x752F, 0x207C, 0x134D, 0x06E6, 0x35D7, 0x6084, 0x53B5,
|
0xECB8, 0xDF89, 0x461E, 0x752F, 0x207C, 0x134D, 0x06E6, 0x35D7, 0x6084, 0x53B5, 0xCA22, 0xF913, 0xAC40,
|
||||||
0xCA22, 0xF913, 0xAC40, 0x9F71, 0x8F4F, 0xBC7E, 0xE92D, 0xDA1C, 0x438B, 0x70BA, 0x25E9, 0x16D8,
|
0x9F71, 0x8F4F, 0xBC7E, 0xE92D, 0xDA1C, 0x438B, 0x70BA, 0x25E9, 0x16D8, 0x0595, 0x36A4, 0x63F7, 0x50C6,
|
||||||
0x0595, 0x36A4, 0x63F7, 0x50C6, 0xC951, 0xFA60, 0xAF33, 0x9C02, 0x8C3C, 0xBF0D, 0xEA5E, 0xD96F,
|
0xC951, 0xFA60, 0xAF33, 0x9C02, 0x8C3C, 0xBF0D, 0xEA5E, 0xD96F, 0x40F8, 0x73C9, 0x269A, 0x15AB, 0x0DCC,
|
||||||
0x40F8, 0x73C9, 0x269A, 0x15AB, 0x0DCC, 0x3EFD, 0x6BAE, 0x589F, 0xC108, 0xF239, 0xA76A, 0x945B,
|
0x3EFD, 0x6BAE, 0x589F, 0xC108, 0xF239, 0xA76A, 0x945B, 0x8465, 0xB754, 0xE207, 0xD136, 0x48A1, 0x7B90,
|
||||||
0x8465, 0xB754, 0xE207, 0xD136, 0x48A1, 0x7B90, 0x2EC3, 0x1DF2, 0x0EBF, 0x3D8E, 0x68DD, 0x5BEC,
|
0x2EC3, 0x1DF2, 0x0EBF, 0x3D8E, 0x68DD, 0x5BEC, 0xC27B, 0xF14A, 0xA419, 0x9728, 0x8716, 0xB427, 0xE174,
|
||||||
0xC27B, 0xF14A, 0xA419, 0x9728, 0x8716, 0xB427, 0xE174, 0xD245, 0x4BD2, 0x78E3, 0x2DB0, 0x1E81,
|
0xD245, 0x4BD2, 0x78E3, 0x2DB0, 0x1E81, 0x0B2A, 0x381B, 0x6D48, 0x5E79, 0xC7EE, 0xF4DF, 0xA18C, 0x92BD,
|
||||||
0x0B2A, 0x381B, 0x6D48, 0x5E79, 0xC7EE, 0xF4DF, 0xA18C, 0x92BD, 0x8283, 0xB1B2, 0xE4E1, 0xD7D0,
|
0x8283, 0xB1B2, 0xE4E1, 0xD7D0, 0x4E47, 0x7D76, 0x2825, 0x1B14, 0x0859, 0x3B68, 0x6E3B, 0x5D0A, 0xC49D,
|
||||||
0x4E47, 0x7D76, 0x2825, 0x1B14, 0x0859, 0x3B68, 0x6E3B, 0x5D0A, 0xC49D, 0xF7AC, 0xA2FF, 0x91CE,
|
0xF7AC, 0xA2FF, 0x91CE, 0x81F0, 0xB2C1, 0xE792, 0xD4A3, 0x4D34, 0x7E05, 0x2B56, 0x1867, 0x1B98, 0x28A9,
|
||||||
0x81F0, 0xB2C1, 0xE792, 0xD4A3, 0x4D34, 0x7E05, 0x2B56, 0x1867, 0x1B98, 0x28A9, 0x7DFA, 0x4ECB,
|
0x7DFA, 0x4ECB, 0xD75C, 0xE46D, 0xB13E, 0x820F, 0x9231, 0xA100, 0xF453, 0xC762, 0x5EF5, 0x6DC4, 0x3897,
|
||||||
0xD75C, 0xE46D, 0xB13E, 0x820F, 0x9231, 0xA100, 0xF453, 0xC762, 0x5EF5, 0x6DC4, 0x3897, 0x0BA6,
|
0x0BA6, 0x18EB, 0x2BDA, 0x7E89, 0x4DB8, 0xD42F, 0xE71E, 0xB24D, 0x817C, 0x9142, 0xA273, 0xF720, 0xC411,
|
||||||
0x18EB, 0x2BDA, 0x7E89, 0x4DB8, 0xD42F, 0xE71E, 0xB24D, 0x817C, 0x9142, 0xA273, 0xF720, 0xC411,
|
0x5D86, 0x6EB7, 0x3BE4, 0x08D5, 0x1D7E, 0x2E4F, 0x7B1C, 0x482D, 0xD1BA, 0xE28B, 0xB7D8, 0x84E9, 0x94D7,
|
||||||
0x5D86, 0x6EB7, 0x3BE4, 0x08D5, 0x1D7E, 0x2E4F, 0x7B1C, 0x482D, 0xD1BA, 0xE28B, 0xB7D8, 0x84E9,
|
0xA7E6, 0xF2B5, 0xC184, 0x5813, 0x6B22, 0x3E71, 0x0D40, 0x1E0D, 0x2D3C, 0x786F, 0x4B5E, 0xD2C9, 0xE1F8,
|
||||||
0x94D7, 0xA7E6, 0xF2B5, 0xC184, 0x5813, 0x6B22, 0x3E71, 0x0D40, 0x1E0D, 0x2D3C, 0x786F, 0x4B5E,
|
0xB4AB, 0x879A, 0x97A4, 0xA495, 0xF1C6, 0xC2F7, 0x5B60, 0x6851, 0x3D02, 0x0E33, 0x1654, 0x2565, 0x7036,
|
||||||
0xD2C9, 0xE1F8, 0xB4AB, 0x879A, 0x97A4, 0xA495, 0xF1C6, 0xC2F7, 0x5B60, 0x6851, 0x3D02, 0x0E33,
|
0x4307, 0xDA90, 0xE9A1, 0xBCF2, 0x8FC3, 0x9FFD, 0xACCC, 0xF99F, 0xCAAE, 0x5339, 0x6008, 0x355B, 0x066A,
|
||||||
0x1654, 0x2565, 0x7036, 0x4307, 0xDA90, 0xE9A1, 0xBCF2, 0x8FC3, 0x9FFD, 0xACCC, 0xF99F, 0xCAAE,
|
0x1527, 0x2616, 0x7345, 0x4074, 0xD9E3, 0xEAD2, 0xBF81, 0x8CB0, 0x9C8E, 0xAFBF, 0xFAEC, 0xC9DD, 0x504A,
|
||||||
0x5339, 0x6008, 0x355B, 0x066A, 0x1527, 0x2616, 0x7345, 0x4074, 0xD9E3, 0xEAD2, 0xBF81, 0x8CB0,
|
0x637B, 0x3628, 0x0519, 0x10B2, 0x2383, 0x76D0, 0x45E1, 0xDC76, 0xEF47, 0xBA14, 0x8925, 0x991B, 0xAA2A,
|
||||||
0x9C8E, 0xAFBF, 0xFAEC, 0xC9DD, 0x504A, 0x637B, 0x3628, 0x0519, 0x10B2, 0x2383, 0x76D0, 0x45E1,
|
0xFF79, 0xCC48, 0x55DF, 0x66EE, 0x33BD, 0x008C, 0x13C1, 0x20F0, 0x75A3, 0x4692, 0xDF05, 0xEC34, 0xB967,
|
||||||
0xDC76, 0xEF47, 0xBA14, 0x8925, 0x991B, 0xAA2A, 0xFF79, 0xCC48, 0x55DF, 0x66EE, 0x33BD, 0x008C,
|
0x8A56, 0x9A68, 0xA959, 0xFC0A, 0xCF3B, 0x56AC, 0x659D, 0x30CE, 0x03FF
|
||||||
0x13C1, 0x20F0, 0x75A3, 0x4692, 0xDF05, 0xEC34, 0xB967, 0x8A56, 0x9A68, 0xA959, 0xFC0A, 0xCF3B,
|
|
||||||
0x56AC, 0x659D, 0x30CE, 0x03FF
|
|
||||||
},
|
},
|
||||||
new ushort[]
|
new ushort[]
|
||||||
{
|
{
|
||||||
0x0000, 0x3730, 0x6E60, 0x5950, 0xDCC0, 0xEBF0, 0xB2A0, 0x8590, 0xA9A1, 0x9E91, 0xC7C1, 0xF0F1,
|
0x0000, 0x3730, 0x6E60, 0x5950, 0xDCC0, 0xEBF0, 0xB2A0, 0x8590, 0xA9A1, 0x9E91, 0xC7C1, 0xF0F1, 0x7561,
|
||||||
0x7561, 0x4251, 0x1B01, 0x2C31, 0x4363, 0x7453, 0x2D03, 0x1A33, 0x9FA3, 0xA893, 0xF1C3, 0xC6F3,
|
0x4251, 0x1B01, 0x2C31, 0x4363, 0x7453, 0x2D03, 0x1A33, 0x9FA3, 0xA893, 0xF1C3, 0xC6F3, 0xEAC2, 0xDDF2,
|
||||||
0xEAC2, 0xDDF2, 0x84A2, 0xB392, 0x3602, 0x0132, 0x5862, 0x6F52, 0x86C6, 0xB1F6, 0xE8A6, 0xDF96,
|
0x84A2, 0xB392, 0x3602, 0x0132, 0x5862, 0x6F52, 0x86C6, 0xB1F6, 0xE8A6, 0xDF96, 0x5A06, 0x6D36, 0x3466,
|
||||||
0x5A06, 0x6D36, 0x3466, 0x0356, 0x2F67, 0x1857, 0x4107, 0x7637, 0xF3A7, 0xC497, 0x9DC7, 0xAAF7,
|
0x0356, 0x2F67, 0x1857, 0x4107, 0x7637, 0xF3A7, 0xC497, 0x9DC7, 0xAAF7, 0xC5A5, 0xF295, 0xABC5, 0x9CF5,
|
||||||
0xC5A5, 0xF295, 0xABC5, 0x9CF5, 0x1965, 0x2E55, 0x7705, 0x4035, 0x6C04, 0x5B34, 0x0264, 0x3554,
|
0x1965, 0x2E55, 0x7705, 0x4035, 0x6C04, 0x5B34, 0x0264, 0x3554, 0xB0C4, 0x87F4, 0xDEA4, 0xE994, 0x1DAD,
|
||||||
0xB0C4, 0x87F4, 0xDEA4, 0xE994, 0x1DAD, 0x2A9D, 0x73CD, 0x44FD, 0xC16D, 0xF65D, 0xAF0D, 0x983D,
|
0x2A9D, 0x73CD, 0x44FD, 0xC16D, 0xF65D, 0xAF0D, 0x983D, 0xB40C, 0x833C, 0xDA6C, 0xED5C, 0x68CC, 0x5FFC,
|
||||||
0xB40C, 0x833C, 0xDA6C, 0xED5C, 0x68CC, 0x5FFC, 0x06AC, 0x319C, 0x5ECE, 0x69FE, 0x30AE, 0x079E,
|
0x06AC, 0x319C, 0x5ECE, 0x69FE, 0x30AE, 0x079E, 0x820E, 0xB53E, 0xEC6E, 0xDB5E, 0xF76F, 0xC05F, 0x990F,
|
||||||
0x820E, 0xB53E, 0xEC6E, 0xDB5E, 0xF76F, 0xC05F, 0x990F, 0xAE3F, 0x2BAF, 0x1C9F, 0x45CF, 0x72FF,
|
0xAE3F, 0x2BAF, 0x1C9F, 0x45CF, 0x72FF, 0x9B6B, 0xAC5B, 0xF50B, 0xC23B, 0x47AB, 0x709B, 0x29CB, 0x1EFB,
|
||||||
0x9B6B, 0xAC5B, 0xF50B, 0xC23B, 0x47AB, 0x709B, 0x29CB, 0x1EFB, 0x32CA, 0x05FA, 0x5CAA, 0x6B9A,
|
0x32CA, 0x05FA, 0x5CAA, 0x6B9A, 0xEE0A, 0xD93A, 0x806A, 0xB75A, 0xD808, 0xEF38, 0xB668, 0x8158, 0x04C8,
|
||||||
0xEE0A, 0xD93A, 0x806A, 0xB75A, 0xD808, 0xEF38, 0xB668, 0x8158, 0x04C8, 0x33F8, 0x6AA8, 0x5D98,
|
0x33F8, 0x6AA8, 0x5D98, 0x71A9, 0x4699, 0x1FC9, 0x28F9, 0xAD69, 0x9A59, 0xC309, 0xF439, 0x3B5A, 0x0C6A,
|
||||||
0x71A9, 0x4699, 0x1FC9, 0x28F9, 0xAD69, 0x9A59, 0xC309, 0xF439, 0x3B5A, 0x0C6A, 0x553A, 0x620A,
|
0x553A, 0x620A, 0xE79A, 0xD0AA, 0x89FA, 0xBECA, 0x92FB, 0xA5CB, 0xFC9B, 0xCBAB, 0x4E3B, 0x790B, 0x205B,
|
||||||
0xE79A, 0xD0AA, 0x89FA, 0xBECA, 0x92FB, 0xA5CB, 0xFC9B, 0xCBAB, 0x4E3B, 0x790B, 0x205B, 0x176B,
|
0x176B, 0x7839, 0x4F09, 0x1659, 0x2169, 0xA4F9, 0x93C9, 0xCA99, 0xFDA9, 0xD198, 0xE6A8, 0xBFF8, 0x88C8,
|
||||||
0x7839, 0x4F09, 0x1659, 0x2169, 0xA4F9, 0x93C9, 0xCA99, 0xFDA9, 0xD198, 0xE6A8, 0xBFF8, 0x88C8,
|
0x0D58, 0x3A68, 0x6338, 0x5408, 0xBD9C, 0x8AAC, 0xD3FC, 0xE4CC, 0x615C, 0x566C, 0x0F3C, 0x380C, 0x143D,
|
||||||
0x0D58, 0x3A68, 0x6338, 0x5408, 0xBD9C, 0x8AAC, 0xD3FC, 0xE4CC, 0x615C, 0x566C, 0x0F3C, 0x380C,
|
0x230D, 0x7A5D, 0x4D6D, 0xC8FD, 0xFFCD, 0xA69D, 0x91AD, 0xFEFF, 0xC9CF, 0x909F, 0xA7AF, 0x223F, 0x150F,
|
||||||
0x143D, 0x230D, 0x7A5D, 0x4D6D, 0xC8FD, 0xFFCD, 0xA69D, 0x91AD, 0xFEFF, 0xC9CF, 0x909F, 0xA7AF,
|
0x4C5F, 0x7B6F, 0x575E, 0x606E, 0x393E, 0x0E0E, 0x8B9E, 0xBCAE, 0xE5FE, 0xD2CE, 0x26F7, 0x11C7, 0x4897,
|
||||||
0x223F, 0x150F, 0x4C5F, 0x7B6F, 0x575E, 0x606E, 0x393E, 0x0E0E, 0x8B9E, 0xBCAE, 0xE5FE, 0xD2CE,
|
0x7FA7, 0xFA37, 0xCD07, 0x9457, 0xA367, 0x8F56, 0xB866, 0xE136, 0xD606, 0x5396, 0x64A6, 0x3DF6, 0x0AC6,
|
||||||
0x26F7, 0x11C7, 0x4897, 0x7FA7, 0xFA37, 0xCD07, 0x9457, 0xA367, 0x8F56, 0xB866, 0xE136, 0xD606,
|
0x6594, 0x52A4, 0x0BF4, 0x3CC4, 0xB954, 0x8E64, 0xD734, 0xE004, 0xCC35, 0xFB05, 0xA255, 0x9565, 0x10F5,
|
||||||
0x5396, 0x64A6, 0x3DF6, 0x0AC6, 0x6594, 0x52A4, 0x0BF4, 0x3CC4, 0xB954, 0x8E64, 0xD734, 0xE004,
|
0x27C5, 0x7E95, 0x49A5, 0xA031, 0x9701, 0xCE51, 0xF961, 0x7CF1, 0x4BC1, 0x1291, 0x25A1, 0x0990, 0x3EA0,
|
||||||
0xCC35, 0xFB05, 0xA255, 0x9565, 0x10F5, 0x27C5, 0x7E95, 0x49A5, 0xA031, 0x9701, 0xCE51, 0xF961,
|
0x67F0, 0x50C0, 0xD550, 0xE260, 0xBB30, 0x8C00, 0xE352, 0xD462, 0x8D32, 0xBA02, 0x3F92, 0x08A2, 0x51F2,
|
||||||
0x7CF1, 0x4BC1, 0x1291, 0x25A1, 0x0990, 0x3EA0, 0x67F0, 0x50C0, 0xD550, 0xE260, 0xBB30, 0x8C00,
|
0x66C2, 0x4AF3, 0x7DC3, 0x2493, 0x13A3, 0x9633, 0xA103, 0xF853, 0xCF63
|
||||||
0xE352, 0xD462, 0x8D32, 0xBA02, 0x3F92, 0x08A2, 0x51F2, 0x66C2, 0x4AF3, 0x7DC3, 0x2493, 0x13A3,
|
|
||||||
0x9633, 0xA103, 0xF853, 0xCF63
|
|
||||||
},
|
},
|
||||||
new ushort[]
|
new ushort[]
|
||||||
{
|
{
|
||||||
0x0000, 0x76B4, 0xED68, 0x9BDC, 0xCAF1, 0xBC45, 0x2799, 0x512D, 0x85C3, 0xF377, 0x68AB, 0x1E1F,
|
0x0000, 0x76B4, 0xED68, 0x9BDC, 0xCAF1, 0xBC45, 0x2799, 0x512D, 0x85C3, 0xF377, 0x68AB, 0x1E1F, 0x4F32,
|
||||||
0x4F32, 0x3986, 0xA25A, 0xD4EE, 0x1BA7, 0x6D13, 0xF6CF, 0x807B, 0xD156, 0xA7E2, 0x3C3E, 0x4A8A,
|
0x3986, 0xA25A, 0xD4EE, 0x1BA7, 0x6D13, 0xF6CF, 0x807B, 0xD156, 0xA7E2, 0x3C3E, 0x4A8A, 0x9E64, 0xE8D0,
|
||||||
0x9E64, 0xE8D0, 0x730C, 0x05B8, 0x5495, 0x2221, 0xB9FD, 0xCF49, 0x374E, 0x41FA, 0xDA26, 0xAC92,
|
0x730C, 0x05B8, 0x5495, 0x2221, 0xB9FD, 0xCF49, 0x374E, 0x41FA, 0xDA26, 0xAC92, 0xFDBF, 0x8B0B, 0x10D7,
|
||||||
0xFDBF, 0x8B0B, 0x10D7, 0x6663, 0xB28D, 0xC439, 0x5FE5, 0x2951, 0x787C, 0x0EC8, 0x9514, 0xE3A0,
|
0x6663, 0xB28D, 0xC439, 0x5FE5, 0x2951, 0x787C, 0x0EC8, 0x9514, 0xE3A0, 0x2CE9, 0x5A5D, 0xC181, 0xB735,
|
||||||
0x2CE9, 0x5A5D, 0xC181, 0xB735, 0xE618, 0x90AC, 0x0B70, 0x7DC4, 0xA92A, 0xDF9E, 0x4442, 0x32F6,
|
0xE618, 0x90AC, 0x0B70, 0x7DC4, 0xA92A, 0xDF9E, 0x4442, 0x32F6, 0x63DB, 0x156F, 0x8EB3, 0xF807, 0x6E9C,
|
||||||
0x63DB, 0x156F, 0x8EB3, 0xF807, 0x6E9C, 0x1828, 0x83F4, 0xF540, 0xA46D, 0xD2D9, 0x4905, 0x3FB1,
|
0x1828, 0x83F4, 0xF540, 0xA46D, 0xD2D9, 0x4905, 0x3FB1, 0xEB5F, 0x9DEB, 0x0637, 0x7083, 0x21AE, 0x571A,
|
||||||
0xEB5F, 0x9DEB, 0x0637, 0x7083, 0x21AE, 0x571A, 0xCCC6, 0xBA72, 0x753B, 0x038F, 0x9853, 0xEEE7,
|
0xCCC6, 0xBA72, 0x753B, 0x038F, 0x9853, 0xEEE7, 0xBFCA, 0xC97E, 0x52A2, 0x2416, 0xF0F8, 0x864C, 0x1D90,
|
||||||
0xBFCA, 0xC97E, 0x52A2, 0x2416, 0xF0F8, 0x864C, 0x1D90, 0x6B24, 0x3A09, 0x4CBD, 0xD761, 0xA1D5,
|
0x6B24, 0x3A09, 0x4CBD, 0xD761, 0xA1D5, 0x59D2, 0x2F66, 0xB4BA, 0xC20E, 0x9323, 0xE597, 0x7E4B, 0x08FF,
|
||||||
0x59D2, 0x2F66, 0xB4BA, 0xC20E, 0x9323, 0xE597, 0x7E4B, 0x08FF, 0xDC11, 0xAAA5, 0x3179, 0x47CD,
|
0xDC11, 0xAAA5, 0x3179, 0x47CD, 0x16E0, 0x6054, 0xFB88, 0x8D3C, 0x4275, 0x34C1, 0xAF1D, 0xD9A9, 0x8884,
|
||||||
0x16E0, 0x6054, 0xFB88, 0x8D3C, 0x4275, 0x34C1, 0xAF1D, 0xD9A9, 0x8884, 0xFE30, 0x65EC, 0x1358,
|
0xFE30, 0x65EC, 0x1358, 0xC7B6, 0xB102, 0x2ADE, 0x5C6A, 0x0D47, 0x7BF3, 0xE02F, 0x969B, 0xDD38, 0xAB8C,
|
||||||
0xC7B6, 0xB102, 0x2ADE, 0x5C6A, 0x0D47, 0x7BF3, 0xE02F, 0x969B, 0xDD38, 0xAB8C, 0x3050, 0x46E4,
|
0x3050, 0x46E4, 0x17C9, 0x617D, 0xFAA1, 0x8C15, 0x58FB, 0x2E4F, 0xB593, 0xC327, 0x920A, 0xE4BE, 0x7F62,
|
||||||
0x17C9, 0x617D, 0xFAA1, 0x8C15, 0x58FB, 0x2E4F, 0xB593, 0xC327, 0x920A, 0xE4BE, 0x7F62, 0x09D6,
|
0x09D6, 0xC69F, 0xB02B, 0x2BF7, 0x5D43, 0x0C6E, 0x7ADA, 0xE106, 0x97B2, 0x435C, 0x35E8, 0xAE34, 0xD880,
|
||||||
0xC69F, 0xB02B, 0x2BF7, 0x5D43, 0x0C6E, 0x7ADA, 0xE106, 0x97B2, 0x435C, 0x35E8, 0xAE34, 0xD880,
|
0x89AD, 0xFF19, 0x64C5, 0x1271, 0xEA76, 0x9CC2, 0x071E, 0x71AA, 0x2087, 0x5633, 0xCDEF, 0xBB5B, 0x6FB5,
|
||||||
0x89AD, 0xFF19, 0x64C5, 0x1271, 0xEA76, 0x9CC2, 0x071E, 0x71AA, 0x2087, 0x5633, 0xCDEF, 0xBB5B,
|
0x1901, 0x82DD, 0xF469, 0xA544, 0xD3F0, 0x482C, 0x3E98, 0xF1D1, 0x8765, 0x1CB9, 0x6A0D, 0x3B20, 0x4D94,
|
||||||
0x6FB5, 0x1901, 0x82DD, 0xF469, 0xA544, 0xD3F0, 0x482C, 0x3E98, 0xF1D1, 0x8765, 0x1CB9, 0x6A0D,
|
0xD648, 0xA0FC, 0x7412, 0x02A6, 0x997A, 0xEFCE, 0xBEE3, 0xC857, 0x538B, 0x253F, 0xB3A4, 0xC510, 0x5ECC,
|
||||||
0x3B20, 0x4D94, 0xD648, 0xA0FC, 0x7412, 0x02A6, 0x997A, 0xEFCE, 0xBEE3, 0xC857, 0x538B, 0x253F,
|
0x2878, 0x7955, 0x0FE1, 0x943D, 0xE289, 0x3667, 0x40D3, 0xDB0F, 0xADBB, 0xFC96, 0x8A22, 0x11FE, 0x674A,
|
||||||
0xB3A4, 0xC510, 0x5ECC, 0x2878, 0x7955, 0x0FE1, 0x943D, 0xE289, 0x3667, 0x40D3, 0xDB0F, 0xADBB,
|
0xA803, 0xDEB7, 0x456B, 0x33DF, 0x62F2, 0x1446, 0x8F9A, 0xF92E, 0x2DC0, 0x5B74, 0xC0A8, 0xB61C, 0xE731,
|
||||||
0xFC96, 0x8A22, 0x11FE, 0x674A, 0xA803, 0xDEB7, 0x456B, 0x33DF, 0x62F2, 0x1446, 0x8F9A, 0xF92E,
|
0x9185, 0x0A59, 0x7CED, 0x84EA, 0xF25E, 0x6982, 0x1F36, 0x4E1B, 0x38AF, 0xA373, 0xD5C7, 0x0129, 0x779D,
|
||||||
0x2DC0, 0x5B74, 0xC0A8, 0xB61C, 0xE731, 0x9185, 0x0A59, 0x7CED, 0x84EA, 0xF25E, 0x6982, 0x1F36,
|
0xEC41, 0x9AF5, 0xCBD8, 0xBD6C, 0x26B0, 0x5004, 0x9F4D, 0xE9F9, 0x7225, 0x0491, 0x55BC, 0x2308, 0xB8D4,
|
||||||
0x4E1B, 0x38AF, 0xA373, 0xD5C7, 0x0129, 0x779D, 0xEC41, 0x9AF5, 0xCBD8, 0xBD6C, 0x26B0, 0x5004,
|
0xCE60, 0x1A8E, 0x6C3A, 0xF7E6, 0x8152, 0xD07F, 0xA6CB, 0x3D17, 0x4BA3
|
||||||
0x9F4D, 0xE9F9, 0x7225, 0x0491, 0x55BC, 0x2308, 0xB8D4, 0xCE60, 0x1A8E, 0x6C3A, 0xF7E6, 0x8152,
|
|
||||||
0xD07F, 0xA6CB, 0x3D17, 0x4BA3
|
|
||||||
},
|
},
|
||||||
new ushort[]
|
new ushort[]
|
||||||
{
|
{
|
||||||
0x0000, 0xAA51, 0x4483, 0xEED2, 0x8906, 0x2357, 0xCD85, 0x67D4, 0x022D, 0xA87C, 0x46AE, 0xECFF,
|
0x0000, 0xAA51, 0x4483, 0xEED2, 0x8906, 0x2357, 0xCD85, 0x67D4, 0x022D, 0xA87C, 0x46AE, 0xECFF, 0x8B2B,
|
||||||
0x8B2B, 0x217A, 0xCFA8, 0x65F9, 0x045A, 0xAE0B, 0x40D9, 0xEA88, 0x8D5C, 0x270D, 0xC9DF, 0x638E,
|
0x217A, 0xCFA8, 0x65F9, 0x045A, 0xAE0B, 0x40D9, 0xEA88, 0x8D5C, 0x270D, 0xC9DF, 0x638E, 0x0677, 0xAC26,
|
||||||
0x0677, 0xAC26, 0x42F4, 0xE8A5, 0x8F71, 0x2520, 0xCBF2, 0x61A3, 0x08B4, 0xA2E5, 0x4C37, 0xE666,
|
0x42F4, 0xE8A5, 0x8F71, 0x2520, 0xCBF2, 0x61A3, 0x08B4, 0xA2E5, 0x4C37, 0xE666, 0x81B2, 0x2BE3, 0xC531,
|
||||||
0x81B2, 0x2BE3, 0xC531, 0x6F60, 0x0A99, 0xA0C8, 0x4E1A, 0xE44B, 0x839F, 0x29CE, 0xC71C, 0x6D4D,
|
0x6F60, 0x0A99, 0xA0C8, 0x4E1A, 0xE44B, 0x839F, 0x29CE, 0xC71C, 0x6D4D, 0x0CEE, 0xA6BF, 0x486D, 0xE23C,
|
||||||
0x0CEE, 0xA6BF, 0x486D, 0xE23C, 0x85E8, 0x2FB9, 0xC16B, 0x6B3A, 0x0EC3, 0xA492, 0x4A40, 0xE011,
|
0x85E8, 0x2FB9, 0xC16B, 0x6B3A, 0x0EC3, 0xA492, 0x4A40, 0xE011, 0x87C5, 0x2D94, 0xC346, 0x6917, 0x1168,
|
||||||
0x87C5, 0x2D94, 0xC346, 0x6917, 0x1168, 0xBB39, 0x55EB, 0xFFBA, 0x986E, 0x323F, 0xDCED, 0x76BC,
|
0xBB39, 0x55EB, 0xFFBA, 0x986E, 0x323F, 0xDCED, 0x76BC, 0x1345, 0xB914, 0x57C6, 0xFD97, 0x9A43, 0x3012,
|
||||||
0x1345, 0xB914, 0x57C6, 0xFD97, 0x9A43, 0x3012, 0xDEC0, 0x7491, 0x1532, 0xBF63, 0x51B1, 0xFBE0,
|
0xDEC0, 0x7491, 0x1532, 0xBF63, 0x51B1, 0xFBE0, 0x9C34, 0x3665, 0xD8B7, 0x72E6, 0x171F, 0xBD4E, 0x539C,
|
||||||
0x9C34, 0x3665, 0xD8B7, 0x72E6, 0x171F, 0xBD4E, 0x539C, 0xF9CD, 0x9E19, 0x3448, 0xDA9A, 0x70CB,
|
0xF9CD, 0x9E19, 0x3448, 0xDA9A, 0x70CB, 0x19DC, 0xB38D, 0x5D5F, 0xF70E, 0x90DA, 0x3A8B, 0xD459, 0x7E08,
|
||||||
0x19DC, 0xB38D, 0x5D5F, 0xF70E, 0x90DA, 0x3A8B, 0xD459, 0x7E08, 0x1BF1, 0xB1A0, 0x5F72, 0xF523,
|
0x1BF1, 0xB1A0, 0x5F72, 0xF523, 0x92F7, 0x38A6, 0xD674, 0x7C25, 0x1D86, 0xB7D7, 0x5905, 0xF354, 0x9480,
|
||||||
0x92F7, 0x38A6, 0xD674, 0x7C25, 0x1D86, 0xB7D7, 0x5905, 0xF354, 0x9480, 0x3ED1, 0xD003, 0x7A52,
|
0x3ED1, 0xD003, 0x7A52, 0x1FAB, 0xB5FA, 0x5B28, 0xF179, 0x96AD, 0x3CFC, 0xD22E, 0x787F, 0x22D0, 0x8881,
|
||||||
0x1FAB, 0xB5FA, 0x5B28, 0xF179, 0x96AD, 0x3CFC, 0xD22E, 0x787F, 0x22D0, 0x8881, 0x6653, 0xCC02,
|
0x6653, 0xCC02, 0xABD6, 0x0187, 0xEF55, 0x4504, 0x20FD, 0x8AAC, 0x647E, 0xCE2F, 0xA9FB, 0x03AA, 0xED78,
|
||||||
0xABD6, 0x0187, 0xEF55, 0x4504, 0x20FD, 0x8AAC, 0x647E, 0xCE2F, 0xA9FB, 0x03AA, 0xED78, 0x4729,
|
0x4729, 0x268A, 0x8CDB, 0x6209, 0xC858, 0xAF8C, 0x05DD, 0xEB0F, 0x415E, 0x24A7, 0x8EF6, 0x6024, 0xCA75,
|
||||||
0x268A, 0x8CDB, 0x6209, 0xC858, 0xAF8C, 0x05DD, 0xEB0F, 0x415E, 0x24A7, 0x8EF6, 0x6024, 0xCA75,
|
0xADA1, 0x07F0, 0xE922, 0x4373, 0x2A64, 0x8035, 0x6EE7, 0xC4B6, 0xA362, 0x0933, 0xE7E1, 0x4DB0, 0x2849,
|
||||||
0xADA1, 0x07F0, 0xE922, 0x4373, 0x2A64, 0x8035, 0x6EE7, 0xC4B6, 0xA362, 0x0933, 0xE7E1, 0x4DB0,
|
0x8218, 0x6CCA, 0xC69B, 0xA14F, 0x0B1E, 0xE5CC, 0x4F9D, 0x2E3E, 0x846F, 0x6ABD, 0xC0EC, 0xA738, 0x0D69,
|
||||||
0x2849, 0x8218, 0x6CCA, 0xC69B, 0xA14F, 0x0B1E, 0xE5CC, 0x4F9D, 0x2E3E, 0x846F, 0x6ABD, 0xC0EC,
|
0xE3BB, 0x49EA, 0x2C13, 0x8642, 0x6890, 0xC2C1, 0xA515, 0x0F44, 0xE196, 0x4BC7, 0x33B8, 0x99E9, 0x773B,
|
||||||
0xA738, 0x0D69, 0xE3BB, 0x49EA, 0x2C13, 0x8642, 0x6890, 0xC2C1, 0xA515, 0x0F44, 0xE196, 0x4BC7,
|
0xDD6A, 0xBABE, 0x10EF, 0xFE3D, 0x546C, 0x3195, 0x9BC4, 0x7516, 0xDF47, 0xB893, 0x12C2, 0xFC10, 0x5641,
|
||||||
0x33B8, 0x99E9, 0x773B, 0xDD6A, 0xBABE, 0x10EF, 0xFE3D, 0x546C, 0x3195, 0x9BC4, 0x7516, 0xDF47,
|
0x37E2, 0x9DB3, 0x7361, 0xD930, 0xBEE4, 0x14B5, 0xFA67, 0x5036, 0x35CF, 0x9F9E, 0x714C, 0xDB1D, 0xBCC9,
|
||||||
0xB893, 0x12C2, 0xFC10, 0x5641, 0x37E2, 0x9DB3, 0x7361, 0xD930, 0xBEE4, 0x14B5, 0xFA67, 0x5036,
|
0x1698, 0xF84A, 0x521B, 0x3B0C, 0x915D, 0x7F8F, 0xD5DE, 0xB20A, 0x185B, 0xF689, 0x5CD8, 0x3921, 0x9370,
|
||||||
0x35CF, 0x9F9E, 0x714C, 0xDB1D, 0xBCC9, 0x1698, 0xF84A, 0x521B, 0x3B0C, 0x915D, 0x7F8F, 0xD5DE,
|
0x7DA2, 0xD7F3, 0xB027, 0x1A76, 0xF4A4, 0x5EF5, 0x3F56, 0x9507, 0x7BD5, 0xD184, 0xB650, 0x1C01, 0xF2D3,
|
||||||
0xB20A, 0x185B, 0xF689, 0x5CD8, 0x3921, 0x9370, 0x7DA2, 0xD7F3, 0xB027, 0x1A76, 0xF4A4, 0x5EF5,
|
0x5882, 0x3D7B, 0x972A, 0x79F8, 0xD3A9, 0xB47D, 0x1E2C, 0xF0FE, 0x5AAF
|
||||||
0x3F56, 0x9507, 0x7BD5, 0xD184, 0xB650, 0x1C01, 0xF2D3, 0x5882, 0x3D7B, 0x972A, 0x79F8, 0xD3A9,
|
|
||||||
0xB47D, 0x1E2C, 0xF0FE, 0x5AAF
|
|
||||||
},
|
},
|
||||||
new ushort[]
|
new ushort[]
|
||||||
{
|
{
|
||||||
0x0000, 0x45A0, 0x8B40, 0xCEE0, 0x06A1, 0x4301, 0x8DE1, 0xC841, 0x0D42, 0x48E2, 0x8602, 0xC3A2,
|
0x0000, 0x45A0, 0x8B40, 0xCEE0, 0x06A1, 0x4301, 0x8DE1, 0xC841, 0x0D42, 0x48E2, 0x8602, 0xC3A2, 0x0BE3,
|
||||||
0x0BE3, 0x4E43, 0x80A3, 0xC503, 0x1A84, 0x5F24, 0x91C4, 0xD464, 0x1C25, 0x5985, 0x9765, 0xD2C5,
|
0x4E43, 0x80A3, 0xC503, 0x1A84, 0x5F24, 0x91C4, 0xD464, 0x1C25, 0x5985, 0x9765, 0xD2C5, 0x17C6, 0x5266,
|
||||||
0x17C6, 0x5266, 0x9C86, 0xD926, 0x1167, 0x54C7, 0x9A27, 0xDF87, 0x3508, 0x70A8, 0xBE48, 0xFBE8,
|
0x9C86, 0xD926, 0x1167, 0x54C7, 0x9A27, 0xDF87, 0x3508, 0x70A8, 0xBE48, 0xFBE8, 0x33A9, 0x7609, 0xB8E9,
|
||||||
0x33A9, 0x7609, 0xB8E9, 0xFD49, 0x384A, 0x7DEA, 0xB30A, 0xF6AA, 0x3EEB, 0x7B4B, 0xB5AB, 0xF00B,
|
0xFD49, 0x384A, 0x7DEA, 0xB30A, 0xF6AA, 0x3EEB, 0x7B4B, 0xB5AB, 0xF00B, 0x2F8C, 0x6A2C, 0xA4CC, 0xE16C,
|
||||||
0x2F8C, 0x6A2C, 0xA4CC, 0xE16C, 0x292D, 0x6C8D, 0xA26D, 0xE7CD, 0x22CE, 0x676E, 0xA98E, 0xEC2E,
|
0x292D, 0x6C8D, 0xA26D, 0xE7CD, 0x22CE, 0x676E, 0xA98E, 0xEC2E, 0x246F, 0x61CF, 0xAF2F, 0xEA8F, 0x6A10,
|
||||||
0x246F, 0x61CF, 0xAF2F, 0xEA8F, 0x6A10, 0x2FB0, 0xE150, 0xA4F0, 0x6CB1, 0x2911, 0xE7F1, 0xA251,
|
0x2FB0, 0xE150, 0xA4F0, 0x6CB1, 0x2911, 0xE7F1, 0xA251, 0x6752, 0x22F2, 0xEC12, 0xA9B2, 0x61F3, 0x2453,
|
||||||
0x6752, 0x22F2, 0xEC12, 0xA9B2, 0x61F3, 0x2453, 0xEAB3, 0xAF13, 0x7094, 0x3534, 0xFBD4, 0xBE74,
|
0xEAB3, 0xAF13, 0x7094, 0x3534, 0xFBD4, 0xBE74, 0x7635, 0x3395, 0xFD75, 0xB8D5, 0x7DD6, 0x3876, 0xF696,
|
||||||
0x7635, 0x3395, 0xFD75, 0xB8D5, 0x7DD6, 0x3876, 0xF696, 0xB336, 0x7B77, 0x3ED7, 0xF037, 0xB597,
|
0xB336, 0x7B77, 0x3ED7, 0xF037, 0xB597, 0x5F18, 0x1AB8, 0xD458, 0x91F8, 0x59B9, 0x1C19, 0xD2F9, 0x9759,
|
||||||
0x5F18, 0x1AB8, 0xD458, 0x91F8, 0x59B9, 0x1C19, 0xD2F9, 0x9759, 0x525A, 0x17FA, 0xD91A, 0x9CBA,
|
0x525A, 0x17FA, 0xD91A, 0x9CBA, 0x54FB, 0x115B, 0xDFBB, 0x9A1B, 0x459C, 0x003C, 0xCEDC, 0x8B7C, 0x433D,
|
||||||
0x54FB, 0x115B, 0xDFBB, 0x9A1B, 0x459C, 0x003C, 0xCEDC, 0x8B7C, 0x433D, 0x069D, 0xC87D, 0x8DDD,
|
0x069D, 0xC87D, 0x8DDD, 0x48DE, 0x0D7E, 0xC39E, 0x863E, 0x4E7F, 0x0BDF, 0xC53F, 0x809F, 0xD420, 0x9180,
|
||||||
0x48DE, 0x0D7E, 0xC39E, 0x863E, 0x4E7F, 0x0BDF, 0xC53F, 0x809F, 0xD420, 0x9180, 0x5F60, 0x1AC0,
|
0x5F60, 0x1AC0, 0xD281, 0x9721, 0x59C1, 0x1C61, 0xD962, 0x9CC2, 0x5222, 0x1782, 0xDFC3, 0x9A63, 0x5483,
|
||||||
0xD281, 0x9721, 0x59C1, 0x1C61, 0xD962, 0x9CC2, 0x5222, 0x1782, 0xDFC3, 0x9A63, 0x5483, 0x1123,
|
0x1123, 0xCEA4, 0x8B04, 0x45E4, 0x0044, 0xC805, 0x8DA5, 0x4345, 0x06E5, 0xC3E6, 0x8646, 0x48A6, 0x0D06,
|
||||||
0xCEA4, 0x8B04, 0x45E4, 0x0044, 0xC805, 0x8DA5, 0x4345, 0x06E5, 0xC3E6, 0x8646, 0x48A6, 0x0D06,
|
0xC547, 0x80E7, 0x4E07, 0x0BA7, 0xE128, 0xA488, 0x6A68, 0x2FC8, 0xE789, 0xA229, 0x6CC9, 0x2969, 0xEC6A,
|
||||||
0xC547, 0x80E7, 0x4E07, 0x0BA7, 0xE128, 0xA488, 0x6A68, 0x2FC8, 0xE789, 0xA229, 0x6CC9, 0x2969,
|
0xA9CA, 0x672A, 0x228A, 0xEACB, 0xAF6B, 0x618B, 0x242B, 0xFBAC, 0xBE0C, 0x70EC, 0x354C, 0xFD0D, 0xB8AD,
|
||||||
0xEC6A, 0xA9CA, 0x672A, 0x228A, 0xEACB, 0xAF6B, 0x618B, 0x242B, 0xFBAC, 0xBE0C, 0x70EC, 0x354C,
|
0x764D, 0x33ED, 0xF6EE, 0xB34E, 0x7DAE, 0x380E, 0xF04F, 0xB5EF, 0x7B0F, 0x3EAF, 0xBE30, 0xFB90, 0x3570,
|
||||||
0xFD0D, 0xB8AD, 0x764D, 0x33ED, 0xF6EE, 0xB34E, 0x7DAE, 0x380E, 0xF04F, 0xB5EF, 0x7B0F, 0x3EAF,
|
0x70D0, 0xB891, 0xFD31, 0x33D1, 0x7671, 0xB372, 0xF6D2, 0x3832, 0x7D92, 0xB5D3, 0xF073, 0x3E93, 0x7B33,
|
||||||
0xBE30, 0xFB90, 0x3570, 0x70D0, 0xB891, 0xFD31, 0x33D1, 0x7671, 0xB372, 0xF6D2, 0x3832, 0x7D92,
|
0xA4B4, 0xE114, 0x2FF4, 0x6A54, 0xA215, 0xE7B5, 0x2955, 0x6CF5, 0xA9F6, 0xEC56, 0x22B6, 0x6716, 0xAF57,
|
||||||
0xB5D3, 0xF073, 0x3E93, 0x7B33, 0xA4B4, 0xE114, 0x2FF4, 0x6A54, 0xA215, 0xE7B5, 0x2955, 0x6CF5,
|
0xEAF7, 0x2417, 0x61B7, 0x8B38, 0xCE98, 0x0078, 0x45D8, 0x8D99, 0xC839, 0x06D9, 0x4379, 0x867A, 0xC3DA,
|
||||||
0xA9F6, 0xEC56, 0x22B6, 0x6716, 0xAF57, 0xEAF7, 0x2417, 0x61B7, 0x8B38, 0xCE98, 0x0078, 0x45D8,
|
0x0D3A, 0x489A, 0x80DB, 0xC57B, 0x0B9B, 0x4E3B, 0x91BC, 0xD41C, 0x1AFC, 0x5F5C, 0x971D, 0xD2BD, 0x1C5D,
|
||||||
0x8D99, 0xC839, 0x06D9, 0x4379, 0x867A, 0xC3DA, 0x0D3A, 0x489A, 0x80DB, 0xC57B, 0x0B9B, 0x4E3B,
|
0x59FD, 0x9CFE, 0xD95E, 0x17BE, 0x521E, 0x9A5F, 0xDFFF, 0x111F, 0x54BF
|
||||||
0x91BC, 0xD41C, 0x1AFC, 0x5F5C, 0x971D, 0xD2BD, 0x1C5D, 0x59FD, 0x9CFE, 0xD95E, 0x17BE, 0x521E,
|
|
||||||
0x9A5F, 0xDFFF, 0x111F, 0x54BF
|
|
||||||
},
|
},
|
||||||
new ushort[]
|
new ushort[]
|
||||||
{
|
{
|
||||||
0x0000, 0xB861, 0x60E3, 0xD882, 0xC1C6, 0x79A7, 0xA125, 0x1944, 0x93AD, 0x2BCC, 0xF34E, 0x4B2F,
|
0x0000, 0xB861, 0x60E3, 0xD882, 0xC1C6, 0x79A7, 0xA125, 0x1944, 0x93AD, 0x2BCC, 0xF34E, 0x4B2F, 0x526B,
|
||||||
0x526B, 0xEA0A, 0x3288, 0x8AE9, 0x377B, 0x8F1A, 0x5798, 0xEFF9, 0xF6BD, 0x4EDC, 0x965E, 0x2E3F,
|
0xEA0A, 0x3288, 0x8AE9, 0x377B, 0x8F1A, 0x5798, 0xEFF9, 0xF6BD, 0x4EDC, 0x965E, 0x2E3F, 0xA4D6, 0x1CB7,
|
||||||
0xA4D6, 0x1CB7, 0xC435, 0x7C54, 0x6510, 0xDD71, 0x05F3, 0xBD92, 0x6EF6, 0xD697, 0x0E15, 0xB674,
|
0xC435, 0x7C54, 0x6510, 0xDD71, 0x05F3, 0xBD92, 0x6EF6, 0xD697, 0x0E15, 0xB674, 0xAF30, 0x1751, 0xCFD3,
|
||||||
0xAF30, 0x1751, 0xCFD3, 0x77B2, 0xFD5B, 0x453A, 0x9DB8, 0x25D9, 0x3C9D, 0x84FC, 0x5C7E, 0xE41F,
|
0x77B2, 0xFD5B, 0x453A, 0x9DB8, 0x25D9, 0x3C9D, 0x84FC, 0x5C7E, 0xE41F, 0x598D, 0xE1EC, 0x396E, 0x810F,
|
||||||
0x598D, 0xE1EC, 0x396E, 0x810F, 0x984B, 0x202A, 0xF8A8, 0x40C9, 0xCA20, 0x7241, 0xAAC3, 0x12A2,
|
0x984B, 0x202A, 0xF8A8, 0x40C9, 0xCA20, 0x7241, 0xAAC3, 0x12A2, 0x0BE6, 0xB387, 0x6B05, 0xD364, 0xDDEC,
|
||||||
0x0BE6, 0xB387, 0x6B05, 0xD364, 0xDDEC, 0x658D, 0xBD0F, 0x056E, 0x1C2A, 0xA44B, 0x7CC9, 0xC4A8,
|
0x658D, 0xBD0F, 0x056E, 0x1C2A, 0xA44B, 0x7CC9, 0xC4A8, 0x4E41, 0xF620, 0x2EA2, 0x96C3, 0x8F87, 0x37E6,
|
||||||
0x4E41, 0xF620, 0x2EA2, 0x96C3, 0x8F87, 0x37E6, 0xEF64, 0x5705, 0xEA97, 0x52F6, 0x8A74, 0x3215,
|
0xEF64, 0x5705, 0xEA97, 0x52F6, 0x8A74, 0x3215, 0x2B51, 0x9330, 0x4BB2, 0xF3D3, 0x793A, 0xC15B, 0x19D9,
|
||||||
0x2B51, 0x9330, 0x4BB2, 0xF3D3, 0x793A, 0xC15B, 0x19D9, 0xA1B8, 0xB8FC, 0x009D, 0xD81F, 0x607E,
|
0xA1B8, 0xB8FC, 0x009D, 0xD81F, 0x607E, 0xB31A, 0x0B7B, 0xD3F9, 0x6B98, 0x72DC, 0xCABD, 0x123F, 0xAA5E,
|
||||||
0xB31A, 0x0B7B, 0xD3F9, 0x6B98, 0x72DC, 0xCABD, 0x123F, 0xAA5E, 0x20B7, 0x98D6, 0x4054, 0xF835,
|
0x20B7, 0x98D6, 0x4054, 0xF835, 0xE171, 0x5910, 0x8192, 0x39F3, 0x8461, 0x3C00, 0xE482, 0x5CE3, 0x45A7,
|
||||||
0xE171, 0x5910, 0x8192, 0x39F3, 0x8461, 0x3C00, 0xE482, 0x5CE3, 0x45A7, 0xFDC6, 0x2544, 0x9D25,
|
0xFDC6, 0x2544, 0x9D25, 0x17CC, 0xAFAD, 0x772F, 0xCF4E, 0xD60A, 0x6E6B, 0xB6E9, 0x0E88, 0xABF9, 0x1398,
|
||||||
0x17CC, 0xAFAD, 0x772F, 0xCF4E, 0xD60A, 0x6E6B, 0xB6E9, 0x0E88, 0xABF9, 0x1398, 0xCB1A, 0x737B,
|
0xCB1A, 0x737B, 0x6A3F, 0xD25E, 0x0ADC, 0xB2BD, 0x3854, 0x8035, 0x58B7, 0xE0D6, 0xF992, 0x41F3, 0x9971,
|
||||||
0x6A3F, 0xD25E, 0x0ADC, 0xB2BD, 0x3854, 0x8035, 0x58B7, 0xE0D6, 0xF992, 0x41F3, 0x9971, 0x2110,
|
0x2110, 0x9C82, 0x24E3, 0xFC61, 0x4400, 0x5D44, 0xE525, 0x3DA7, 0x85C6, 0x0F2F, 0xB74E, 0x6FCC, 0xD7AD,
|
||||||
0x9C82, 0x24E3, 0xFC61, 0x4400, 0x5D44, 0xE525, 0x3DA7, 0x85C6, 0x0F2F, 0xB74E, 0x6FCC, 0xD7AD,
|
0xCEE9, 0x7688, 0xAE0A, 0x166B, 0xC50F, 0x7D6E, 0xA5EC, 0x1D8D, 0x04C9, 0xBCA8, 0x642A, 0xDC4B, 0x56A2,
|
||||||
0xCEE9, 0x7688, 0xAE0A, 0x166B, 0xC50F, 0x7D6E, 0xA5EC, 0x1D8D, 0x04C9, 0xBCA8, 0x642A, 0xDC4B,
|
0xEEC3, 0x3641, 0x8E20, 0x9764, 0x2F05, 0xF787, 0x4FE6, 0xF274, 0x4A15, 0x9297, 0x2AF6, 0x33B2, 0x8BD3,
|
||||||
0x56A2, 0xEEC3, 0x3641, 0x8E20, 0x9764, 0x2F05, 0xF787, 0x4FE6, 0xF274, 0x4A15, 0x9297, 0x2AF6,
|
0x5351, 0xEB30, 0x61D9, 0xD9B8, 0x013A, 0xB95B, 0xA01F, 0x187E, 0xC0FC, 0x789D, 0x7615, 0xCE74, 0x16F6,
|
||||||
0x33B2, 0x8BD3, 0x5351, 0xEB30, 0x61D9, 0xD9B8, 0x013A, 0xB95B, 0xA01F, 0x187E, 0xC0FC, 0x789D,
|
0xAE97, 0xB7D3, 0x0FB2, 0xD730, 0x6F51, 0xE5B8, 0x5DD9, 0x855B, 0x3D3A, 0x247E, 0x9C1F, 0x449D, 0xFCFC,
|
||||||
0x7615, 0xCE74, 0x16F6, 0xAE97, 0xB7D3, 0x0FB2, 0xD730, 0x6F51, 0xE5B8, 0x5DD9, 0x855B, 0x3D3A,
|
0x416E, 0xF90F, 0x218D, 0x99EC, 0x80A8, 0x38C9, 0xE04B, 0x582A, 0xD2C3, 0x6AA2, 0xB220, 0x0A41, 0x1305,
|
||||||
0x247E, 0x9C1F, 0x449D, 0xFCFC, 0x416E, 0xF90F, 0x218D, 0x99EC, 0x80A8, 0x38C9, 0xE04B, 0x582A,
|
0xAB64, 0x73E6, 0xCB87, 0x18E3, 0xA082, 0x7800, 0xC061, 0xD925, 0x6144, 0xB9C6, 0x01A7, 0x8B4E, 0x332F,
|
||||||
0xD2C3, 0x6AA2, 0xB220, 0x0A41, 0x1305, 0xAB64, 0x73E6, 0xCB87, 0x18E3, 0xA082, 0x7800, 0xC061,
|
0xEBAD, 0x53CC, 0x4A88, 0xF2E9, 0x2A6B, 0x920A, 0x2F98, 0x97F9, 0x4F7B, 0xF71A, 0xEE5E, 0x563F, 0x8EBD,
|
||||||
0xD925, 0x6144, 0xB9C6, 0x01A7, 0x8B4E, 0x332F, 0xEBAD, 0x53CC, 0x4A88, 0xF2E9, 0x2A6B, 0x920A,
|
0x36DC, 0xBC35, 0x0454, 0xDCD6, 0x64B7, 0x7DF3, 0xC592, 0x1D10, 0xA571
|
||||||
0x2F98, 0x97F9, 0x4F7B, 0xF71A, 0xEE5E, 0x563F, 0x8EBD, 0x36DC, 0xBC35, 0x0454, 0xDCD6, 0x64B7,
|
|
||||||
0x7DF3, 0xC592, 0x1D10, 0xA571
|
|
||||||
},
|
},
|
||||||
new ushort[]
|
new ushort[]
|
||||||
{
|
{
|
||||||
0x0000, 0x47D3, 0x8FA6, 0xC875, 0x0F6D, 0x48BE, 0x80CB, 0xC718, 0x1EDA, 0x5909, 0x917C, 0xD6AF,
|
0x0000, 0x47D3, 0x8FA6, 0xC875, 0x0F6D, 0x48BE, 0x80CB, 0xC718, 0x1EDA, 0x5909, 0x917C, 0xD6AF, 0x11B7,
|
||||||
0x11B7, 0x5664, 0x9E11, 0xD9C2, 0x3DB4, 0x7A67, 0xB212, 0xF5C1, 0x32D9, 0x750A, 0xBD7F, 0xFAAC,
|
0x5664, 0x9E11, 0xD9C2, 0x3DB4, 0x7A67, 0xB212, 0xF5C1, 0x32D9, 0x750A, 0xBD7F, 0xFAAC, 0x236E, 0x64BD,
|
||||||
0x236E, 0x64BD, 0xACC8, 0xEB1B, 0x2C03, 0x6BD0, 0xA3A5, 0xE476, 0x7B68, 0x3CBB, 0xF4CE, 0xB31D,
|
0xACC8, 0xEB1B, 0x2C03, 0x6BD0, 0xA3A5, 0xE476, 0x7B68, 0x3CBB, 0xF4CE, 0xB31D, 0x7405, 0x33D6, 0xFBA3,
|
||||||
0x7405, 0x33D6, 0xFBA3, 0xBC70, 0x65B2, 0x2261, 0xEA14, 0xADC7, 0x6ADF, 0x2D0C, 0xE579, 0xA2AA,
|
0xBC70, 0x65B2, 0x2261, 0xEA14, 0xADC7, 0x6ADF, 0x2D0C, 0xE579, 0xA2AA, 0x46DC, 0x010F, 0xC97A, 0x8EA9,
|
||||||
0x46DC, 0x010F, 0xC97A, 0x8EA9, 0x49B1, 0x0E62, 0xC617, 0x81C4, 0x5806, 0x1FD5, 0xD7A0, 0x9073,
|
0x49B1, 0x0E62, 0xC617, 0x81C4, 0x5806, 0x1FD5, 0xD7A0, 0x9073, 0x576B, 0x10B8, 0xD8CD, 0x9F1E, 0xF6D0,
|
||||||
0x576B, 0x10B8, 0xD8CD, 0x9F1E, 0xF6D0, 0xB103, 0x7976, 0x3EA5, 0xF9BD, 0xBE6E, 0x761B, 0x31C8,
|
0xB103, 0x7976, 0x3EA5, 0xF9BD, 0xBE6E, 0x761B, 0x31C8, 0xE80A, 0xAFD9, 0x67AC, 0x207F, 0xE767, 0xA0B4,
|
||||||
0xE80A, 0xAFD9, 0x67AC, 0x207F, 0xE767, 0xA0B4, 0x68C1, 0x2F12, 0xCB64, 0x8CB7, 0x44C2, 0x0311,
|
0x68C1, 0x2F12, 0xCB64, 0x8CB7, 0x44C2, 0x0311, 0xC409, 0x83DA, 0x4BAF, 0x0C7C, 0xD5BE, 0x926D, 0x5A18,
|
||||||
0xC409, 0x83DA, 0x4BAF, 0x0C7C, 0xD5BE, 0x926D, 0x5A18, 0x1DCB, 0xDAD3, 0x9D00, 0x5575, 0x12A6,
|
0x1DCB, 0xDAD3, 0x9D00, 0x5575, 0x12A6, 0x8DB8, 0xCA6B, 0x021E, 0x45CD, 0x82D5, 0xC506, 0x0D73, 0x4AA0,
|
||||||
0x8DB8, 0xCA6B, 0x021E, 0x45CD, 0x82D5, 0xC506, 0x0D73, 0x4AA0, 0x9362, 0xD4B1, 0x1CC4, 0x5B17,
|
0x9362, 0xD4B1, 0x1CC4, 0x5B17, 0x9C0F, 0xDBDC, 0x13A9, 0x547A, 0xB00C, 0xF7DF, 0x3FAA, 0x7879, 0xBF61,
|
||||||
0x9C0F, 0xDBDC, 0x13A9, 0x547A, 0xB00C, 0xF7DF, 0x3FAA, 0x7879, 0xBF61, 0xF8B2, 0x30C7, 0x7714,
|
0xF8B2, 0x30C7, 0x7714, 0xAED6, 0xE905, 0x2170, 0x66A3, 0xA1BB, 0xE668, 0x2E1D, 0x69CE, 0xFD81, 0xBA52,
|
||||||
0xAED6, 0xE905, 0x2170, 0x66A3, 0xA1BB, 0xE668, 0x2E1D, 0x69CE, 0xFD81, 0xBA52, 0x7227, 0x35F4,
|
0x7227, 0x35F4, 0xF2EC, 0xB53F, 0x7D4A, 0x3A99, 0xE35B, 0xA488, 0x6CFD, 0x2B2E, 0xEC36, 0xABE5, 0x6390,
|
||||||
0xF2EC, 0xB53F, 0x7D4A, 0x3A99, 0xE35B, 0xA488, 0x6CFD, 0x2B2E, 0xEC36, 0xABE5, 0x6390, 0x2443,
|
0x2443, 0xC035, 0x87E6, 0x4F93, 0x0840, 0xCF58, 0x888B, 0x40FE, 0x072D, 0xDEEF, 0x993C, 0x5149, 0x169A,
|
||||||
0xC035, 0x87E6, 0x4F93, 0x0840, 0xCF58, 0x888B, 0x40FE, 0x072D, 0xDEEF, 0x993C, 0x5149, 0x169A,
|
0xD182, 0x9651, 0x5E24, 0x19F7, 0x86E9, 0xC13A, 0x094F, 0x4E9C, 0x8984, 0xCE57, 0x0622, 0x41F1, 0x9833,
|
||||||
0xD182, 0x9651, 0x5E24, 0x19F7, 0x86E9, 0xC13A, 0x094F, 0x4E9C, 0x8984, 0xCE57, 0x0622, 0x41F1,
|
0xDFE0, 0x1795, 0x5046, 0x975E, 0xD08D, 0x18F8, 0x5F2B, 0xBB5D, 0xFC8E, 0x34FB, 0x7328, 0xB430, 0xF3E3,
|
||||||
0x9833, 0xDFE0, 0x1795, 0x5046, 0x975E, 0xD08D, 0x18F8, 0x5F2B, 0xBB5D, 0xFC8E, 0x34FB, 0x7328,
|
0x3B96, 0x7C45, 0xA587, 0xE254, 0x2A21, 0x6DF2, 0xAAEA, 0xED39, 0x254C, 0x629F, 0x0B51, 0x4C82, 0x84F7,
|
||||||
0xB430, 0xF3E3, 0x3B96, 0x7C45, 0xA587, 0xE254, 0x2A21, 0x6DF2, 0xAAEA, 0xED39, 0x254C, 0x629F,
|
0xC324, 0x043C, 0x43EF, 0x8B9A, 0xCC49, 0x158B, 0x5258, 0x9A2D, 0xDDFE, 0x1AE6, 0x5D35, 0x9540, 0xD293,
|
||||||
0x0B51, 0x4C82, 0x84F7, 0xC324, 0x043C, 0x43EF, 0x8B9A, 0xCC49, 0x158B, 0x5258, 0x9A2D, 0xDDFE,
|
0x36E5, 0x7136, 0xB943, 0xFE90, 0x3988, 0x7E5B, 0xB62E, 0xF1FD, 0x283F, 0x6FEC, 0xA799, 0xE04A, 0x2752,
|
||||||
0x1AE6, 0x5D35, 0x9540, 0xD293, 0x36E5, 0x7136, 0xB943, 0xFE90, 0x3988, 0x7E5B, 0xB62E, 0xF1FD,
|
0x6081, 0xA8F4, 0xEF27, 0x7039, 0x37EA, 0xFF9F, 0xB84C, 0x7F54, 0x3887, 0xF0F2, 0xB721, 0x6EE3, 0x2930,
|
||||||
0x283F, 0x6FEC, 0xA799, 0xE04A, 0x2752, 0x6081, 0xA8F4, 0xEF27, 0x7039, 0x37EA, 0xFF9F, 0xB84C,
|
0xE145, 0xA696, 0x618E, 0x265D, 0xEE28, 0xA9FB, 0x4D8D, 0x0A5E, 0xC22B, 0x85F8, 0x42E0, 0x0533, 0xCD46,
|
||||||
0x7F54, 0x3887, 0xF0F2, 0xB721, 0x6EE3, 0x2930, 0xE145, 0xA696, 0x618E, 0x265D, 0xEE28, 0xA9FB,
|
0x8A95, 0x5357, 0x1484, 0xDCF1, 0x9B22, 0x5C3A, 0x1BE9, 0xD39C, 0x944F
|
||||||
0x4D8D, 0x0A5E, 0xC22B, 0x85F8, 0x42E0, 0x0533, 0xCD46, 0x8A95, 0x5357, 0x1484, 0xDCF1, 0x9B22,
|
|
||||||
0x5C3A, 0x1BE9, 0xD39C, 0x944F
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,8 @@ public class Crc16Context : IChecksum
|
|||||||
|
|
||||||
_useNative = Native.IsSupported;
|
_useNative = Native.IsSupported;
|
||||||
|
|
||||||
_useCcitt = polynomial == CRC16CCITTContext.CRC16_CCITT_POLY && seed == CRC16CCITTContext.CRC16_CCITT_SEED &&
|
_useCcitt = polynomial == CRC16CCITTContext.CRC16_CCITT_POLY &&
|
||||||
|
seed == CRC16CCITTContext.CRC16_CCITT_SEED &&
|
||||||
inverse;
|
inverse;
|
||||||
|
|
||||||
_useIbm = polynomial == CRC16IBMContext.CRC16_IBM_POLY && seed == CRC16IBMContext.CRC16_IBM_SEED && !inverse;
|
_useIbm = polynomial == CRC16IBMContext.CRC16_IBM_POLY && seed == CRC16IBMContext.CRC16_IBM_SEED && !inverse;
|
||||||
@@ -79,8 +80,450 @@ public class Crc16Context : IChecksum
|
|||||||
else
|
else
|
||||||
_useNative = false;
|
_useNative = false;
|
||||||
|
|
||||||
if(!_useNative)
|
if(!_useNative) _table = table ?? GenerateTable(polynomial, inverse);
|
||||||
_table = table ?? GenerateTable(polynomial, inverse);
|
}
|
||||||
|
|
||||||
|
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
||||||
|
static extern IntPtr crc16_init();
|
||||||
|
|
||||||
|
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
||||||
|
static extern int crc16_update(IntPtr ctx, byte[] data, uint len);
|
||||||
|
|
||||||
|
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
||||||
|
static extern int crc16_final(IntPtr ctx, ref ushort crc);
|
||||||
|
|
||||||
|
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
||||||
|
static extern void crc16_free(IntPtr ctx);
|
||||||
|
|
||||||
|
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
||||||
|
static extern IntPtr crc16_ccitt_init();
|
||||||
|
|
||||||
|
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
||||||
|
static extern int crc16_ccitt_update(IntPtr ctx, byte[] data, uint len);
|
||||||
|
|
||||||
|
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
||||||
|
static extern int crc16_ccitt_final(IntPtr ctx, ref ushort crc);
|
||||||
|
|
||||||
|
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
||||||
|
static extern void crc16_ccitt_free(IntPtr ctx);
|
||||||
|
|
||||||
|
static void Step(ref ushort previousCrc, ushort[][] table, byte[] data, uint len)
|
||||||
|
{
|
||||||
|
// Unroll according to Intel slicing by uint8_t
|
||||||
|
// http://www.intel.com/technology/comms/perfnet/download/CRC_generators.pdf
|
||||||
|
// http://sourceforge.net/projects/slicing-by-8/
|
||||||
|
|
||||||
|
ushort crc;
|
||||||
|
var current_pos = 0;
|
||||||
|
const int unroll = 4;
|
||||||
|
const int bytes_at_once = 8 * unroll;
|
||||||
|
|
||||||
|
crc = previousCrc;
|
||||||
|
|
||||||
|
while(len >= bytes_at_once)
|
||||||
|
{
|
||||||
|
int unrolling;
|
||||||
|
|
||||||
|
for(unrolling = 0; unrolling < unroll; unrolling++)
|
||||||
|
{
|
||||||
|
// TODO: What trick is Microsoft doing here that's faster than arithmetic conversion
|
||||||
|
uint one = BitConverter.ToUInt32(data, current_pos) ^ crc;
|
||||||
|
current_pos += 4;
|
||||||
|
var two = BitConverter.ToUInt32(data, current_pos);
|
||||||
|
current_pos += 4;
|
||||||
|
|
||||||
|
crc = (ushort)(table[0][two >> 24 & 0xFF] ^
|
||||||
|
table[1][two >> 16 & 0xFF] ^
|
||||||
|
table[2][two >> 8 & 0xFF] ^
|
||||||
|
table[3][two & 0xFF] ^
|
||||||
|
table[4][one >> 24 & 0xFF] ^
|
||||||
|
table[5][one >> 16 & 0xFF] ^
|
||||||
|
table[6][one >> 8 & 0xFF] ^
|
||||||
|
table[7][one & 0xFF]);
|
||||||
|
}
|
||||||
|
|
||||||
|
len -= bytes_at_once;
|
||||||
|
}
|
||||||
|
|
||||||
|
while(len-- != 0) crc = (ushort)(crc >> 8 ^ table[0][crc & 0xFF ^ data[current_pos++]]);
|
||||||
|
|
||||||
|
previousCrc = crc;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void StepInverse(ref ushort previousCrc, ushort[][] table, byte[] data, uint len)
|
||||||
|
{
|
||||||
|
// Unroll according to Intel slicing by uint8_t
|
||||||
|
// http://www.intel.com/technology/comms/perfnet/download/CRC_generators.pdf
|
||||||
|
// http://sourceforge.net/projects/slicing-by-8/
|
||||||
|
|
||||||
|
ushort crc;
|
||||||
|
var current_pos = 0;
|
||||||
|
const int unroll = 4;
|
||||||
|
const int bytes_at_once = 8 * unroll;
|
||||||
|
|
||||||
|
crc = previousCrc;
|
||||||
|
|
||||||
|
while(len >= bytes_at_once)
|
||||||
|
{
|
||||||
|
int unrolling;
|
||||||
|
|
||||||
|
for(unrolling = 0; unrolling < unroll; unrolling++)
|
||||||
|
{
|
||||||
|
crc = (ushort)(table[7][data[current_pos + 0] ^ crc >> 8] ^
|
||||||
|
table[6][data[current_pos + 1] ^ crc & 0xFF] ^
|
||||||
|
table[5][data[current_pos + 2]] ^
|
||||||
|
table[4][data[current_pos + 3]] ^
|
||||||
|
table[3][data[current_pos + 4]] ^
|
||||||
|
table[2][data[current_pos + 5]] ^
|
||||||
|
table[1][data[current_pos + 6]] ^
|
||||||
|
table[0][data[current_pos + 7]]);
|
||||||
|
|
||||||
|
current_pos += 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
len -= bytes_at_once;
|
||||||
|
}
|
||||||
|
|
||||||
|
while(len-- != 0) crc = (ushort)(crc << 8 ^ table[0][crc >> 8 ^ data[current_pos++]]);
|
||||||
|
|
||||||
|
previousCrc = crc;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ushort[][] GenerateTable(ushort polynomial, bool inverseTable)
|
||||||
|
{
|
||||||
|
var table = new ushort[8][];
|
||||||
|
|
||||||
|
for(var i = 0; i < 8; i++) table[i] = new ushort[256];
|
||||||
|
|
||||||
|
if(!inverseTable)
|
||||||
|
{
|
||||||
|
for(uint i = 0; i < 256; i++)
|
||||||
|
{
|
||||||
|
uint entry = i;
|
||||||
|
|
||||||
|
for(var j = 0; j < 8; j++)
|
||||||
|
{
|
||||||
|
if((entry & 1) == 1)
|
||||||
|
entry = entry >> 1 ^ polynomial;
|
||||||
|
else
|
||||||
|
entry >>= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[0][i] = (ushort)entry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(uint i = 0; i < 256; i++)
|
||||||
|
{
|
||||||
|
uint entry = i << 8;
|
||||||
|
|
||||||
|
for(uint j = 0; j < 8; j++)
|
||||||
|
{
|
||||||
|
if((entry & 0x8000) > 0)
|
||||||
|
entry = entry << 1 ^ polynomial;
|
||||||
|
else
|
||||||
|
entry <<= 1;
|
||||||
|
|
||||||
|
table[0][i] = (ushort)entry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var slice = 1; slice < 8; slice++)
|
||||||
|
{
|
||||||
|
for(var i = 0; i < 256; i++)
|
||||||
|
{
|
||||||
|
if(inverseTable)
|
||||||
|
table[slice][i] = (ushort)(table[slice - 1][i] << 8 ^ table[0][table[slice - 1][i] >> 8]);
|
||||||
|
else
|
||||||
|
table[slice][i] = (ushort)(table[slice - 1][i] >> 8 ^ table[0][table[slice - 1][i] & 0xFF]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return table;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Gets the hash of a file in hexadecimal and as a byte array.</summary>
|
||||||
|
/// <param name="filename">File path.</param>
|
||||||
|
/// <param name="hash">Byte array of the hash value.</param>
|
||||||
|
/// <param name="polynomial">CRC polynomial</param>
|
||||||
|
/// <param name="seed">CRC seed</param>
|
||||||
|
/// <param name="table">CRC lookup table</param>
|
||||||
|
/// <param name="inverse">Is CRC inverted?</param>
|
||||||
|
public static string File(string filename, out byte[] hash, ushort polynomial, ushort seed, ushort[][] table,
|
||||||
|
bool inverse)
|
||||||
|
{
|
||||||
|
bool useNative = Native.IsSupported;
|
||||||
|
|
||||||
|
bool useCcitt = polynomial == CRC16CCITTContext.CRC16_CCITT_POLY &&
|
||||||
|
seed == CRC16CCITTContext.CRC16_CCITT_SEED &&
|
||||||
|
inverse;
|
||||||
|
|
||||||
|
bool useIbm = polynomial == CRC16IBMContext.CRC16_IBM_POLY &&
|
||||||
|
seed == CRC16IBMContext.CRC16_IBM_SEED &&
|
||||||
|
!inverse;
|
||||||
|
|
||||||
|
IntPtr nativeContext = IntPtr.Zero;
|
||||||
|
|
||||||
|
var fileStream = new FileStream(filename, FileMode.Open);
|
||||||
|
|
||||||
|
ushort localHashInt = seed;
|
||||||
|
|
||||||
|
switch(useNative)
|
||||||
|
{
|
||||||
|
case true when useCcitt:
|
||||||
|
nativeContext = crc16_ccitt_init();
|
||||||
|
useNative = nativeContext != IntPtr.Zero;
|
||||||
|
|
||||||
|
break;
|
||||||
|
case true when useIbm:
|
||||||
|
nativeContext = crc16_init();
|
||||||
|
useNative = nativeContext != IntPtr.Zero;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
ushort[][] localTable = table ?? GenerateTable(polynomial, inverse);
|
||||||
|
|
||||||
|
var buffer = new byte[65536];
|
||||||
|
int read = fileStream.Read(buffer, 0, 65536);
|
||||||
|
|
||||||
|
while(read > 0)
|
||||||
|
{
|
||||||
|
switch(useNative)
|
||||||
|
{
|
||||||
|
case true when useCcitt:
|
||||||
|
crc16_ccitt_update(nativeContext, buffer, (uint)read);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case true when useIbm:
|
||||||
|
crc16_update(nativeContext, buffer, (uint)read);
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
if(inverse)
|
||||||
|
StepInverse(ref localHashInt, localTable, buffer, (uint)read);
|
||||||
|
else
|
||||||
|
Step(ref localHashInt, localTable, buffer, (uint)read);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
read = fileStream.Read(buffer, 0, 65536);
|
||||||
|
}
|
||||||
|
|
||||||
|
localHashInt ^= seed;
|
||||||
|
|
||||||
|
switch(useNative)
|
||||||
|
{
|
||||||
|
case true when useCcitt:
|
||||||
|
crc16_ccitt_final(nativeContext, ref localHashInt);
|
||||||
|
crc16_ccitt_free(nativeContext);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case true when useIbm:
|
||||||
|
crc16_final(nativeContext, ref localHashInt);
|
||||||
|
crc16_free(nativeContext);
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
if(inverse) localHashInt = (ushort)~localHashInt;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hash = BigEndianBitConverter.GetBytes(localHashInt);
|
||||||
|
|
||||||
|
var crc16Output = new StringBuilder();
|
||||||
|
|
||||||
|
foreach(byte h in hash) crc16Output.Append(h.ToString("x2"));
|
||||||
|
|
||||||
|
fileStream.Close();
|
||||||
|
|
||||||
|
return crc16Output.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Gets the hash of the specified data buffer.</summary>
|
||||||
|
/// <param name="data">Data buffer.</param>
|
||||||
|
/// <param name="len">Length of the data buffer to hash.</param>
|
||||||
|
/// <param name="hash">Byte array of the hash value.</param>
|
||||||
|
/// <param name="polynomial">CRC polynomial</param>
|
||||||
|
/// <param name="seed">CRC seed</param>
|
||||||
|
/// <param name="table">CRC lookup table</param>
|
||||||
|
/// <param name="inverse">Is CRC inverted?</param>
|
||||||
|
public static string Data(byte[] data, uint len, out byte[] hash, ushort polynomial, ushort seed, ushort[][] table,
|
||||||
|
bool inverse)
|
||||||
|
{
|
||||||
|
bool useNative = Native.IsSupported;
|
||||||
|
|
||||||
|
bool useCcitt = polynomial == CRC16CCITTContext.CRC16_CCITT_POLY &&
|
||||||
|
seed == CRC16CCITTContext.CRC16_CCITT_SEED &&
|
||||||
|
inverse;
|
||||||
|
|
||||||
|
bool useIbm = polynomial == CRC16IBMContext.CRC16_IBM_POLY &&
|
||||||
|
seed == CRC16IBMContext.CRC16_IBM_SEED &&
|
||||||
|
!inverse;
|
||||||
|
|
||||||
|
IntPtr nativeContext = IntPtr.Zero;
|
||||||
|
|
||||||
|
ushort localHashInt = seed;
|
||||||
|
|
||||||
|
switch(useNative)
|
||||||
|
{
|
||||||
|
case true when useCcitt:
|
||||||
|
nativeContext = crc16_ccitt_init();
|
||||||
|
useNative = nativeContext != IntPtr.Zero;
|
||||||
|
|
||||||
|
break;
|
||||||
|
case true when useIbm:
|
||||||
|
nativeContext = crc16_init();
|
||||||
|
useNative = nativeContext != IntPtr.Zero;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
ushort[][] localTable = table ?? GenerateTable(polynomial, inverse);
|
||||||
|
|
||||||
|
switch(useNative)
|
||||||
|
{
|
||||||
|
case true when useCcitt:
|
||||||
|
crc16_ccitt_update(nativeContext, data, len);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case true when useIbm:
|
||||||
|
crc16_update(nativeContext, data, len);
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
if(inverse)
|
||||||
|
StepInverse(ref localHashInt, localTable, data, len);
|
||||||
|
else
|
||||||
|
Step(ref localHashInt, localTable, data, len);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
localHashInt ^= seed;
|
||||||
|
|
||||||
|
switch(useNative)
|
||||||
|
{
|
||||||
|
case true when useCcitt:
|
||||||
|
crc16_ccitt_final(nativeContext, ref localHashInt);
|
||||||
|
crc16_ccitt_free(nativeContext);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case true when useIbm:
|
||||||
|
crc16_final(nativeContext, ref localHashInt);
|
||||||
|
crc16_free(nativeContext);
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
if(inverse) localHashInt = (ushort)~localHashInt;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hash = BigEndianBitConverter.GetBytes(localHashInt);
|
||||||
|
|
||||||
|
var crc16Output = new StringBuilder();
|
||||||
|
|
||||||
|
foreach(byte h in hash) crc16Output.Append(h.ToString("x2"));
|
||||||
|
|
||||||
|
return crc16Output.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Calculates the CRC16 of the specified buffer with the specified parameters</summary>
|
||||||
|
/// <param name="buffer">Buffer</param>
|
||||||
|
/// <param name="polynomial">Polynomial</param>
|
||||||
|
/// <param name="seed">Seed</param>
|
||||||
|
/// <param name="table">Pre-generated lookup table</param>
|
||||||
|
/// <param name="inverse">Inverse CRC</param>
|
||||||
|
/// <returns>CRC16</returns>
|
||||||
|
public static ushort Calculate(byte[] buffer, ushort polynomial, ushort seed, ushort[][] table, bool inverse)
|
||||||
|
{
|
||||||
|
bool useNative = Native.IsSupported;
|
||||||
|
|
||||||
|
bool useCcitt = polynomial == CRC16CCITTContext.CRC16_CCITT_POLY &&
|
||||||
|
seed == CRC16CCITTContext.CRC16_CCITT_SEED &&
|
||||||
|
inverse;
|
||||||
|
|
||||||
|
bool useIbm = polynomial == CRC16IBMContext.CRC16_IBM_POLY &&
|
||||||
|
seed == CRC16IBMContext.CRC16_IBM_SEED &&
|
||||||
|
!inverse;
|
||||||
|
|
||||||
|
IntPtr nativeContext = IntPtr.Zero;
|
||||||
|
|
||||||
|
ushort localHashInt = seed;
|
||||||
|
|
||||||
|
switch(useNative)
|
||||||
|
{
|
||||||
|
case true when useCcitt:
|
||||||
|
nativeContext = crc16_ccitt_init();
|
||||||
|
useNative = nativeContext != IntPtr.Zero;
|
||||||
|
|
||||||
|
break;
|
||||||
|
case true when useIbm:
|
||||||
|
nativeContext = crc16_init();
|
||||||
|
useNative = nativeContext != IntPtr.Zero;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
ushort[][] localTable = table ?? GenerateTable(polynomial, inverse);
|
||||||
|
|
||||||
|
switch(useNative)
|
||||||
|
{
|
||||||
|
case true when useCcitt:
|
||||||
|
crc16_ccitt_update(nativeContext, buffer, (uint)buffer.Length);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case true when useIbm:
|
||||||
|
crc16_update(nativeContext, buffer, (uint)buffer.Length);
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
if(inverse)
|
||||||
|
StepInverse(ref localHashInt, localTable, buffer, (uint)buffer.Length);
|
||||||
|
else
|
||||||
|
Step(ref localHashInt, localTable, buffer, (uint)buffer.Length);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
localHashInt ^= seed;
|
||||||
|
|
||||||
|
switch(useNative)
|
||||||
|
{
|
||||||
|
case true when useCcitt:
|
||||||
|
crc16_ccitt_final(nativeContext, ref localHashInt);
|
||||||
|
crc16_ccitt_free(nativeContext);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case true when useIbm:
|
||||||
|
crc16_final(nativeContext, ref localHashInt);
|
||||||
|
crc16_free(nativeContext);
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
if(inverse) localHashInt = (ushort)~localHashInt;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return localHashInt;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IChecksum Members
|
#region IChecksum Members
|
||||||
@@ -182,446 +625,10 @@ public class Crc16Context : IChecksum
|
|||||||
|
|
||||||
byte[] finalBytes = BigEndianBitConverter.GetBytes(final);
|
byte[] finalBytes = BigEndianBitConverter.GetBytes(final);
|
||||||
|
|
||||||
for(var i = 0; i < finalBytes.Length; i++)
|
for(var i = 0; i < finalBytes.Length; i++) crc16Output.Append(finalBytes[i].ToString("x2"));
|
||||||
crc16Output.Append(finalBytes[i].ToString("x2"));
|
|
||||||
|
|
||||||
return crc16Output.ToString();
|
return crc16Output.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
|
||||||
static extern IntPtr crc16_init();
|
|
||||||
|
|
||||||
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
|
||||||
static extern int crc16_update(IntPtr ctx, byte[] data, uint len);
|
|
||||||
|
|
||||||
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
|
||||||
static extern int crc16_final(IntPtr ctx, ref ushort crc);
|
|
||||||
|
|
||||||
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
|
||||||
static extern void crc16_free(IntPtr ctx);
|
|
||||||
|
|
||||||
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
|
||||||
static extern IntPtr crc16_ccitt_init();
|
|
||||||
|
|
||||||
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
|
||||||
static extern int crc16_ccitt_update(IntPtr ctx, byte[] data, uint len);
|
|
||||||
|
|
||||||
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
|
||||||
static extern int crc16_ccitt_final(IntPtr ctx, ref ushort crc);
|
|
||||||
|
|
||||||
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
|
||||||
static extern void crc16_ccitt_free(IntPtr ctx);
|
|
||||||
|
|
||||||
static void Step(ref ushort previousCrc, ushort[][] table, byte[] data, uint len)
|
|
||||||
{
|
|
||||||
// Unroll according to Intel slicing by uint8_t
|
|
||||||
// http://www.intel.com/technology/comms/perfnet/download/CRC_generators.pdf
|
|
||||||
// http://sourceforge.net/projects/slicing-by-8/
|
|
||||||
|
|
||||||
ushort crc;
|
|
||||||
var current_pos = 0;
|
|
||||||
const int unroll = 4;
|
|
||||||
const int bytes_at_once = 8 * unroll;
|
|
||||||
|
|
||||||
crc = previousCrc;
|
|
||||||
|
|
||||||
while(len >= bytes_at_once)
|
|
||||||
{
|
|
||||||
int unrolling;
|
|
||||||
|
|
||||||
for(unrolling = 0; unrolling < unroll; unrolling++)
|
|
||||||
{
|
|
||||||
// TODO: What trick is Microsoft doing here that's faster than arithmetic conversion
|
|
||||||
uint one = BitConverter.ToUInt32(data, current_pos) ^ crc;
|
|
||||||
current_pos += 4;
|
|
||||||
var two = BitConverter.ToUInt32(data, current_pos);
|
|
||||||
current_pos += 4;
|
|
||||||
|
|
||||||
crc = (ushort)(table[0][two >> 24 & 0xFF] ^ table[1][two >> 16 & 0xFF] ^ table[2][two >> 8 & 0xFF] ^
|
|
||||||
table[3][two & 0xFF] ^ table[4][one >> 24 & 0xFF] ^ table[5][one >> 16 & 0xFF] ^
|
|
||||||
table[6][one >> 8 & 0xFF] ^ table[7][one & 0xFF]);
|
|
||||||
}
|
|
||||||
|
|
||||||
len -= bytes_at_once;
|
|
||||||
}
|
|
||||||
|
|
||||||
while(len-- != 0)
|
|
||||||
crc = (ushort)(crc >> 8 ^ table[0][crc & 0xFF ^ data[current_pos++]]);
|
|
||||||
|
|
||||||
previousCrc = crc;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void StepInverse(ref ushort previousCrc, ushort[][] table, byte[] data, uint len)
|
|
||||||
{
|
|
||||||
// Unroll according to Intel slicing by uint8_t
|
|
||||||
// http://www.intel.com/technology/comms/perfnet/download/CRC_generators.pdf
|
|
||||||
// http://sourceforge.net/projects/slicing-by-8/
|
|
||||||
|
|
||||||
ushort crc;
|
|
||||||
var current_pos = 0;
|
|
||||||
const int unroll = 4;
|
|
||||||
const int bytes_at_once = 8 * unroll;
|
|
||||||
|
|
||||||
crc = previousCrc;
|
|
||||||
|
|
||||||
while(len >= bytes_at_once)
|
|
||||||
{
|
|
||||||
int unrolling;
|
|
||||||
|
|
||||||
for(unrolling = 0; unrolling < unroll; unrolling++)
|
|
||||||
{
|
|
||||||
crc = (ushort)(table[7][data[current_pos + 0] ^ crc >> 8] ^
|
|
||||||
table[6][data[current_pos + 1] ^ crc & 0xFF] ^ table[5][data[current_pos + 2]] ^
|
|
||||||
table[4][data[current_pos + 3]] ^ table[3][data[current_pos + 4]] ^
|
|
||||||
table[2][data[current_pos + 5]] ^ table[1][data[current_pos + 6]] ^
|
|
||||||
table[0][data[current_pos + 7]]);
|
|
||||||
|
|
||||||
current_pos += 8;
|
|
||||||
}
|
|
||||||
|
|
||||||
len -= bytes_at_once;
|
|
||||||
}
|
|
||||||
|
|
||||||
while(len-- != 0)
|
|
||||||
crc = (ushort)(crc << 8 ^ table[0][crc >> 8 ^ data[current_pos++]]);
|
|
||||||
|
|
||||||
previousCrc = crc;
|
|
||||||
}
|
|
||||||
|
|
||||||
static ushort[][] GenerateTable(ushort polynomial, bool inverseTable)
|
|
||||||
{
|
|
||||||
var table = new ushort[8][];
|
|
||||||
|
|
||||||
for(var i = 0; i < 8; i++)
|
|
||||||
table[i] = new ushort[256];
|
|
||||||
|
|
||||||
if(!inverseTable)
|
|
||||||
{
|
|
||||||
for(uint i = 0; i < 256; i++)
|
|
||||||
{
|
|
||||||
uint entry = i;
|
|
||||||
|
|
||||||
for(var j = 0; j < 8; j++)
|
|
||||||
{
|
|
||||||
if((entry & 1) == 1)
|
|
||||||
entry = entry >> 1 ^ polynomial;
|
|
||||||
else
|
|
||||||
entry >>= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
table[0][i] = (ushort)entry;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for(uint i = 0; i < 256; i++)
|
|
||||||
{
|
|
||||||
uint entry = i << 8;
|
|
||||||
|
|
||||||
for(uint j = 0; j < 8; j++)
|
|
||||||
{
|
|
||||||
if((entry & 0x8000) > 0)
|
|
||||||
entry = entry << 1 ^ polynomial;
|
|
||||||
else
|
|
||||||
entry <<= 1;
|
|
||||||
|
|
||||||
table[0][i] = (ushort)entry;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for(var slice = 1; slice < 8; slice++)
|
|
||||||
for(var i = 0; i < 256; i++)
|
|
||||||
{
|
|
||||||
if(inverseTable)
|
|
||||||
table[slice][i] = (ushort)(table[slice - 1][i] << 8 ^ table[0][table[slice - 1][i] >> 8]);
|
|
||||||
else
|
|
||||||
table[slice][i] = (ushort)(table[slice - 1][i] >> 8 ^ table[0][table[slice - 1][i] & 0xFF]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return table;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>Gets the hash of a file in hexadecimal and as a byte array.</summary>
|
|
||||||
/// <param name="filename">File path.</param>
|
|
||||||
/// <param name="hash">Byte array of the hash value.</param>
|
|
||||||
/// <param name="polynomial">CRC polynomial</param>
|
|
||||||
/// <param name="seed">CRC seed</param>
|
|
||||||
/// <param name="table">CRC lookup table</param>
|
|
||||||
/// <param name="inverse">Is CRC inverted?</param>
|
|
||||||
public static string File(string filename, out byte[] hash, ushort polynomial, ushort seed, ushort[][] table,
|
|
||||||
bool inverse)
|
|
||||||
{
|
|
||||||
bool useNative = Native.IsSupported;
|
|
||||||
|
|
||||||
bool useCcitt = polynomial == CRC16CCITTContext.CRC16_CCITT_POLY &&
|
|
||||||
seed == CRC16CCITTContext.CRC16_CCITT_SEED && inverse;
|
|
||||||
|
|
||||||
bool useIbm = polynomial == CRC16IBMContext.CRC16_IBM_POLY && seed == CRC16IBMContext.CRC16_IBM_SEED &&
|
|
||||||
!inverse;
|
|
||||||
|
|
||||||
IntPtr nativeContext = IntPtr.Zero;
|
|
||||||
|
|
||||||
var fileStream = new FileStream(filename, FileMode.Open);
|
|
||||||
|
|
||||||
ushort localHashInt = seed;
|
|
||||||
|
|
||||||
switch(useNative)
|
|
||||||
{
|
|
||||||
case true when useCcitt:
|
|
||||||
nativeContext = crc16_ccitt_init();
|
|
||||||
useNative = nativeContext != IntPtr.Zero;
|
|
||||||
|
|
||||||
break;
|
|
||||||
case true when useIbm:
|
|
||||||
nativeContext = crc16_init();
|
|
||||||
useNative = nativeContext != IntPtr.Zero;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
ushort[][] localTable = table ?? GenerateTable(polynomial, inverse);
|
|
||||||
|
|
||||||
var buffer = new byte[65536];
|
|
||||||
int read = fileStream.Read(buffer, 0, 65536);
|
|
||||||
|
|
||||||
while(read > 0)
|
|
||||||
{
|
|
||||||
switch(useNative)
|
|
||||||
{
|
|
||||||
case true when useCcitt:
|
|
||||||
crc16_ccitt_update(nativeContext, buffer, (uint)read);
|
|
||||||
|
|
||||||
break;
|
|
||||||
case true when useIbm:
|
|
||||||
crc16_update(nativeContext, buffer, (uint)read);
|
|
||||||
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
if(inverse)
|
|
||||||
StepInverse(ref localHashInt, localTable, buffer, (uint)read);
|
|
||||||
else
|
|
||||||
Step(ref localHashInt, localTable, buffer, (uint)read);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
read = fileStream.Read(buffer, 0, 65536);
|
|
||||||
}
|
|
||||||
|
|
||||||
localHashInt ^= seed;
|
|
||||||
|
|
||||||
switch(useNative)
|
|
||||||
{
|
|
||||||
case true when useCcitt:
|
|
||||||
crc16_ccitt_final(nativeContext, ref localHashInt);
|
|
||||||
crc16_ccitt_free(nativeContext);
|
|
||||||
|
|
||||||
break;
|
|
||||||
case true when useIbm:
|
|
||||||
crc16_final(nativeContext, ref localHashInt);
|
|
||||||
crc16_free(nativeContext);
|
|
||||||
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
if(inverse)
|
|
||||||
localHashInt = (ushort)~localHashInt;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
hash = BigEndianBitConverter.GetBytes(localHashInt);
|
|
||||||
|
|
||||||
var crc16Output = new StringBuilder();
|
|
||||||
|
|
||||||
foreach(byte h in hash)
|
|
||||||
crc16Output.Append(h.ToString("x2"));
|
|
||||||
|
|
||||||
fileStream.Close();
|
|
||||||
|
|
||||||
return crc16Output.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>Gets the hash of the specified data buffer.</summary>
|
|
||||||
/// <param name="data">Data buffer.</param>
|
|
||||||
/// <param name="len">Length of the data buffer to hash.</param>
|
|
||||||
/// <param name="hash">Byte array of the hash value.</param>
|
|
||||||
/// <param name="polynomial">CRC polynomial</param>
|
|
||||||
/// <param name="seed">CRC seed</param>
|
|
||||||
/// <param name="table">CRC lookup table</param>
|
|
||||||
/// <param name="inverse">Is CRC inverted?</param>
|
|
||||||
public static string Data(byte[] data, uint len, out byte[] hash, ushort polynomial, ushort seed, ushort[][] table,
|
|
||||||
bool inverse)
|
|
||||||
{
|
|
||||||
bool useNative = Native.IsSupported;
|
|
||||||
|
|
||||||
bool useCcitt = polynomial == CRC16CCITTContext.CRC16_CCITT_POLY &&
|
|
||||||
seed == CRC16CCITTContext.CRC16_CCITT_SEED && inverse;
|
|
||||||
|
|
||||||
bool useIbm = polynomial == CRC16IBMContext.CRC16_IBM_POLY && seed == CRC16IBMContext.CRC16_IBM_SEED &&
|
|
||||||
!inverse;
|
|
||||||
|
|
||||||
IntPtr nativeContext = IntPtr.Zero;
|
|
||||||
|
|
||||||
ushort localHashInt = seed;
|
|
||||||
|
|
||||||
switch(useNative)
|
|
||||||
{
|
|
||||||
case true when useCcitt:
|
|
||||||
nativeContext = crc16_ccitt_init();
|
|
||||||
useNative = nativeContext != IntPtr.Zero;
|
|
||||||
|
|
||||||
break;
|
|
||||||
case true when useIbm:
|
|
||||||
nativeContext = crc16_init();
|
|
||||||
useNative = nativeContext != IntPtr.Zero;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
ushort[][] localTable = table ?? GenerateTable(polynomial, inverse);
|
|
||||||
|
|
||||||
switch(useNative)
|
|
||||||
{
|
|
||||||
case true when useCcitt:
|
|
||||||
crc16_ccitt_update(nativeContext, data, len);
|
|
||||||
|
|
||||||
break;
|
|
||||||
case true when useIbm:
|
|
||||||
crc16_update(nativeContext, data, len);
|
|
||||||
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
if(inverse)
|
|
||||||
StepInverse(ref localHashInt, localTable, data, len);
|
|
||||||
else
|
|
||||||
Step(ref localHashInt, localTable, data, len);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
localHashInt ^= seed;
|
|
||||||
|
|
||||||
switch(useNative)
|
|
||||||
{
|
|
||||||
case true when useCcitt:
|
|
||||||
crc16_ccitt_final(nativeContext, ref localHashInt);
|
|
||||||
crc16_ccitt_free(nativeContext);
|
|
||||||
|
|
||||||
break;
|
|
||||||
case true when useIbm:
|
|
||||||
crc16_final(nativeContext, ref localHashInt);
|
|
||||||
crc16_free(nativeContext);
|
|
||||||
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
if(inverse)
|
|
||||||
localHashInt = (ushort)~localHashInt;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
hash = BigEndianBitConverter.GetBytes(localHashInt);
|
|
||||||
|
|
||||||
var crc16Output = new StringBuilder();
|
|
||||||
|
|
||||||
foreach(byte h in hash)
|
|
||||||
crc16Output.Append(h.ToString("x2"));
|
|
||||||
|
|
||||||
return crc16Output.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>Calculates the CRC16 of the specified buffer with the specified parameters</summary>
|
|
||||||
/// <param name="buffer">Buffer</param>
|
|
||||||
/// <param name="polynomial">Polynomial</param>
|
|
||||||
/// <param name="seed">Seed</param>
|
|
||||||
/// <param name="table">Pre-generated lookup table</param>
|
|
||||||
/// <param name="inverse">Inverse CRC</param>
|
|
||||||
/// <returns>CRC16</returns>
|
|
||||||
public static ushort Calculate(byte[] buffer, ushort polynomial, ushort seed, ushort[][] table, bool inverse)
|
|
||||||
{
|
|
||||||
bool useNative = Native.IsSupported;
|
|
||||||
|
|
||||||
bool useCcitt = polynomial == CRC16CCITTContext.CRC16_CCITT_POLY &&
|
|
||||||
seed == CRC16CCITTContext.CRC16_CCITT_SEED && inverse;
|
|
||||||
|
|
||||||
bool useIbm = polynomial == CRC16IBMContext.CRC16_IBM_POLY && seed == CRC16IBMContext.CRC16_IBM_SEED &&
|
|
||||||
!inverse;
|
|
||||||
|
|
||||||
IntPtr nativeContext = IntPtr.Zero;
|
|
||||||
|
|
||||||
ushort localHashInt = seed;
|
|
||||||
|
|
||||||
switch(useNative)
|
|
||||||
{
|
|
||||||
case true when useCcitt:
|
|
||||||
nativeContext = crc16_ccitt_init();
|
|
||||||
useNative = nativeContext != IntPtr.Zero;
|
|
||||||
|
|
||||||
break;
|
|
||||||
case true when useIbm:
|
|
||||||
nativeContext = crc16_init();
|
|
||||||
useNative = nativeContext != IntPtr.Zero;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
ushort[][] localTable = table ?? GenerateTable(polynomial, inverse);
|
|
||||||
|
|
||||||
switch(useNative)
|
|
||||||
{
|
|
||||||
case true when useCcitt:
|
|
||||||
crc16_ccitt_update(nativeContext, buffer, (uint)buffer.Length);
|
|
||||||
|
|
||||||
break;
|
|
||||||
case true when useIbm:
|
|
||||||
crc16_update(nativeContext, buffer, (uint)buffer.Length);
|
|
||||||
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
if(inverse)
|
|
||||||
StepInverse(ref localHashInt, localTable, buffer, (uint)buffer.Length);
|
|
||||||
else
|
|
||||||
Step(ref localHashInt, localTable, buffer, (uint)buffer.Length);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
localHashInt ^= seed;
|
|
||||||
|
|
||||||
switch(useNative)
|
|
||||||
{
|
|
||||||
case true when useCcitt:
|
|
||||||
crc16_ccitt_final(nativeContext, ref localHashInt);
|
|
||||||
crc16_ccitt_free(nativeContext);
|
|
||||||
|
|
||||||
break;
|
|
||||||
case true when useIbm:
|
|
||||||
crc16_final(nativeContext, ref localHashInt);
|
|
||||||
crc16_free(nativeContext);
|
|
||||||
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
if(inverse)
|
|
||||||
localHashInt = (ushort)~localHashInt;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return localHashInt;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -43,203 +43,187 @@ public sealed class CRC16IBMContext : Crc16Context
|
|||||||
{
|
{
|
||||||
new ushort[]
|
new ushort[]
|
||||||
{
|
{
|
||||||
0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601, 0x06C0, 0x0780, 0xC741,
|
0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500,
|
||||||
0x0500, 0xC5C1, 0xC481, 0x0440, 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,
|
0xC5C1, 0xC481, 0x0440, 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, 0x0A00, 0xCAC1,
|
||||||
0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, 0xD801, 0x18C0, 0x1980, 0xD941,
|
0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81,
|
||||||
0x1B00, 0xDBC1, 0xDA81, 0x1A40, 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,
|
0x1A40, 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41, 0x1400, 0xD4C1, 0xD581, 0x1540,
|
||||||
0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641, 0xD201, 0x12C0, 0x1380, 0xD341,
|
0xD701, 0x17C0, 0x1680, 0xD641, 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, 0xF001,
|
||||||
0x1100, 0xD1C1, 0xD081, 0x1040, 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,
|
0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0,
|
||||||
0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441, 0x3C00, 0xFCC1, 0xFD81, 0x3D40,
|
0x3480, 0xF441, 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, 0xFA01, 0x3AC0, 0x3B80,
|
||||||
0xFF01, 0x3FC0, 0x3E80, 0xFE41, 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,
|
0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,
|
||||||
0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, 0xEE01, 0x2EC0, 0x2F80, 0xEF41,
|
0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40, 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700,
|
||||||
0x2D00, 0xEDC1, 0xEC81, 0x2C40, 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,
|
0xE7C1, 0xE681, 0x2640, 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, 0xA001, 0x60C0,
|
||||||
0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, 0xA001, 0x60C0, 0x6180, 0xA141,
|
0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240, 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480,
|
||||||
0x6300, 0xA3C1, 0xA281, 0x6240, 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,
|
0xA441, 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, 0xAA01, 0x6AC0, 0x6B80, 0xAB41,
|
||||||
0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, 0xAA01, 0x6AC0, 0x6B80, 0xAB41,
|
0x6900, 0xA9C1, 0xA881, 0x6840, 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, 0xBE01,
|
||||||
0x6900, 0xA9C1, 0xA881, 0x6840, 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,
|
0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1,
|
||||||
0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, 0xB401, 0x74C0, 0x7580, 0xB541,
|
0xB681, 0x7640, 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, 0x5000, 0x90C1, 0x9181,
|
||||||
0x7700, 0xB7C1, 0xB681, 0x7640, 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,
|
0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,
|
||||||
0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, 0x9601, 0x56C0, 0x5780, 0x9741,
|
0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901,
|
||||||
0x5500, 0x95C1, 0x9481, 0x5440, 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,
|
0x59C0, 0x5880, 0x9841, 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, 0x4E00, 0x8EC1,
|
||||||
0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841, 0x8801, 0x48C0, 0x4980, 0x8941,
|
0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680,
|
||||||
0x4B00, 0x8BC1, 0x8A81, 0x4A40, 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,
|
0x8641, 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040
|
||||||
0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, 0x8201, 0x42C0, 0x4380, 0x8341,
|
|
||||||
0x4100, 0x81C1, 0x8081, 0x4040
|
|
||||||
},
|
},
|
||||||
new ushort[]
|
new ushort[]
|
||||||
{
|
{
|
||||||
0x0000, 0x9001, 0x6001, 0xF000, 0xC002, 0x5003, 0xA003, 0x3002, 0xC007, 0x5006, 0xA006, 0x3007,
|
0x0000, 0x9001, 0x6001, 0xF000, 0xC002, 0x5003, 0xA003, 0x3002, 0xC007, 0x5006, 0xA006, 0x3007, 0x0005,
|
||||||
0x0005, 0x9004, 0x6004, 0xF005, 0xC00D, 0x500C, 0xA00C, 0x300D, 0x000F, 0x900E, 0x600E, 0xF00F,
|
0x9004, 0x6004, 0xF005, 0xC00D, 0x500C, 0xA00C, 0x300D, 0x000F, 0x900E, 0x600E, 0xF00F, 0x000A, 0x900B,
|
||||||
0x000A, 0x900B, 0x600B, 0xF00A, 0xC008, 0x5009, 0xA009, 0x3008, 0xC019, 0x5018, 0xA018, 0x3019,
|
0x600B, 0xF00A, 0xC008, 0x5009, 0xA009, 0x3008, 0xC019, 0x5018, 0xA018, 0x3019, 0x001B, 0x901A, 0x601A,
|
||||||
0x001B, 0x901A, 0x601A, 0xF01B, 0x001E, 0x901F, 0x601F, 0xF01E, 0xC01C, 0x501D, 0xA01D, 0x301C,
|
0xF01B, 0x001E, 0x901F, 0x601F, 0xF01E, 0xC01C, 0x501D, 0xA01D, 0x301C, 0x0014, 0x9015, 0x6015, 0xF014,
|
||||||
0x0014, 0x9015, 0x6015, 0xF014, 0xC016, 0x5017, 0xA017, 0x3016, 0xC013, 0x5012, 0xA012, 0x3013,
|
0xC016, 0x5017, 0xA017, 0x3016, 0xC013, 0x5012, 0xA012, 0x3013, 0x0011, 0x9010, 0x6010, 0xF011, 0xC031,
|
||||||
0x0011, 0x9010, 0x6010, 0xF011, 0xC031, 0x5030, 0xA030, 0x3031, 0x0033, 0x9032, 0x6032, 0xF033,
|
0x5030, 0xA030, 0x3031, 0x0033, 0x9032, 0x6032, 0xF033, 0x0036, 0x9037, 0x6037, 0xF036, 0xC034, 0x5035,
|
||||||
0x0036, 0x9037, 0x6037, 0xF036, 0xC034, 0x5035, 0xA035, 0x3034, 0x003C, 0x903D, 0x603D, 0xF03C,
|
0xA035, 0x3034, 0x003C, 0x903D, 0x603D, 0xF03C, 0xC03E, 0x503F, 0xA03F, 0x303E, 0xC03B, 0x503A, 0xA03A,
|
||||||
0xC03E, 0x503F, 0xA03F, 0x303E, 0xC03B, 0x503A, 0xA03A, 0x303B, 0x0039, 0x9038, 0x6038, 0xF039,
|
0x303B, 0x0039, 0x9038, 0x6038, 0xF039, 0x0028, 0x9029, 0x6029, 0xF028, 0xC02A, 0x502B, 0xA02B, 0x302A,
|
||||||
0x0028, 0x9029, 0x6029, 0xF028, 0xC02A, 0x502B, 0xA02B, 0x302A, 0xC02F, 0x502E, 0xA02E, 0x302F,
|
0xC02F, 0x502E, 0xA02E, 0x302F, 0x002D, 0x902C, 0x602C, 0xF02D, 0xC025, 0x5024, 0xA024, 0x3025, 0x0027,
|
||||||
0x002D, 0x902C, 0x602C, 0xF02D, 0xC025, 0x5024, 0xA024, 0x3025, 0x0027, 0x9026, 0x6026, 0xF027,
|
0x9026, 0x6026, 0xF027, 0x0022, 0x9023, 0x6023, 0xF022, 0xC020, 0x5021, 0xA021, 0x3020, 0xC061, 0x5060,
|
||||||
0x0022, 0x9023, 0x6023, 0xF022, 0xC020, 0x5021, 0xA021, 0x3020, 0xC061, 0x5060, 0xA060, 0x3061,
|
0xA060, 0x3061, 0x0063, 0x9062, 0x6062, 0xF063, 0x0066, 0x9067, 0x6067, 0xF066, 0xC064, 0x5065, 0xA065,
|
||||||
0x0063, 0x9062, 0x6062, 0xF063, 0x0066, 0x9067, 0x6067, 0xF066, 0xC064, 0x5065, 0xA065, 0x3064,
|
0x3064, 0x006C, 0x906D, 0x606D, 0xF06C, 0xC06E, 0x506F, 0xA06F, 0x306E, 0xC06B, 0x506A, 0xA06A, 0x306B,
|
||||||
0x006C, 0x906D, 0x606D, 0xF06C, 0xC06E, 0x506F, 0xA06F, 0x306E, 0xC06B, 0x506A, 0xA06A, 0x306B,
|
0x0069, 0x9068, 0x6068, 0xF069, 0x0078, 0x9079, 0x6079, 0xF078, 0xC07A, 0x507B, 0xA07B, 0x307A, 0xC07F,
|
||||||
0x0069, 0x9068, 0x6068, 0xF069, 0x0078, 0x9079, 0x6079, 0xF078, 0xC07A, 0x507B, 0xA07B, 0x307A,
|
0x507E, 0xA07E, 0x307F, 0x007D, 0x907C, 0x607C, 0xF07D, 0xC075, 0x5074, 0xA074, 0x3075, 0x0077, 0x9076,
|
||||||
0xC07F, 0x507E, 0xA07E, 0x307F, 0x007D, 0x907C, 0x607C, 0xF07D, 0xC075, 0x5074, 0xA074, 0x3075,
|
0x6076, 0xF077, 0x0072, 0x9073, 0x6073, 0xF072, 0xC070, 0x5071, 0xA071, 0x3070, 0x0050, 0x9051, 0x6051,
|
||||||
0x0077, 0x9076, 0x6076, 0xF077, 0x0072, 0x9073, 0x6073, 0xF072, 0xC070, 0x5071, 0xA071, 0x3070,
|
0xF050, 0xC052, 0x5053, 0xA053, 0x3052, 0xC057, 0x5056, 0xA056, 0x3057, 0x0055, 0x9054, 0x6054, 0xF055,
|
||||||
0x0050, 0x9051, 0x6051, 0xF050, 0xC052, 0x5053, 0xA053, 0x3052, 0xC057, 0x5056, 0xA056, 0x3057,
|
0xC05D, 0x505C, 0xA05C, 0x305D, 0x005F, 0x905E, 0x605E, 0xF05F, 0x005A, 0x905B, 0x605B, 0xF05A, 0xC058,
|
||||||
0x0055, 0x9054, 0x6054, 0xF055, 0xC05D, 0x505C, 0xA05C, 0x305D, 0x005F, 0x905E, 0x605E, 0xF05F,
|
0x5059, 0xA059, 0x3058, 0xC049, 0x5048, 0xA048, 0x3049, 0x004B, 0x904A, 0x604A, 0xF04B, 0x004E, 0x904F,
|
||||||
0x005A, 0x905B, 0x605B, 0xF05A, 0xC058, 0x5059, 0xA059, 0x3058, 0xC049, 0x5048, 0xA048, 0x3049,
|
0x604F, 0xF04E, 0xC04C, 0x504D, 0xA04D, 0x304C, 0x0044, 0x9045, 0x6045, 0xF044, 0xC046, 0x5047, 0xA047,
|
||||||
0x004B, 0x904A, 0x604A, 0xF04B, 0x004E, 0x904F, 0x604F, 0xF04E, 0xC04C, 0x504D, 0xA04D, 0x304C,
|
0x3046, 0xC043, 0x5042, 0xA042, 0x3043, 0x0041, 0x9040, 0x6040, 0xF041
|
||||||
0x0044, 0x9045, 0x6045, 0xF044, 0xC046, 0x5047, 0xA047, 0x3046, 0xC043, 0x5042, 0xA042, 0x3043,
|
|
||||||
0x0041, 0x9040, 0x6040, 0xF041
|
|
||||||
},
|
},
|
||||||
new ushort[]
|
new ushort[]
|
||||||
{
|
{
|
||||||
0x0000, 0xC051, 0xC0A1, 0x00F0, 0xC141, 0x0110, 0x01E0, 0xC1B1, 0xC281, 0x02D0, 0x0220, 0xC271,
|
0x0000, 0xC051, 0xC0A1, 0x00F0, 0xC141, 0x0110, 0x01E0, 0xC1B1, 0xC281, 0x02D0, 0x0220, 0xC271, 0x03C0,
|
||||||
0x03C0, 0xC391, 0xC361, 0x0330, 0xC501, 0x0550, 0x05A0, 0xC5F1, 0x0440, 0xC411, 0xC4E1, 0x04B0,
|
0xC391, 0xC361, 0x0330, 0xC501, 0x0550, 0x05A0, 0xC5F1, 0x0440, 0xC411, 0xC4E1, 0x04B0, 0x0780, 0xC7D1,
|
||||||
0x0780, 0xC7D1, 0xC721, 0x0770, 0xC6C1, 0x0690, 0x0660, 0xC631, 0xCA01, 0x0A50, 0x0AA0, 0xCAF1,
|
0xC721, 0x0770, 0xC6C1, 0x0690, 0x0660, 0xC631, 0xCA01, 0x0A50, 0x0AA0, 0xCAF1, 0x0B40, 0xCB11, 0xCBE1,
|
||||||
0x0B40, 0xCB11, 0xCBE1, 0x0BB0, 0x0880, 0xC8D1, 0xC821, 0x0870, 0xC9C1, 0x0990, 0x0960, 0xC931,
|
0x0BB0, 0x0880, 0xC8D1, 0xC821, 0x0870, 0xC9C1, 0x0990, 0x0960, 0xC931, 0x0F00, 0xCF51, 0xCFA1, 0x0FF0,
|
||||||
0x0F00, 0xCF51, 0xCFA1, 0x0FF0, 0xCE41, 0x0E10, 0x0EE0, 0xCEB1, 0xCD81, 0x0DD0, 0x0D20, 0xCD71,
|
0xCE41, 0x0E10, 0x0EE0, 0xCEB1, 0xCD81, 0x0DD0, 0x0D20, 0xCD71, 0x0CC0, 0xCC91, 0xCC61, 0x0C30, 0xD401,
|
||||||
0x0CC0, 0xCC91, 0xCC61, 0x0C30, 0xD401, 0x1450, 0x14A0, 0xD4F1, 0x1540, 0xD511, 0xD5E1, 0x15B0,
|
0x1450, 0x14A0, 0xD4F1, 0x1540, 0xD511, 0xD5E1, 0x15B0, 0x1680, 0xD6D1, 0xD621, 0x1670, 0xD7C1, 0x1790,
|
||||||
0x1680, 0xD6D1, 0xD621, 0x1670, 0xD7C1, 0x1790, 0x1760, 0xD731, 0x1100, 0xD151, 0xD1A1, 0x11F0,
|
0x1760, 0xD731, 0x1100, 0xD151, 0xD1A1, 0x11F0, 0xD041, 0x1010, 0x10E0, 0xD0B1, 0xD381, 0x13D0, 0x1320,
|
||||||
0xD041, 0x1010, 0x10E0, 0xD0B1, 0xD381, 0x13D0, 0x1320, 0xD371, 0x12C0, 0xD291, 0xD261, 0x1230,
|
0xD371, 0x12C0, 0xD291, 0xD261, 0x1230, 0x1E00, 0xDE51, 0xDEA1, 0x1EF0, 0xDF41, 0x1F10, 0x1FE0, 0xDFB1,
|
||||||
0x1E00, 0xDE51, 0xDEA1, 0x1EF0, 0xDF41, 0x1F10, 0x1FE0, 0xDFB1, 0xDC81, 0x1CD0, 0x1C20, 0xDC71,
|
0xDC81, 0x1CD0, 0x1C20, 0xDC71, 0x1DC0, 0xDD91, 0xDD61, 0x1D30, 0xDB01, 0x1B50, 0x1BA0, 0xDBF1, 0x1A40,
|
||||||
0x1DC0, 0xDD91, 0xDD61, 0x1D30, 0xDB01, 0x1B50, 0x1BA0, 0xDBF1, 0x1A40, 0xDA11, 0xDAE1, 0x1AB0,
|
0xDA11, 0xDAE1, 0x1AB0, 0x1980, 0xD9D1, 0xD921, 0x1970, 0xD8C1, 0x1890, 0x1860, 0xD831, 0xE801, 0x2850,
|
||||||
0x1980, 0xD9D1, 0xD921, 0x1970, 0xD8C1, 0x1890, 0x1860, 0xD831, 0xE801, 0x2850, 0x28A0, 0xE8F1,
|
0x28A0, 0xE8F1, 0x2940, 0xE911, 0xE9E1, 0x29B0, 0x2A80, 0xEAD1, 0xEA21, 0x2A70, 0xEBC1, 0x2B90, 0x2B60,
|
||||||
0x2940, 0xE911, 0xE9E1, 0x29B0, 0x2A80, 0xEAD1, 0xEA21, 0x2A70, 0xEBC1, 0x2B90, 0x2B60, 0xEB31,
|
0xEB31, 0x2D00, 0xED51, 0xEDA1, 0x2DF0, 0xEC41, 0x2C10, 0x2CE0, 0xECB1, 0xEF81, 0x2FD0, 0x2F20, 0xEF71,
|
||||||
0x2D00, 0xED51, 0xEDA1, 0x2DF0, 0xEC41, 0x2C10, 0x2CE0, 0xECB1, 0xEF81, 0x2FD0, 0x2F20, 0xEF71,
|
0x2EC0, 0xEE91, 0xEE61, 0x2E30, 0x2200, 0xE251, 0xE2A1, 0x22F0, 0xE341, 0x2310, 0x23E0, 0xE3B1, 0xE081,
|
||||||
0x2EC0, 0xEE91, 0xEE61, 0x2E30, 0x2200, 0xE251, 0xE2A1, 0x22F0, 0xE341, 0x2310, 0x23E0, 0xE3B1,
|
0x20D0, 0x2020, 0xE071, 0x21C0, 0xE191, 0xE161, 0x2130, 0xE701, 0x2750, 0x27A0, 0xE7F1, 0x2640, 0xE611,
|
||||||
0xE081, 0x20D0, 0x2020, 0xE071, 0x21C0, 0xE191, 0xE161, 0x2130, 0xE701, 0x2750, 0x27A0, 0xE7F1,
|
0xE6E1, 0x26B0, 0x2580, 0xE5D1, 0xE521, 0x2570, 0xE4C1, 0x2490, 0x2460, 0xE431, 0x3C00, 0xFC51, 0xFCA1,
|
||||||
0x2640, 0xE611, 0xE6E1, 0x26B0, 0x2580, 0xE5D1, 0xE521, 0x2570, 0xE4C1, 0x2490, 0x2460, 0xE431,
|
0x3CF0, 0xFD41, 0x3D10, 0x3DE0, 0xFDB1, 0xFE81, 0x3ED0, 0x3E20, 0xFE71, 0x3FC0, 0xFF91, 0xFF61, 0x3F30,
|
||||||
0x3C00, 0xFC51, 0xFCA1, 0x3CF0, 0xFD41, 0x3D10, 0x3DE0, 0xFDB1, 0xFE81, 0x3ED0, 0x3E20, 0xFE71,
|
0xF901, 0x3950, 0x39A0, 0xF9F1, 0x3840, 0xF811, 0xF8E1, 0x38B0, 0x3B80, 0xFBD1, 0xFB21, 0x3B70, 0xFAC1,
|
||||||
0x3FC0, 0xFF91, 0xFF61, 0x3F30, 0xF901, 0x3950, 0x39A0, 0xF9F1, 0x3840, 0xF811, 0xF8E1, 0x38B0,
|
0x3A90, 0x3A60, 0xFA31, 0xF601, 0x3650, 0x36A0, 0xF6F1, 0x3740, 0xF711, 0xF7E1, 0x37B0, 0x3480, 0xF4D1,
|
||||||
0x3B80, 0xFBD1, 0xFB21, 0x3B70, 0xFAC1, 0x3A90, 0x3A60, 0xFA31, 0xF601, 0x3650, 0x36A0, 0xF6F1,
|
0xF421, 0x3470, 0xF5C1, 0x3590, 0x3560, 0xF531, 0x3300, 0xF351, 0xF3A1, 0x33F0, 0xF241, 0x3210, 0x32E0,
|
||||||
0x3740, 0xF711, 0xF7E1, 0x37B0, 0x3480, 0xF4D1, 0xF421, 0x3470, 0xF5C1, 0x3590, 0x3560, 0xF531,
|
0xF2B1, 0xF181, 0x31D0, 0x3120, 0xF171, 0x30C0, 0xF091, 0xF061, 0x3030
|
||||||
0x3300, 0xF351, 0xF3A1, 0x33F0, 0xF241, 0x3210, 0x32E0, 0xF2B1, 0xF181, 0x31D0, 0x3120, 0xF171,
|
|
||||||
0x30C0, 0xF091, 0xF061, 0x3030
|
|
||||||
},
|
},
|
||||||
new ushort[]
|
new ushort[]
|
||||||
{
|
{
|
||||||
0x0000, 0xFC01, 0xB801, 0x4400, 0x3001, 0xCC00, 0x8800, 0x7401, 0x6002, 0x9C03, 0xD803, 0x2402,
|
0x0000, 0xFC01, 0xB801, 0x4400, 0x3001, 0xCC00, 0x8800, 0x7401, 0x6002, 0x9C03, 0xD803, 0x2402, 0x5003,
|
||||||
0x5003, 0xAC02, 0xE802, 0x1403, 0xC004, 0x3C05, 0x7805, 0x8404, 0xF005, 0x0C04, 0x4804, 0xB405,
|
0xAC02, 0xE802, 0x1403, 0xC004, 0x3C05, 0x7805, 0x8404, 0xF005, 0x0C04, 0x4804, 0xB405, 0xA006, 0x5C07,
|
||||||
0xA006, 0x5C07, 0x1807, 0xE406, 0x9007, 0x6C06, 0x2806, 0xD407, 0xC00B, 0x3C0A, 0x780A, 0x840B,
|
0x1807, 0xE406, 0x9007, 0x6C06, 0x2806, 0xD407, 0xC00B, 0x3C0A, 0x780A, 0x840B, 0xF00A, 0x0C0B, 0x480B,
|
||||||
0xF00A, 0x0C0B, 0x480B, 0xB40A, 0xA009, 0x5C08, 0x1808, 0xE409, 0x9008, 0x6C09, 0x2809, 0xD408,
|
0xB40A, 0xA009, 0x5C08, 0x1808, 0xE409, 0x9008, 0x6C09, 0x2809, 0xD408, 0x000F, 0xFC0E, 0xB80E, 0x440F,
|
||||||
0x000F, 0xFC0E, 0xB80E, 0x440F, 0x300E, 0xCC0F, 0x880F, 0x740E, 0x600D, 0x9C0C, 0xD80C, 0x240D,
|
0x300E, 0xCC0F, 0x880F, 0x740E, 0x600D, 0x9C0C, 0xD80C, 0x240D, 0x500C, 0xAC0D, 0xE80D, 0x140C, 0xC015,
|
||||||
0x500C, 0xAC0D, 0xE80D, 0x140C, 0xC015, 0x3C14, 0x7814, 0x8415, 0xF014, 0x0C15, 0x4815, 0xB414,
|
0x3C14, 0x7814, 0x8415, 0xF014, 0x0C15, 0x4815, 0xB414, 0xA017, 0x5C16, 0x1816, 0xE417, 0x9016, 0x6C17,
|
||||||
0xA017, 0x5C16, 0x1816, 0xE417, 0x9016, 0x6C17, 0x2817, 0xD416, 0x0011, 0xFC10, 0xB810, 0x4411,
|
0x2817, 0xD416, 0x0011, 0xFC10, 0xB810, 0x4411, 0x3010, 0xCC11, 0x8811, 0x7410, 0x6013, 0x9C12, 0xD812,
|
||||||
0x3010, 0xCC11, 0x8811, 0x7410, 0x6013, 0x9C12, 0xD812, 0x2413, 0x5012, 0xAC13, 0xE813, 0x1412,
|
0x2413, 0x5012, 0xAC13, 0xE813, 0x1412, 0x001E, 0xFC1F, 0xB81F, 0x441E, 0x301F, 0xCC1E, 0x881E, 0x741F,
|
||||||
0x001E, 0xFC1F, 0xB81F, 0x441E, 0x301F, 0xCC1E, 0x881E, 0x741F, 0x601C, 0x9C1D, 0xD81D, 0x241C,
|
0x601C, 0x9C1D, 0xD81D, 0x241C, 0x501D, 0xAC1C, 0xE81C, 0x141D, 0xC01A, 0x3C1B, 0x781B, 0x841A, 0xF01B,
|
||||||
0x501D, 0xAC1C, 0xE81C, 0x141D, 0xC01A, 0x3C1B, 0x781B, 0x841A, 0xF01B, 0x0C1A, 0x481A, 0xB41B,
|
0x0C1A, 0x481A, 0xB41B, 0xA018, 0x5C19, 0x1819, 0xE418, 0x9019, 0x6C18, 0x2818, 0xD419, 0xC029, 0x3C28,
|
||||||
0xA018, 0x5C19, 0x1819, 0xE418, 0x9019, 0x6C18, 0x2818, 0xD419, 0xC029, 0x3C28, 0x7828, 0x8429,
|
0x7828, 0x8429, 0xF028, 0x0C29, 0x4829, 0xB428, 0xA02B, 0x5C2A, 0x182A, 0xE42B, 0x902A, 0x6C2B, 0x282B,
|
||||||
0xF028, 0x0C29, 0x4829, 0xB428, 0xA02B, 0x5C2A, 0x182A, 0xE42B, 0x902A, 0x6C2B, 0x282B, 0xD42A,
|
0xD42A, 0x002D, 0xFC2C, 0xB82C, 0x442D, 0x302C, 0xCC2D, 0x882D, 0x742C, 0x602F, 0x9C2E, 0xD82E, 0x242F,
|
||||||
0x002D, 0xFC2C, 0xB82C, 0x442D, 0x302C, 0xCC2D, 0x882D, 0x742C, 0x602F, 0x9C2E, 0xD82E, 0x242F,
|
0x502E, 0xAC2F, 0xE82F, 0x142E, 0x0022, 0xFC23, 0xB823, 0x4422, 0x3023, 0xCC22, 0x8822, 0x7423, 0x6020,
|
||||||
0x502E, 0xAC2F, 0xE82F, 0x142E, 0x0022, 0xFC23, 0xB823, 0x4422, 0x3023, 0xCC22, 0x8822, 0x7423,
|
0x9C21, 0xD821, 0x2420, 0x5021, 0xAC20, 0xE820, 0x1421, 0xC026, 0x3C27, 0x7827, 0x8426, 0xF027, 0x0C26,
|
||||||
0x6020, 0x9C21, 0xD821, 0x2420, 0x5021, 0xAC20, 0xE820, 0x1421, 0xC026, 0x3C27, 0x7827, 0x8426,
|
0x4826, 0xB427, 0xA024, 0x5C25, 0x1825, 0xE424, 0x9025, 0x6C24, 0x2824, 0xD425, 0x003C, 0xFC3D, 0xB83D,
|
||||||
0xF027, 0x0C26, 0x4826, 0xB427, 0xA024, 0x5C25, 0x1825, 0xE424, 0x9025, 0x6C24, 0x2824, 0xD425,
|
0x443C, 0x303D, 0xCC3C, 0x883C, 0x743D, 0x603E, 0x9C3F, 0xD83F, 0x243E, 0x503F, 0xAC3E, 0xE83E, 0x143F,
|
||||||
0x003C, 0xFC3D, 0xB83D, 0x443C, 0x303D, 0xCC3C, 0x883C, 0x743D, 0x603E, 0x9C3F, 0xD83F, 0x243E,
|
0xC038, 0x3C39, 0x7839, 0x8438, 0xF039, 0x0C38, 0x4838, 0xB439, 0xA03A, 0x5C3B, 0x183B, 0xE43A, 0x903B,
|
||||||
0x503F, 0xAC3E, 0xE83E, 0x143F, 0xC038, 0x3C39, 0x7839, 0x8438, 0xF039, 0x0C38, 0x4838, 0xB439,
|
0x6C3A, 0x283A, 0xD43B, 0xC037, 0x3C36, 0x7836, 0x8437, 0xF036, 0x0C37, 0x4837, 0xB436, 0xA035, 0x5C34,
|
||||||
0xA03A, 0x5C3B, 0x183B, 0xE43A, 0x903B, 0x6C3A, 0x283A, 0xD43B, 0xC037, 0x3C36, 0x7836, 0x8437,
|
0x1834, 0xE435, 0x9034, 0x6C35, 0x2835, 0xD434, 0x0033, 0xFC32, 0xB832, 0x4433, 0x3032, 0xCC33, 0x8833,
|
||||||
0xF036, 0x0C37, 0x4837, 0xB436, 0xA035, 0x5C34, 0x1834, 0xE435, 0x9034, 0x6C35, 0x2835, 0xD434,
|
0x7432, 0x6031, 0x9C30, 0xD830, 0x2431, 0x5030, 0xAC31, 0xE831, 0x1430
|
||||||
0x0033, 0xFC32, 0xB832, 0x4433, 0x3032, 0xCC33, 0x8833, 0x7432, 0x6031, 0x9C30, 0xD830, 0x2431,
|
|
||||||
0x5030, 0xAC31, 0xE831, 0x1430
|
|
||||||
},
|
},
|
||||||
new ushort[]
|
new ushort[]
|
||||||
{
|
{
|
||||||
0x0000, 0xC03D, 0xC079, 0x0044, 0xC0F1, 0x00CC, 0x0088, 0xC0B5, 0xC1E1, 0x01DC, 0x0198, 0xC1A5,
|
0x0000, 0xC03D, 0xC079, 0x0044, 0xC0F1, 0x00CC, 0x0088, 0xC0B5, 0xC1E1, 0x01DC, 0x0198, 0xC1A5, 0x0110,
|
||||||
0x0110, 0xC12D, 0xC169, 0x0154, 0xC3C1, 0x03FC, 0x03B8, 0xC385, 0x0330, 0xC30D, 0xC349, 0x0374,
|
0xC12D, 0xC169, 0x0154, 0xC3C1, 0x03FC, 0x03B8, 0xC385, 0x0330, 0xC30D, 0xC349, 0x0374, 0x0220, 0xC21D,
|
||||||
0x0220, 0xC21D, 0xC259, 0x0264, 0xC2D1, 0x02EC, 0x02A8, 0xC295, 0xC781, 0x07BC, 0x07F8, 0xC7C5,
|
0xC259, 0x0264, 0xC2D1, 0x02EC, 0x02A8, 0xC295, 0xC781, 0x07BC, 0x07F8, 0xC7C5, 0x0770, 0xC74D, 0xC709,
|
||||||
0x0770, 0xC74D, 0xC709, 0x0734, 0x0660, 0xC65D, 0xC619, 0x0624, 0xC691, 0x06AC, 0x06E8, 0xC6D5,
|
0x0734, 0x0660, 0xC65D, 0xC619, 0x0624, 0xC691, 0x06AC, 0x06E8, 0xC6D5, 0x0440, 0xC47D, 0xC439, 0x0404,
|
||||||
0x0440, 0xC47D, 0xC439, 0x0404, 0xC4B1, 0x048C, 0x04C8, 0xC4F5, 0xC5A1, 0x059C, 0x05D8, 0xC5E5,
|
0xC4B1, 0x048C, 0x04C8, 0xC4F5, 0xC5A1, 0x059C, 0x05D8, 0xC5E5, 0x0550, 0xC56D, 0xC529, 0x0514, 0xCF01,
|
||||||
0x0550, 0xC56D, 0xC529, 0x0514, 0xCF01, 0x0F3C, 0x0F78, 0xCF45, 0x0FF0, 0xCFCD, 0xCF89, 0x0FB4,
|
0x0F3C, 0x0F78, 0xCF45, 0x0FF0, 0xCFCD, 0xCF89, 0x0FB4, 0x0EE0, 0xCEDD, 0xCE99, 0x0EA4, 0xCE11, 0x0E2C,
|
||||||
0x0EE0, 0xCEDD, 0xCE99, 0x0EA4, 0xCE11, 0x0E2C, 0x0E68, 0xCE55, 0x0CC0, 0xCCFD, 0xCCB9, 0x0C84,
|
0x0E68, 0xCE55, 0x0CC0, 0xCCFD, 0xCCB9, 0x0C84, 0xCC31, 0x0C0C, 0x0C48, 0xCC75, 0xCD21, 0x0D1C, 0x0D58,
|
||||||
0xCC31, 0x0C0C, 0x0C48, 0xCC75, 0xCD21, 0x0D1C, 0x0D58, 0xCD65, 0x0DD0, 0xCDED, 0xCDA9, 0x0D94,
|
0xCD65, 0x0DD0, 0xCDED, 0xCDA9, 0x0D94, 0x0880, 0xC8BD, 0xC8F9, 0x08C4, 0xC871, 0x084C, 0x0808, 0xC835,
|
||||||
0x0880, 0xC8BD, 0xC8F9, 0x08C4, 0xC871, 0x084C, 0x0808, 0xC835, 0xC961, 0x095C, 0x0918, 0xC925,
|
0xC961, 0x095C, 0x0918, 0xC925, 0x0990, 0xC9AD, 0xC9E9, 0x09D4, 0xCB41, 0x0B7C, 0x0B38, 0xCB05, 0x0BB0,
|
||||||
0x0990, 0xC9AD, 0xC9E9, 0x09D4, 0xCB41, 0x0B7C, 0x0B38, 0xCB05, 0x0BB0, 0xCB8D, 0xCBC9, 0x0BF4,
|
0xCB8D, 0xCBC9, 0x0BF4, 0x0AA0, 0xCA9D, 0xCAD9, 0x0AE4, 0xCA51, 0x0A6C, 0x0A28, 0xCA15, 0xDE01, 0x1E3C,
|
||||||
0x0AA0, 0xCA9D, 0xCAD9, 0x0AE4, 0xCA51, 0x0A6C, 0x0A28, 0xCA15, 0xDE01, 0x1E3C, 0x1E78, 0xDE45,
|
0x1E78, 0xDE45, 0x1EF0, 0xDECD, 0xDE89, 0x1EB4, 0x1FE0, 0xDFDD, 0xDF99, 0x1FA4, 0xDF11, 0x1F2C, 0x1F68,
|
||||||
0x1EF0, 0xDECD, 0xDE89, 0x1EB4, 0x1FE0, 0xDFDD, 0xDF99, 0x1FA4, 0xDF11, 0x1F2C, 0x1F68, 0xDF55,
|
0xDF55, 0x1DC0, 0xDDFD, 0xDDB9, 0x1D84, 0xDD31, 0x1D0C, 0x1D48, 0xDD75, 0xDC21, 0x1C1C, 0x1C58, 0xDC65,
|
||||||
0x1DC0, 0xDDFD, 0xDDB9, 0x1D84, 0xDD31, 0x1D0C, 0x1D48, 0xDD75, 0xDC21, 0x1C1C, 0x1C58, 0xDC65,
|
0x1CD0, 0xDCED, 0xDCA9, 0x1C94, 0x1980, 0xD9BD, 0xD9F9, 0x19C4, 0xD971, 0x194C, 0x1908, 0xD935, 0xD861,
|
||||||
0x1CD0, 0xDCED, 0xDCA9, 0x1C94, 0x1980, 0xD9BD, 0xD9F9, 0x19C4, 0xD971, 0x194C, 0x1908, 0xD935,
|
0x185C, 0x1818, 0xD825, 0x1890, 0xD8AD, 0xD8E9, 0x18D4, 0xDA41, 0x1A7C, 0x1A38, 0xDA05, 0x1AB0, 0xDA8D,
|
||||||
0xD861, 0x185C, 0x1818, 0xD825, 0x1890, 0xD8AD, 0xD8E9, 0x18D4, 0xDA41, 0x1A7C, 0x1A38, 0xDA05,
|
0xDAC9, 0x1AF4, 0x1BA0, 0xDB9D, 0xDBD9, 0x1BE4, 0xDB51, 0x1B6C, 0x1B28, 0xDB15, 0x1100, 0xD13D, 0xD179,
|
||||||
0x1AB0, 0xDA8D, 0xDAC9, 0x1AF4, 0x1BA0, 0xDB9D, 0xDBD9, 0x1BE4, 0xDB51, 0x1B6C, 0x1B28, 0xDB15,
|
0x1144, 0xD1F1, 0x11CC, 0x1188, 0xD1B5, 0xD0E1, 0x10DC, 0x1098, 0xD0A5, 0x1010, 0xD02D, 0xD069, 0x1054,
|
||||||
0x1100, 0xD13D, 0xD179, 0x1144, 0xD1F1, 0x11CC, 0x1188, 0xD1B5, 0xD0E1, 0x10DC, 0x1098, 0xD0A5,
|
0xD2C1, 0x12FC, 0x12B8, 0xD285, 0x1230, 0xD20D, 0xD249, 0x1274, 0x1320, 0xD31D, 0xD359, 0x1364, 0xD3D1,
|
||||||
0x1010, 0xD02D, 0xD069, 0x1054, 0xD2C1, 0x12FC, 0x12B8, 0xD285, 0x1230, 0xD20D, 0xD249, 0x1274,
|
0x13EC, 0x13A8, 0xD395, 0xD681, 0x16BC, 0x16F8, 0xD6C5, 0x1670, 0xD64D, 0xD609, 0x1634, 0x1760, 0xD75D,
|
||||||
0x1320, 0xD31D, 0xD359, 0x1364, 0xD3D1, 0x13EC, 0x13A8, 0xD395, 0xD681, 0x16BC, 0x16F8, 0xD6C5,
|
0xD719, 0x1724, 0xD791, 0x17AC, 0x17E8, 0xD7D5, 0x1540, 0xD57D, 0xD539, 0x1504, 0xD5B1, 0x158C, 0x15C8,
|
||||||
0x1670, 0xD64D, 0xD609, 0x1634, 0x1760, 0xD75D, 0xD719, 0x1724, 0xD791, 0x17AC, 0x17E8, 0xD7D5,
|
0xD5F5, 0xD4A1, 0x149C, 0x14D8, 0xD4E5, 0x1450, 0xD46D, 0xD429, 0x1414
|
||||||
0x1540, 0xD57D, 0xD539, 0x1504, 0xD5B1, 0x158C, 0x15C8, 0xD5F5, 0xD4A1, 0x149C, 0x14D8, 0xD4E5,
|
|
||||||
0x1450, 0xD46D, 0xD429, 0x1414
|
|
||||||
},
|
},
|
||||||
new ushort[]
|
new ushort[]
|
||||||
{
|
{
|
||||||
0x0000, 0xD101, 0xE201, 0x3300, 0x8401, 0x5500, 0x6600, 0xB701, 0x4801, 0x9900, 0xAA00, 0x7B01,
|
0x0000, 0xD101, 0xE201, 0x3300, 0x8401, 0x5500, 0x6600, 0xB701, 0x4801, 0x9900, 0xAA00, 0x7B01, 0xCC00,
|
||||||
0xCC00, 0x1D01, 0x2E01, 0xFF00, 0x9002, 0x4103, 0x7203, 0xA302, 0x1403, 0xC502, 0xF602, 0x2703,
|
0x1D01, 0x2E01, 0xFF00, 0x9002, 0x4103, 0x7203, 0xA302, 0x1403, 0xC502, 0xF602, 0x2703, 0xD803, 0x0902,
|
||||||
0xD803, 0x0902, 0x3A02, 0xEB03, 0x5C02, 0x8D03, 0xBE03, 0x6F02, 0x6007, 0xB106, 0x8206, 0x5307,
|
0x3A02, 0xEB03, 0x5C02, 0x8D03, 0xBE03, 0x6F02, 0x6007, 0xB106, 0x8206, 0x5307, 0xE406, 0x3507, 0x0607,
|
||||||
0xE406, 0x3507, 0x0607, 0xD706, 0x2806, 0xF907, 0xCA07, 0x1B06, 0xAC07, 0x7D06, 0x4E06, 0x9F07,
|
0xD706, 0x2806, 0xF907, 0xCA07, 0x1B06, 0xAC07, 0x7D06, 0x4E06, 0x9F07, 0xF005, 0x2104, 0x1204, 0xC305,
|
||||||
0xF005, 0x2104, 0x1204, 0xC305, 0x7404, 0xA505, 0x9605, 0x4704, 0xB804, 0x6905, 0x5A05, 0x8B04,
|
0x7404, 0xA505, 0x9605, 0x4704, 0xB804, 0x6905, 0x5A05, 0x8B04, 0x3C05, 0xED04, 0xDE04, 0x0F05, 0xC00E,
|
||||||
0x3C05, 0xED04, 0xDE04, 0x0F05, 0xC00E, 0x110F, 0x220F, 0xF30E, 0x440F, 0x950E, 0xA60E, 0x770F,
|
0x110F, 0x220F, 0xF30E, 0x440F, 0x950E, 0xA60E, 0x770F, 0x880F, 0x590E, 0x6A0E, 0xBB0F, 0x0C0E, 0xDD0F,
|
||||||
0x880F, 0x590E, 0x6A0E, 0xBB0F, 0x0C0E, 0xDD0F, 0xEE0F, 0x3F0E, 0x500C, 0x810D, 0xB20D, 0x630C,
|
0xEE0F, 0x3F0E, 0x500C, 0x810D, 0xB20D, 0x630C, 0xD40D, 0x050C, 0x360C, 0xE70D, 0x180D, 0xC90C, 0xFA0C,
|
||||||
0xD40D, 0x050C, 0x360C, 0xE70D, 0x180D, 0xC90C, 0xFA0C, 0x2B0D, 0x9C0C, 0x4D0D, 0x7E0D, 0xAF0C,
|
0x2B0D, 0x9C0C, 0x4D0D, 0x7E0D, 0xAF0C, 0xA009, 0x7108, 0x4208, 0x9309, 0x2408, 0xF509, 0xC609, 0x1708,
|
||||||
0xA009, 0x7108, 0x4208, 0x9309, 0x2408, 0xF509, 0xC609, 0x1708, 0xE808, 0x3909, 0x0A09, 0xDB08,
|
0xE808, 0x3909, 0x0A09, 0xDB08, 0x6C09, 0xBD08, 0x8E08, 0x5F09, 0x300B, 0xE10A, 0xD20A, 0x030B, 0xB40A,
|
||||||
0x6C09, 0xBD08, 0x8E08, 0x5F09, 0x300B, 0xE10A, 0xD20A, 0x030B, 0xB40A, 0x650B, 0x560B, 0x870A,
|
0x650B, 0x560B, 0x870A, 0x780A, 0xA90B, 0x9A0B, 0x4B0A, 0xFC0B, 0x2D0A, 0x1E0A, 0xCF0B, 0xC01F, 0x111E,
|
||||||
0x780A, 0xA90B, 0x9A0B, 0x4B0A, 0xFC0B, 0x2D0A, 0x1E0A, 0xCF0B, 0xC01F, 0x111E, 0x221E, 0xF31F,
|
0x221E, 0xF31F, 0x441E, 0x951F, 0xA61F, 0x771E, 0x881E, 0x591F, 0x6A1F, 0xBB1E, 0x0C1F, 0xDD1E, 0xEE1E,
|
||||||
0x441E, 0x951F, 0xA61F, 0x771E, 0x881E, 0x591F, 0x6A1F, 0xBB1E, 0x0C1F, 0xDD1E, 0xEE1E, 0x3F1F,
|
0x3F1F, 0x501D, 0x811C, 0xB21C, 0x631D, 0xD41C, 0x051D, 0x361D, 0xE71C, 0x181C, 0xC91D, 0xFA1D, 0x2B1C,
|
||||||
0x501D, 0x811C, 0xB21C, 0x631D, 0xD41C, 0x051D, 0x361D, 0xE71C, 0x181C, 0xC91D, 0xFA1D, 0x2B1C,
|
0x9C1D, 0x4D1C, 0x7E1C, 0xAF1D, 0xA018, 0x7119, 0x4219, 0x9318, 0x2419, 0xF518, 0xC618, 0x1719, 0xE819,
|
||||||
0x9C1D, 0x4D1C, 0x7E1C, 0xAF1D, 0xA018, 0x7119, 0x4219, 0x9318, 0x2419, 0xF518, 0xC618, 0x1719,
|
0x3918, 0x0A18, 0xDB19, 0x6C18, 0xBD19, 0x8E19, 0x5F18, 0x301A, 0xE11B, 0xD21B, 0x031A, 0xB41B, 0x651A,
|
||||||
0xE819, 0x3918, 0x0A18, 0xDB19, 0x6C18, 0xBD19, 0x8E19, 0x5F18, 0x301A, 0xE11B, 0xD21B, 0x031A,
|
0x561A, 0x871B, 0x781B, 0xA91A, 0x9A1A, 0x4B1B, 0xFC1A, 0x2D1B, 0x1E1B, 0xCF1A, 0x0011, 0xD110, 0xE210,
|
||||||
0xB41B, 0x651A, 0x561A, 0x871B, 0x781B, 0xA91A, 0x9A1A, 0x4B1B, 0xFC1A, 0x2D1B, 0x1E1B, 0xCF1A,
|
0x3311, 0x8410, 0x5511, 0x6611, 0xB710, 0x4810, 0x9911, 0xAA11, 0x7B10, 0xCC11, 0x1D10, 0x2E10, 0xFF11,
|
||||||
0x0011, 0xD110, 0xE210, 0x3311, 0x8410, 0x5511, 0x6611, 0xB710, 0x4810, 0x9911, 0xAA11, 0x7B10,
|
0x9013, 0x4112, 0x7212, 0xA313, 0x1412, 0xC513, 0xF613, 0x2712, 0xD812, 0x0913, 0x3A13, 0xEB12, 0x5C13,
|
||||||
0xCC11, 0x1D10, 0x2E10, 0xFF11, 0x9013, 0x4112, 0x7212, 0xA313, 0x1412, 0xC513, 0xF613, 0x2712,
|
0x8D12, 0xBE12, 0x6F13, 0x6016, 0xB117, 0x8217, 0x5316, 0xE417, 0x3516, 0x0616, 0xD717, 0x2817, 0xF916,
|
||||||
0xD812, 0x0913, 0x3A13, 0xEB12, 0x5C13, 0x8D12, 0xBE12, 0x6F13, 0x6016, 0xB117, 0x8217, 0x5316,
|
0xCA16, 0x1B17, 0xAC16, 0x7D17, 0x4E17, 0x9F16, 0xF014, 0x2115, 0x1215, 0xC314, 0x7415, 0xA514, 0x9614,
|
||||||
0xE417, 0x3516, 0x0616, 0xD717, 0x2817, 0xF916, 0xCA16, 0x1B17, 0xAC16, 0x7D17, 0x4E17, 0x9F16,
|
0x4715, 0xB815, 0x6914, 0x5A14, 0x8B15, 0x3C14, 0xED15, 0xDE15, 0x0F14
|
||||||
0xF014, 0x2115, 0x1215, 0xC314, 0x7415, 0xA514, 0x9614, 0x4715, 0xB815, 0x6914, 0x5A14, 0x8B15,
|
|
||||||
0x3C14, 0xED15, 0xDE15, 0x0F14
|
|
||||||
},
|
},
|
||||||
new ushort[]
|
new ushort[]
|
||||||
{
|
{
|
||||||
0x0000, 0xC010, 0xC023, 0x0033, 0xC045, 0x0055, 0x0066, 0xC076, 0xC089, 0x0099, 0x00AA, 0xC0BA,
|
0x0000, 0xC010, 0xC023, 0x0033, 0xC045, 0x0055, 0x0066, 0xC076, 0xC089, 0x0099, 0x00AA, 0xC0BA, 0x00CC,
|
||||||
0x00CC, 0xC0DC, 0xC0EF, 0x00FF, 0xC111, 0x0101, 0x0132, 0xC122, 0x0154, 0xC144, 0xC177, 0x0167,
|
0xC0DC, 0xC0EF, 0x00FF, 0xC111, 0x0101, 0x0132, 0xC122, 0x0154, 0xC144, 0xC177, 0x0167, 0x0198, 0xC188,
|
||||||
0x0198, 0xC188, 0xC1BB, 0x01AB, 0xC1DD, 0x01CD, 0x01FE, 0xC1EE, 0xC221, 0x0231, 0x0202, 0xC212,
|
0xC1BB, 0x01AB, 0xC1DD, 0x01CD, 0x01FE, 0xC1EE, 0xC221, 0x0231, 0x0202, 0xC212, 0x0264, 0xC274, 0xC247,
|
||||||
0x0264, 0xC274, 0xC247, 0x0257, 0x02A8, 0xC2B8, 0xC28B, 0x029B, 0xC2ED, 0x02FD, 0x02CE, 0xC2DE,
|
0x0257, 0x02A8, 0xC2B8, 0xC28B, 0x029B, 0xC2ED, 0x02FD, 0x02CE, 0xC2DE, 0x0330, 0xC320, 0xC313, 0x0303,
|
||||||
0x0330, 0xC320, 0xC313, 0x0303, 0xC375, 0x0365, 0x0356, 0xC346, 0xC3B9, 0x03A9, 0x039A, 0xC38A,
|
0xC375, 0x0365, 0x0356, 0xC346, 0xC3B9, 0x03A9, 0x039A, 0xC38A, 0x03FC, 0xC3EC, 0xC3DF, 0x03CF, 0xC441,
|
||||||
0x03FC, 0xC3EC, 0xC3DF, 0x03CF, 0xC441, 0x0451, 0x0462, 0xC472, 0x0404, 0xC414, 0xC427, 0x0437,
|
0x0451, 0x0462, 0xC472, 0x0404, 0xC414, 0xC427, 0x0437, 0x04C8, 0xC4D8, 0xC4EB, 0x04FB, 0xC48D, 0x049D,
|
||||||
0x04C8, 0xC4D8, 0xC4EB, 0x04FB, 0xC48D, 0x049D, 0x04AE, 0xC4BE, 0x0550, 0xC540, 0xC573, 0x0563,
|
0x04AE, 0xC4BE, 0x0550, 0xC540, 0xC573, 0x0563, 0xC515, 0x0505, 0x0536, 0xC526, 0xC5D9, 0x05C9, 0x05FA,
|
||||||
0xC515, 0x0505, 0x0536, 0xC526, 0xC5D9, 0x05C9, 0x05FA, 0xC5EA, 0x059C, 0xC58C, 0xC5BF, 0x05AF,
|
0xC5EA, 0x059C, 0xC58C, 0xC5BF, 0x05AF, 0x0660, 0xC670, 0xC643, 0x0653, 0xC625, 0x0635, 0x0606, 0xC616,
|
||||||
0x0660, 0xC670, 0xC643, 0x0653, 0xC625, 0x0635, 0x0606, 0xC616, 0xC6E9, 0x06F9, 0x06CA, 0xC6DA,
|
0xC6E9, 0x06F9, 0x06CA, 0xC6DA, 0x06AC, 0xC6BC, 0xC68F, 0x069F, 0xC771, 0x0761, 0x0752, 0xC742, 0x0734,
|
||||||
0x06AC, 0xC6BC, 0xC68F, 0x069F, 0xC771, 0x0761, 0x0752, 0xC742, 0x0734, 0xC724, 0xC717, 0x0707,
|
0xC724, 0xC717, 0x0707, 0x07F8, 0xC7E8, 0xC7DB, 0x07CB, 0xC7BD, 0x07AD, 0x079E, 0xC78E, 0xC881, 0x0891,
|
||||||
0x07F8, 0xC7E8, 0xC7DB, 0x07CB, 0xC7BD, 0x07AD, 0x079E, 0xC78E, 0xC881, 0x0891, 0x08A2, 0xC8B2,
|
0x08A2, 0xC8B2, 0x08C4, 0xC8D4, 0xC8E7, 0x08F7, 0x0808, 0xC818, 0xC82B, 0x083B, 0xC84D, 0x085D, 0x086E,
|
||||||
0x08C4, 0xC8D4, 0xC8E7, 0x08F7, 0x0808, 0xC818, 0xC82B, 0x083B, 0xC84D, 0x085D, 0x086E, 0xC87E,
|
0xC87E, 0x0990, 0xC980, 0xC9B3, 0x09A3, 0xC9D5, 0x09C5, 0x09F6, 0xC9E6, 0xC919, 0x0909, 0x093A, 0xC92A,
|
||||||
0x0990, 0xC980, 0xC9B3, 0x09A3, 0xC9D5, 0x09C5, 0x09F6, 0xC9E6, 0xC919, 0x0909, 0x093A, 0xC92A,
|
0x095C, 0xC94C, 0xC97F, 0x096F, 0x0AA0, 0xCAB0, 0xCA83, 0x0A93, 0xCAE5, 0x0AF5, 0x0AC6, 0xCAD6, 0xCA29,
|
||||||
0x095C, 0xC94C, 0xC97F, 0x096F, 0x0AA0, 0xCAB0, 0xCA83, 0x0A93, 0xCAE5, 0x0AF5, 0x0AC6, 0xCAD6,
|
0x0A39, 0x0A0A, 0xCA1A, 0x0A6C, 0xCA7C, 0xCA4F, 0x0A5F, 0xCBB1, 0x0BA1, 0x0B92, 0xCB82, 0x0BF4, 0xCBE4,
|
||||||
0xCA29, 0x0A39, 0x0A0A, 0xCA1A, 0x0A6C, 0xCA7C, 0xCA4F, 0x0A5F, 0xCBB1, 0x0BA1, 0x0B92, 0xCB82,
|
0xCBD7, 0x0BC7, 0x0B38, 0xCB28, 0xCB1B, 0x0B0B, 0xCB7D, 0x0B6D, 0x0B5E, 0xCB4E, 0x0CC0, 0xCCD0, 0xCCE3,
|
||||||
0x0BF4, 0xCBE4, 0xCBD7, 0x0BC7, 0x0B38, 0xCB28, 0xCB1B, 0x0B0B, 0xCB7D, 0x0B6D, 0x0B5E, 0xCB4E,
|
0x0CF3, 0xCC85, 0x0C95, 0x0CA6, 0xCCB6, 0xCC49, 0x0C59, 0x0C6A, 0xCC7A, 0x0C0C, 0xCC1C, 0xCC2F, 0x0C3F,
|
||||||
0x0CC0, 0xCCD0, 0xCCE3, 0x0CF3, 0xCC85, 0x0C95, 0x0CA6, 0xCCB6, 0xCC49, 0x0C59, 0x0C6A, 0xCC7A,
|
0xCDD1, 0x0DC1, 0x0DF2, 0xCDE2, 0x0D94, 0xCD84, 0xCDB7, 0x0DA7, 0x0D58, 0xCD48, 0xCD7B, 0x0D6B, 0xCD1D,
|
||||||
0x0C0C, 0xCC1C, 0xCC2F, 0x0C3F, 0xCDD1, 0x0DC1, 0x0DF2, 0xCDE2, 0x0D94, 0xCD84, 0xCDB7, 0x0DA7,
|
0x0D0D, 0x0D3E, 0xCD2E, 0xCEE1, 0x0EF1, 0x0EC2, 0xCED2, 0x0EA4, 0xCEB4, 0xCE87, 0x0E97, 0x0E68, 0xCE78,
|
||||||
0x0D58, 0xCD48, 0xCD7B, 0x0D6B, 0xCD1D, 0x0D0D, 0x0D3E, 0xCD2E, 0xCEE1, 0x0EF1, 0x0EC2, 0xCED2,
|
0xCE4B, 0x0E5B, 0xCE2D, 0x0E3D, 0x0E0E, 0xCE1E, 0x0FF0, 0xCFE0, 0xCFD3, 0x0FC3, 0xCFB5, 0x0FA5, 0x0F96,
|
||||||
0x0EA4, 0xCEB4, 0xCE87, 0x0E97, 0x0E68, 0xCE78, 0xCE4B, 0x0E5B, 0xCE2D, 0x0E3D, 0x0E0E, 0xCE1E,
|
0xCF86, 0xCF79, 0x0F69, 0x0F5A, 0xCF4A, 0x0F3C, 0xCF2C, 0xCF1F, 0x0F0F
|
||||||
0x0FF0, 0xCFE0, 0xCFD3, 0x0FC3, 0xCFB5, 0x0FA5, 0x0F96, 0xCF86, 0xCF79, 0x0F69, 0x0F5A, 0xCF4A,
|
|
||||||
0x0F3C, 0xCF2C, 0xCF1F, 0x0F0F
|
|
||||||
},
|
},
|
||||||
new ushort[]
|
new ushort[]
|
||||||
{
|
{
|
||||||
0x0000, 0xCCC1, 0xD981, 0x1540, 0xF301, 0x3FC0, 0x2A80, 0xE641, 0xA601, 0x6AC0, 0x7F80, 0xB341,
|
0x0000, 0xCCC1, 0xD981, 0x1540, 0xF301, 0x3FC0, 0x2A80, 0xE641, 0xA601, 0x6AC0, 0x7F80, 0xB341, 0x5500,
|
||||||
0x5500, 0x99C1, 0x8C81, 0x4040, 0x0C01, 0xC0C0, 0xD580, 0x1941, 0xFF00, 0x33C1, 0x2681, 0xEA40,
|
0x99C1, 0x8C81, 0x4040, 0x0C01, 0xC0C0, 0xD580, 0x1941, 0xFF00, 0x33C1, 0x2681, 0xEA40, 0xAA00, 0x66C1,
|
||||||
0xAA00, 0x66C1, 0x7381, 0xBF40, 0x5901, 0x95C0, 0x8080, 0x4C41, 0x1802, 0xD4C3, 0xC183, 0x0D42,
|
0x7381, 0xBF40, 0x5901, 0x95C0, 0x8080, 0x4C41, 0x1802, 0xD4C3, 0xC183, 0x0D42, 0xEB03, 0x27C2, 0x3282,
|
||||||
0xEB03, 0x27C2, 0x3282, 0xFE43, 0xBE03, 0x72C2, 0x6782, 0xAB43, 0x4D02, 0x81C3, 0x9483, 0x5842,
|
0xFE43, 0xBE03, 0x72C2, 0x6782, 0xAB43, 0x4D02, 0x81C3, 0x9483, 0x5842, 0x1403, 0xD8C2, 0xCD82, 0x0143,
|
||||||
0x1403, 0xD8C2, 0xCD82, 0x0143, 0xE702, 0x2BC3, 0x3E83, 0xF242, 0xB202, 0x7EC3, 0x6B83, 0xA742,
|
0xE702, 0x2BC3, 0x3E83, 0xF242, 0xB202, 0x7EC3, 0x6B83, 0xA742, 0x4103, 0x8DC2, 0x9882, 0x5443, 0x3004,
|
||||||
0x4103, 0x8DC2, 0x9882, 0x5443, 0x3004, 0xFCC5, 0xE985, 0x2544, 0xC305, 0x0FC4, 0x1A84, 0xD645,
|
0xFCC5, 0xE985, 0x2544, 0xC305, 0x0FC4, 0x1A84, 0xD645, 0x9605, 0x5AC4, 0x4F84, 0x8345, 0x6504, 0xA9C5,
|
||||||
0x9605, 0x5AC4, 0x4F84, 0x8345, 0x6504, 0xA9C5, 0xBC85, 0x7044, 0x3C05, 0xF0C4, 0xE584, 0x2945,
|
0xBC85, 0x7044, 0x3C05, 0xF0C4, 0xE584, 0x2945, 0xCF04, 0x03C5, 0x1685, 0xDA44, 0x9A04, 0x56C5, 0x4385,
|
||||||
0xCF04, 0x03C5, 0x1685, 0xDA44, 0x9A04, 0x56C5, 0x4385, 0x8F44, 0x6905, 0xA5C4, 0xB084, 0x7C45,
|
0x8F44, 0x6905, 0xA5C4, 0xB084, 0x7C45, 0x2806, 0xE4C7, 0xF187, 0x3D46, 0xDB07, 0x17C6, 0x0286, 0xCE47,
|
||||||
0x2806, 0xE4C7, 0xF187, 0x3D46, 0xDB07, 0x17C6, 0x0286, 0xCE47, 0x8E07, 0x42C6, 0x5786, 0x9B47,
|
0x8E07, 0x42C6, 0x5786, 0x9B47, 0x7D06, 0xB1C7, 0xA487, 0x6846, 0x2407, 0xE8C6, 0xFD86, 0x3147, 0xD706,
|
||||||
0x7D06, 0xB1C7, 0xA487, 0x6846, 0x2407, 0xE8C6, 0xFD86, 0x3147, 0xD706, 0x1BC7, 0x0E87, 0xC246,
|
0x1BC7, 0x0E87, 0xC246, 0x8206, 0x4EC7, 0x5B87, 0x9746, 0x7107, 0xBDC6, 0xA886, 0x6447, 0x6008, 0xACC9,
|
||||||
0x8206, 0x4EC7, 0x5B87, 0x9746, 0x7107, 0xBDC6, 0xA886, 0x6447, 0x6008, 0xACC9, 0xB989, 0x7548,
|
0xB989, 0x7548, 0x9309, 0x5FC8, 0x4A88, 0x8649, 0xC609, 0x0AC8, 0x1F88, 0xD349, 0x3508, 0xF9C9, 0xEC89,
|
||||||
0x9309, 0x5FC8, 0x4A88, 0x8649, 0xC609, 0x0AC8, 0x1F88, 0xD349, 0x3508, 0xF9C9, 0xEC89, 0x2048,
|
0x2048, 0x6C09, 0xA0C8, 0xB588, 0x7949, 0x9F08, 0x53C9, 0x4689, 0x8A48, 0xCA08, 0x06C9, 0x1389, 0xDF48,
|
||||||
0x6C09, 0xA0C8, 0xB588, 0x7949, 0x9F08, 0x53C9, 0x4689, 0x8A48, 0xCA08, 0x06C9, 0x1389, 0xDF48,
|
0x3909, 0xF5C8, 0xE088, 0x2C49, 0x780A, 0xB4CB, 0xA18B, 0x6D4A, 0x8B0B, 0x47CA, 0x528A, 0x9E4B, 0xDE0B,
|
||||||
0x3909, 0xF5C8, 0xE088, 0x2C49, 0x780A, 0xB4CB, 0xA18B, 0x6D4A, 0x8B0B, 0x47CA, 0x528A, 0x9E4B,
|
0x12CA, 0x078A, 0xCB4B, 0x2D0A, 0xE1CB, 0xF48B, 0x384A, 0x740B, 0xB8CA, 0xAD8A, 0x614B, 0x870A, 0x4BCB,
|
||||||
0xDE0B, 0x12CA, 0x078A, 0xCB4B, 0x2D0A, 0xE1CB, 0xF48B, 0x384A, 0x740B, 0xB8CA, 0xAD8A, 0x614B,
|
0x5E8B, 0x924A, 0xD20A, 0x1ECB, 0x0B8B, 0xC74A, 0x210B, 0xEDCA, 0xF88A, 0x344B, 0x500C, 0x9CCD, 0x898D,
|
||||||
0x870A, 0x4BCB, 0x5E8B, 0x924A, 0xD20A, 0x1ECB, 0x0B8B, 0xC74A, 0x210B, 0xEDCA, 0xF88A, 0x344B,
|
0x454C, 0xA30D, 0x6FCC, 0x7A8C, 0xB64D, 0xF60D, 0x3ACC, 0x2F8C, 0xE34D, 0x050C, 0xC9CD, 0xDC8D, 0x104C,
|
||||||
0x500C, 0x9CCD, 0x898D, 0x454C, 0xA30D, 0x6FCC, 0x7A8C, 0xB64D, 0xF60D, 0x3ACC, 0x2F8C, 0xE34D,
|
0x5C0D, 0x90CC, 0x858C, 0x494D, 0xAF0C, 0x63CD, 0x768D, 0xBA4C, 0xFA0C, 0x36CD, 0x238D, 0xEF4C, 0x090D,
|
||||||
0x050C, 0xC9CD, 0xDC8D, 0x104C, 0x5C0D, 0x90CC, 0x858C, 0x494D, 0xAF0C, 0x63CD, 0x768D, 0xBA4C,
|
0xC5CC, 0xD08C, 0x1C4D, 0x480E, 0x84CF, 0x918F, 0x5D4E, 0xBB0F, 0x77CE, 0x628E, 0xAE4F, 0xEE0F, 0x22CE,
|
||||||
0xFA0C, 0x36CD, 0x238D, 0xEF4C, 0x090D, 0xC5CC, 0xD08C, 0x1C4D, 0x480E, 0x84CF, 0x918F, 0x5D4E,
|
0x378E, 0xFB4F, 0x1D0E, 0xD1CF, 0xC48F, 0x084E, 0x440F, 0x88CE, 0x9D8E, 0x514F, 0xB70E, 0x7BCF, 0x6E8F,
|
||||||
0xBB0F, 0x77CE, 0x628E, 0xAE4F, 0xEE0F, 0x22CE, 0x378E, 0xFB4F, 0x1D0E, 0xD1CF, 0xC48F, 0x084E,
|
0xA24E, 0xE20E, 0x2ECF, 0x3B8F, 0xF74E, 0x110F, 0xDDCE, 0xC88E, 0x044F
|
||||||
0x440F, 0x88CE, 0x9D8E, 0x514F, 0xB70E, 0x7BCF, 0x6E8F, 0xA24E, 0xE20E, 0x2ECF, 0x3B8F, 0xF74E,
|
|
||||||
0x110F, 0xDDCE, 0xC88E, 0x044F
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -86,8 +86,7 @@ static class ArmSimd
|
|||||||
len -= 8;
|
len -= 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(len-- > 0)
|
while(len-- > 0) c = Crc32.ComputeCrc32(c, buf[bufPos++]);
|
||||||
c = Crc32.ComputeCrc32(c, buf[bufPos++]);
|
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
@@ -126,8 +125,7 @@ static class ArmSimd
|
|||||||
len -= 4;
|
len -= 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(len-- > 0)
|
while(len-- > 0) c = Crc32.ComputeCrc32(c, buf[bufPos++]);
|
||||||
c = Crc32.ComputeCrc32(c, buf[bufPos++]);
|
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -140,18 +140,24 @@ static class Clmul
|
|||||||
|
|
||||||
while((len -= 64) >= 0)
|
while((len -= 64) >= 0)
|
||||||
{
|
{
|
||||||
xmmT0 = Vector128.Create(BitConverter.ToUInt32(src, bufPos), BitConverter.ToUInt32(src, bufPos + 4),
|
xmmT0 = Vector128.Create(BitConverter.ToUInt32(src, bufPos),
|
||||||
BitConverter.ToUInt32(src, bufPos + 8), BitConverter.ToUInt32(src, bufPos + 12));
|
BitConverter.ToUInt32(src, bufPos + 4),
|
||||||
|
BitConverter.ToUInt32(src, bufPos + 8),
|
||||||
|
BitConverter.ToUInt32(src, bufPos + 12));
|
||||||
|
|
||||||
bufPos += 16;
|
bufPos += 16;
|
||||||
|
|
||||||
xmmT1 = Vector128.Create(BitConverter.ToUInt32(src, bufPos), BitConverter.ToUInt32(src, bufPos + 4),
|
xmmT1 = Vector128.Create(BitConverter.ToUInt32(src, bufPos),
|
||||||
BitConverter.ToUInt32(src, bufPos + 8), BitConverter.ToUInt32(src, bufPos + 12));
|
BitConverter.ToUInt32(src, bufPos + 4),
|
||||||
|
BitConverter.ToUInt32(src, bufPos + 8),
|
||||||
|
BitConverter.ToUInt32(src, bufPos + 12));
|
||||||
|
|
||||||
bufPos += 16;
|
bufPos += 16;
|
||||||
|
|
||||||
xmmT2 = Vector128.Create(BitConverter.ToUInt32(src, bufPos), BitConverter.ToUInt32(src, bufPos + 4),
|
xmmT2 = Vector128.Create(BitConverter.ToUInt32(src, bufPos),
|
||||||
BitConverter.ToUInt32(src, bufPos + 8), BitConverter.ToUInt32(src, bufPos + 12));
|
BitConverter.ToUInt32(src, bufPos + 4),
|
||||||
|
BitConverter.ToUInt32(src, bufPos + 8),
|
||||||
|
BitConverter.ToUInt32(src, bufPos + 12));
|
||||||
|
|
||||||
bufPos += 16;
|
bufPos += 16;
|
||||||
|
|
||||||
|
|||||||
@@ -83,50 +83,54 @@ static class Vmull
|
|||||||
|
|
||||||
static Vector128<ulong> vmull_p64(Vector64<ulong> a, Vector64<ulong> b)
|
static Vector128<ulong> vmull_p64(Vector64<ulong> a, Vector64<ulong> b)
|
||||||
{
|
{
|
||||||
if(Aes.IsSupported)
|
if(Aes.IsSupported) return Aes.PolynomialMultiplyWideningLower(a, b);
|
||||||
return Aes.PolynomialMultiplyWideningLower(a, b);
|
|
||||||
|
|
||||||
// Masks
|
// Masks
|
||||||
Vector128<byte> k4832 = Vector128.Create(Vector64.Create(0x0000fffffffffffful),
|
Vector128<byte> k4832 = Vector128.Create(Vector64.Create(0x0000fffffffffffful),
|
||||||
Vector64.Create(0x00000000fffffffful)).AsByte();
|
Vector64.Create(0x00000000fffffffful))
|
||||||
|
.AsByte();
|
||||||
|
|
||||||
Vector128<byte> k1600 = Vector128.Create(Vector64.Create(0x000000000000fffful),
|
Vector128<byte> k1600 = Vector128.Create(Vector64.Create(0x000000000000fffful),
|
||||||
Vector64.Create(0x0000000000000000ul)).AsByte();
|
Vector64.Create(0x0000000000000000ul))
|
||||||
|
.AsByte();
|
||||||
|
|
||||||
// Do the multiplies, rotating with vext to get all combinations
|
// Do the multiplies, rotating with vext to get all combinations
|
||||||
Vector128<byte> d = AdvSimd.PolynomialMultiplyWideningLower(a.AsByte(), b.AsByte()).AsByte(); // D = A0 * B0
|
Vector128<byte> d = AdvSimd.PolynomialMultiplyWideningLower(a.AsByte(), b.AsByte()).AsByte(); // D = A0 * B0
|
||||||
|
|
||||||
Vector128<byte> e = AdvSimd.
|
Vector128<byte> e = AdvSimd
|
||||||
PolynomialMultiplyWideningLower(a.AsByte(),
|
.PolynomialMultiplyWideningLower(a.AsByte(),
|
||||||
AdvSimd.ExtractVector64(b.AsByte(), b.AsByte(), 1)).
|
AdvSimd.ExtractVector64(b.AsByte(), b.AsByte(), 1))
|
||||||
AsByte(); // E = A0 * B1
|
.AsByte(); // E = A0 * B1
|
||||||
|
|
||||||
Vector128<byte> f = AdvSimd.
|
Vector128<byte> f = AdvSimd
|
||||||
PolynomialMultiplyWideningLower(AdvSimd.ExtractVector64(a.AsByte(), a.AsByte(), 1),
|
.PolynomialMultiplyWideningLower(AdvSimd.ExtractVector64(a.AsByte(), a.AsByte(), 1),
|
||||||
b.AsByte()).AsByte(); // F = A1 * B0
|
b.AsByte())
|
||||||
|
.AsByte(); // F = A1 * B0
|
||||||
|
|
||||||
Vector128<byte> g = AdvSimd.
|
Vector128<byte> g = AdvSimd
|
||||||
PolynomialMultiplyWideningLower(a.AsByte(),
|
.PolynomialMultiplyWideningLower(a.AsByte(),
|
||||||
AdvSimd.ExtractVector64(b.AsByte(), b.AsByte(), 2)).
|
AdvSimd.ExtractVector64(b.AsByte(), b.AsByte(), 2))
|
||||||
AsByte(); // G = A0 * B2
|
.AsByte(); // G = A0 * B2
|
||||||
|
|
||||||
Vector128<byte> h = AdvSimd.
|
Vector128<byte> h = AdvSimd
|
||||||
PolynomialMultiplyWideningLower(AdvSimd.ExtractVector64(a.AsByte(), a.AsByte(), 2),
|
.PolynomialMultiplyWideningLower(AdvSimd.ExtractVector64(a.AsByte(), a.AsByte(), 2),
|
||||||
b.AsByte()).AsByte(); // H = A2 * B0
|
b.AsByte())
|
||||||
|
.AsByte(); // H = A2 * B0
|
||||||
|
|
||||||
Vector128<byte> i = AdvSimd.
|
Vector128<byte> i = AdvSimd
|
||||||
PolynomialMultiplyWideningLower(a.AsByte(),
|
.PolynomialMultiplyWideningLower(a.AsByte(),
|
||||||
AdvSimd.ExtractVector64(b.AsByte(), b.AsByte(), 3)).
|
AdvSimd.ExtractVector64(b.AsByte(), b.AsByte(), 3))
|
||||||
AsByte(); // I = A0 * B3
|
.AsByte(); // I = A0 * B3
|
||||||
|
|
||||||
Vector128<byte> j = AdvSimd.
|
Vector128<byte> j = AdvSimd
|
||||||
PolynomialMultiplyWideningLower(AdvSimd.ExtractVector64(a.AsByte(), a.AsByte(), 3),
|
.PolynomialMultiplyWideningLower(AdvSimd.ExtractVector64(a.AsByte(), a.AsByte(), 3),
|
||||||
b.AsByte()).AsByte(); // J = A3 * B0
|
b.AsByte())
|
||||||
|
.AsByte(); // J = A3 * B0
|
||||||
|
|
||||||
Vector128<byte> k = AdvSimd.
|
Vector128<byte> k = AdvSimd
|
||||||
PolynomialMultiplyWideningLower(a.AsByte(),
|
.PolynomialMultiplyWideningLower(a.AsByte(),
|
||||||
AdvSimd.ExtractVector64(b.AsByte(), b.AsByte(), 4)).
|
AdvSimd.ExtractVector64(b.AsByte(), b.AsByte(), 4))
|
||||||
AsByte(); // L = A0 * B4
|
.AsByte(); // L = A0 * B4
|
||||||
|
|
||||||
// Add cross products
|
// Add cross products
|
||||||
Vector128<byte> l = AdvSimd.Xor(e, f); // L = E + F
|
Vector128<byte> l = AdvSimd.Xor(e, f); // L = E + F
|
||||||
@@ -283,27 +287,35 @@ static class Vmull
|
|||||||
|
|
||||||
while((len -= 64) >= 0)
|
while((len -= 64) >= 0)
|
||||||
{
|
{
|
||||||
qT0 = Vector128.Create(BitConverter.ToUInt32(src, bufPos), BitConverter.ToUInt32(src, bufPos + 4),
|
qT0 = Vector128.Create(BitConverter.ToUInt32(src, bufPos),
|
||||||
BitConverter.ToUInt32(src, bufPos + 8), BitConverter.ToUInt32(src, bufPos + 12)).
|
BitConverter.ToUInt32(src, bufPos + 4),
|
||||||
AsUInt64();
|
BitConverter.ToUInt32(src, bufPos + 8),
|
||||||
|
BitConverter.ToUInt32(src, bufPos + 12))
|
||||||
|
.AsUInt64();
|
||||||
|
|
||||||
bufPos += 16;
|
bufPos += 16;
|
||||||
|
|
||||||
qT1 = Vector128.Create(BitConverter.ToUInt32(src, bufPos), BitConverter.ToUInt32(src, bufPos + 4),
|
qT1 = Vector128.Create(BitConverter.ToUInt32(src, bufPos),
|
||||||
BitConverter.ToUInt32(src, bufPos + 8), BitConverter.ToUInt32(src, bufPos + 12)).
|
BitConverter.ToUInt32(src, bufPos + 4),
|
||||||
AsUInt64();
|
BitConverter.ToUInt32(src, bufPos + 8),
|
||||||
|
BitConverter.ToUInt32(src, bufPos + 12))
|
||||||
|
.AsUInt64();
|
||||||
|
|
||||||
bufPos += 16;
|
bufPos += 16;
|
||||||
|
|
||||||
qT2 = Vector128.Create(BitConverter.ToUInt32(src, bufPos), BitConverter.ToUInt32(src, bufPos + 4),
|
qT2 = Vector128.Create(BitConverter.ToUInt32(src, bufPos),
|
||||||
BitConverter.ToUInt32(src, bufPos + 8), BitConverter.ToUInt32(src, bufPos + 12)).
|
BitConverter.ToUInt32(src, bufPos + 4),
|
||||||
AsUInt64();
|
BitConverter.ToUInt32(src, bufPos + 8),
|
||||||
|
BitConverter.ToUInt32(src, bufPos + 12))
|
||||||
|
.AsUInt64();
|
||||||
|
|
||||||
bufPos += 16;
|
bufPos += 16;
|
||||||
|
|
||||||
qT3 = Vector128.Create(BitConverter.ToUInt32(src, bufPos), BitConverter.ToUInt32(src, bufPos + 4),
|
qT3 = Vector128.Create(BitConverter.ToUInt32(src, bufPos),
|
||||||
BitConverter.ToUInt32(src, bufPos + 8), BitConverter.ToUInt32(src, bufPos + 12)).
|
BitConverter.ToUInt32(src, bufPos + 4),
|
||||||
AsUInt64();
|
BitConverter.ToUInt32(src, bufPos + 8),
|
||||||
|
BitConverter.ToUInt32(src, bufPos + 12))
|
||||||
|
.AsUInt64();
|
||||||
|
|
||||||
bufPos += 16;
|
bufPos += 16;
|
||||||
|
|
||||||
@@ -354,10 +366,23 @@ static class Vmull
|
|||||||
|
|
||||||
Vector128<byte> qCRC0B = qCRC0.AsByte();
|
Vector128<byte> qCRC0B = qCRC0.AsByte();
|
||||||
|
|
||||||
qCRC0 = Vector128.Create(AdvSimd.Extract(qCRC0B, 8), AdvSimd.Extract(qCRC0B, 9), AdvSimd.Extract(qCRC0B, 10),
|
qCRC0 = Vector128.Create(AdvSimd.Extract(qCRC0B, 8),
|
||||||
AdvSimd.Extract(qCRC0B, 11), AdvSimd.Extract(qCRC0B, 12), AdvSimd.Extract(qCRC0B, 13),
|
AdvSimd.Extract(qCRC0B, 9),
|
||||||
AdvSimd.Extract(qCRC0B, 14), AdvSimd.Extract(qCRC0B, 15), 0, 0, 0, 0, 0, 0, 0, 0).
|
AdvSimd.Extract(qCRC0B, 10),
|
||||||
AsUInt64();
|
AdvSimd.Extract(qCRC0B, 11),
|
||||||
|
AdvSimd.Extract(qCRC0B, 12),
|
||||||
|
AdvSimd.Extract(qCRC0B, 13),
|
||||||
|
AdvSimd.Extract(qCRC0B, 14),
|
||||||
|
AdvSimd.Extract(qCRC0B, 15),
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0)
|
||||||
|
.AsUInt64();
|
||||||
|
|
||||||
qCRC3 = AdvSimd.Xor(qCRC3.AsUInt32(), qCRC0.AsUInt32()).AsUInt64();
|
qCRC3 = AdvSimd.Xor(qCRC3.AsUInt32(), qCRC0.AsUInt32()).AsUInt64();
|
||||||
|
|
||||||
@@ -365,11 +390,23 @@ static class Vmull
|
|||||||
|
|
||||||
Vector128<byte> qCRC3B = qCRC3.AsByte();
|
Vector128<byte> qCRC3B = qCRC3.AsByte();
|
||||||
|
|
||||||
qCRC3 = Vector128.Create(0, 0, 0, 0, AdvSimd.Extract(qCRC3B, 0), AdvSimd.Extract(qCRC3B, 1),
|
qCRC3 = Vector128.Create(0,
|
||||||
AdvSimd.Extract(qCRC3B, 2), AdvSimd.Extract(qCRC3B, 3), AdvSimd.Extract(qCRC3B, 4),
|
0,
|
||||||
AdvSimd.Extract(qCRC3B, 5), AdvSimd.Extract(qCRC3B, 6), AdvSimd.Extract(qCRC3B, 7),
|
0,
|
||||||
AdvSimd.Extract(qCRC3B, 8), AdvSimd.Extract(qCRC3B, 9), AdvSimd.Extract(qCRC3B, 10),
|
0,
|
||||||
AdvSimd.Extract(qCRC3B, 11)).AsUInt64();
|
AdvSimd.Extract(qCRC3B, 0),
|
||||||
|
AdvSimd.Extract(qCRC3B, 1),
|
||||||
|
AdvSimd.Extract(qCRC3B, 2),
|
||||||
|
AdvSimd.Extract(qCRC3B, 3),
|
||||||
|
AdvSimd.Extract(qCRC3B, 4),
|
||||||
|
AdvSimd.Extract(qCRC3B, 5),
|
||||||
|
AdvSimd.Extract(qCRC3B, 6),
|
||||||
|
AdvSimd.Extract(qCRC3B, 7),
|
||||||
|
AdvSimd.Extract(qCRC3B, 8),
|
||||||
|
AdvSimd.Extract(qCRC3B, 9),
|
||||||
|
AdvSimd.Extract(qCRC3B, 10),
|
||||||
|
AdvSimd.Extract(qCRC3B, 11))
|
||||||
|
.AsUInt64();
|
||||||
|
|
||||||
qCRC3 = vmull_p64(qCRC3.GetLower(), crcFold.GetUpper());
|
qCRC3 = vmull_p64(qCRC3.GetLower(), crcFold.GetUpper());
|
||||||
qCRC3 = AdvSimd.Xor(qCRC3.AsUInt32(), qCRC0.AsUInt32()).AsUInt64();
|
qCRC3 = AdvSimd.Xor(qCRC3.AsUInt32(), qCRC0.AsUInt32()).AsUInt64();
|
||||||
|
|||||||
@@ -53,283 +53,259 @@ public sealed class Crc32Context : IChecksum
|
|||||||
{
|
{
|
||||||
new uint[]
|
new uint[]
|
||||||
{
|
{
|
||||||
0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
|
0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,
|
||||||
0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
|
0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,
|
||||||
0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
|
0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,
|
||||||
0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
|
0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
|
||||||
0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
|
0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,
|
||||||
0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
|
0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,
|
||||||
0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
|
0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,
|
||||||
0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
|
0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
|
||||||
0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
|
0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,
|
||||||
0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
|
0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,
|
||||||
0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
|
0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,
|
||||||
0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
|
0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
|
||||||
0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
|
0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,
|
||||||
0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
|
0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,
|
||||||
0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
|
0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,
|
||||||
0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
|
0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
|
||||||
0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
|
0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,
|
||||||
0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
|
0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,
|
||||||
0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
|
0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,
|
||||||
0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
|
0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
|
||||||
0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
|
0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,
|
||||||
0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
|
0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,
|
||||||
0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
|
0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,
|
||||||
0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
|
0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
|
||||||
0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
|
0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,
|
||||||
0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
|
0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,
|
||||||
0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
|
0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,
|
||||||
0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
|
0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
|
||||||
0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
|
0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
|
||||||
0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
|
|
||||||
0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
|
|
||||||
0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
|
|
||||||
},
|
},
|
||||||
new uint[]
|
new uint[]
|
||||||
{
|
{
|
||||||
0x00000000, 0x191B3141, 0x32366282, 0x2B2D53C3, 0x646CC504, 0x7D77F445, 0x565AA786, 0x4F4196C7,
|
0x00000000, 0x191B3141, 0x32366282, 0x2B2D53C3, 0x646CC504, 0x7D77F445, 0x565AA786, 0x4F4196C7, 0xC8D98A08,
|
||||||
0xC8D98A08, 0xD1C2BB49, 0xFAEFE88A, 0xE3F4D9CB, 0xACB54F0C, 0xB5AE7E4D, 0x9E832D8E, 0x87981CCF,
|
0xD1C2BB49, 0xFAEFE88A, 0xE3F4D9CB, 0xACB54F0C, 0xB5AE7E4D, 0x9E832D8E, 0x87981CCF, 0x4AC21251, 0x53D92310,
|
||||||
0x4AC21251, 0x53D92310, 0x78F470D3, 0x61EF4192, 0x2EAED755, 0x37B5E614, 0x1C98B5D7, 0x05838496,
|
0x78F470D3, 0x61EF4192, 0x2EAED755, 0x37B5E614, 0x1C98B5D7, 0x05838496, 0x821B9859, 0x9B00A918, 0xB02DFADB,
|
||||||
0x821B9859, 0x9B00A918, 0xB02DFADB, 0xA936CB9A, 0xE6775D5D, 0xFF6C6C1C, 0xD4413FDF, 0xCD5A0E9E,
|
0xA936CB9A, 0xE6775D5D, 0xFF6C6C1C, 0xD4413FDF, 0xCD5A0E9E, 0x958424A2, 0x8C9F15E3, 0xA7B24620, 0xBEA97761,
|
||||||
0x958424A2, 0x8C9F15E3, 0xA7B24620, 0xBEA97761, 0xF1E8E1A6, 0xE8F3D0E7, 0xC3DE8324, 0xDAC5B265,
|
0xF1E8E1A6, 0xE8F3D0E7, 0xC3DE8324, 0xDAC5B265, 0x5D5DAEAA, 0x44469FEB, 0x6F6BCC28, 0x7670FD69, 0x39316BAE,
|
||||||
0x5D5DAEAA, 0x44469FEB, 0x6F6BCC28, 0x7670FD69, 0x39316BAE, 0x202A5AEF, 0x0B07092C, 0x121C386D,
|
0x202A5AEF, 0x0B07092C, 0x121C386D, 0xDF4636F3, 0xC65D07B2, 0xED705471, 0xF46B6530, 0xBB2AF3F7, 0xA231C2B6,
|
||||||
0xDF4636F3, 0xC65D07B2, 0xED705471, 0xF46B6530, 0xBB2AF3F7, 0xA231C2B6, 0x891C9175, 0x9007A034,
|
0x891C9175, 0x9007A034, 0x179FBCFB, 0x0E848DBA, 0x25A9DE79, 0x3CB2EF38, 0x73F379FF, 0x6AE848BE, 0x41C51B7D,
|
||||||
0x179FBCFB, 0x0E848DBA, 0x25A9DE79, 0x3CB2EF38, 0x73F379FF, 0x6AE848BE, 0x41C51B7D, 0x58DE2A3C,
|
0x58DE2A3C, 0xF0794F05, 0xE9627E44, 0xC24F2D87, 0xDB541CC6, 0x94158A01, 0x8D0EBB40, 0xA623E883, 0xBF38D9C2,
|
||||||
0xF0794F05, 0xE9627E44, 0xC24F2D87, 0xDB541CC6, 0x94158A01, 0x8D0EBB40, 0xA623E883, 0xBF38D9C2,
|
0x38A0C50D, 0x21BBF44C, 0x0A96A78F, 0x138D96CE, 0x5CCC0009, 0x45D73148, 0x6EFA628B, 0x77E153CA, 0xBABB5D54,
|
||||||
0x38A0C50D, 0x21BBF44C, 0x0A96A78F, 0x138D96CE, 0x5CCC0009, 0x45D73148, 0x6EFA628B, 0x77E153CA,
|
0xA3A06C15, 0x888D3FD6, 0x91960E97, 0xDED79850, 0xC7CCA911, 0xECE1FAD2, 0xF5FACB93, 0x7262D75C, 0x6B79E61D,
|
||||||
0xBABB5D54, 0xA3A06C15, 0x888D3FD6, 0x91960E97, 0xDED79850, 0xC7CCA911, 0xECE1FAD2, 0xF5FACB93,
|
0x4054B5DE, 0x594F849F, 0x160E1258, 0x0F152319, 0x243870DA, 0x3D23419B, 0x65FD6BA7, 0x7CE65AE6, 0x57CB0925,
|
||||||
0x7262D75C, 0x6B79E61D, 0x4054B5DE, 0x594F849F, 0x160E1258, 0x0F152319, 0x243870DA, 0x3D23419B,
|
0x4ED03864, 0x0191AEA3, 0x188A9FE2, 0x33A7CC21, 0x2ABCFD60, 0xAD24E1AF, 0xB43FD0EE, 0x9F12832D, 0x8609B26C,
|
||||||
0x65FD6BA7, 0x7CE65AE6, 0x57CB0925, 0x4ED03864, 0x0191AEA3, 0x188A9FE2, 0x33A7CC21, 0x2ABCFD60,
|
0xC94824AB, 0xD05315EA, 0xFB7E4629, 0xE2657768, 0x2F3F79F6, 0x362448B7, 0x1D091B74, 0x04122A35, 0x4B53BCF2,
|
||||||
0xAD24E1AF, 0xB43FD0EE, 0x9F12832D, 0x8609B26C, 0xC94824AB, 0xD05315EA, 0xFB7E4629, 0xE2657768,
|
0x52488DB3, 0x7965DE70, 0x607EEF31, 0xE7E6F3FE, 0xFEFDC2BF, 0xD5D0917C, 0xCCCBA03D, 0x838A36FA, 0x9A9107BB,
|
||||||
0x2F3F79F6, 0x362448B7, 0x1D091B74, 0x04122A35, 0x4B53BCF2, 0x52488DB3, 0x7965DE70, 0x607EEF31,
|
0xB1BC5478, 0xA8A76539, 0x3B83984B, 0x2298A90A, 0x09B5FAC9, 0x10AECB88, 0x5FEF5D4F, 0x46F46C0E, 0x6DD93FCD,
|
||||||
0xE7E6F3FE, 0xFEFDC2BF, 0xD5D0917C, 0xCCCBA03D, 0x838A36FA, 0x9A9107BB, 0xB1BC5478, 0xA8A76539,
|
0x74C20E8C, 0xF35A1243, 0xEA412302, 0xC16C70C1, 0xD8774180, 0x9736D747, 0x8E2DE606, 0xA500B5C5, 0xBC1B8484,
|
||||||
0x3B83984B, 0x2298A90A, 0x09B5FAC9, 0x10AECB88, 0x5FEF5D4F, 0x46F46C0E, 0x6DD93FCD, 0x74C20E8C,
|
0x71418A1A, 0x685ABB5B, 0x4377E898, 0x5A6CD9D9, 0x152D4F1E, 0x0C367E5F, 0x271B2D9C, 0x3E001CDD, 0xB9980012,
|
||||||
0xF35A1243, 0xEA412302, 0xC16C70C1, 0xD8774180, 0x9736D747, 0x8E2DE606, 0xA500B5C5, 0xBC1B8484,
|
0xA0833153, 0x8BAE6290, 0x92B553D1, 0xDDF4C516, 0xC4EFF457, 0xEFC2A794, 0xF6D996D5, 0xAE07BCE9, 0xB71C8DA8,
|
||||||
0x71418A1A, 0x685ABB5B, 0x4377E898, 0x5A6CD9D9, 0x152D4F1E, 0x0C367E5F, 0x271B2D9C, 0x3E001CDD,
|
0x9C31DE6B, 0x852AEF2A, 0xCA6B79ED, 0xD37048AC, 0xF85D1B6F, 0xE1462A2E, 0x66DE36E1, 0x7FC507A0, 0x54E85463,
|
||||||
0xB9980012, 0xA0833153, 0x8BAE6290, 0x92B553D1, 0xDDF4C516, 0xC4EFF457, 0xEFC2A794, 0xF6D996D5,
|
0x4DF36522, 0x02B2F3E5, 0x1BA9C2A4, 0x30849167, 0x299FA026, 0xE4C5AEB8, 0xFDDE9FF9, 0xD6F3CC3A, 0xCFE8FD7B,
|
||||||
0xAE07BCE9, 0xB71C8DA8, 0x9C31DE6B, 0x852AEF2A, 0xCA6B79ED, 0xD37048AC, 0xF85D1B6F, 0xE1462A2E,
|
0x80A96BBC, 0x99B25AFD, 0xB29F093E, 0xAB84387F, 0x2C1C24B0, 0x350715F1, 0x1E2A4632, 0x07317773, 0x4870E1B4,
|
||||||
0x66DE36E1, 0x7FC507A0, 0x54E85463, 0x4DF36522, 0x02B2F3E5, 0x1BA9C2A4, 0x30849167, 0x299FA026,
|
0x516BD0F5, 0x7A468336, 0x635DB277, 0xCBFAD74E, 0xD2E1E60F, 0xF9CCB5CC, 0xE0D7848D, 0xAF96124A, 0xB68D230B,
|
||||||
0xE4C5AEB8, 0xFDDE9FF9, 0xD6F3CC3A, 0xCFE8FD7B, 0x80A96BBC, 0x99B25AFD, 0xB29F093E, 0xAB84387F,
|
0x9DA070C8, 0x84BB4189, 0x03235D46, 0x1A386C07, 0x31153FC4, 0x280E0E85, 0x674F9842, 0x7E54A903, 0x5579FAC0,
|
||||||
0x2C1C24B0, 0x350715F1, 0x1E2A4632, 0x07317773, 0x4870E1B4, 0x516BD0F5, 0x7A468336, 0x635DB277,
|
0x4C62CB81, 0x8138C51F, 0x9823F45E, 0xB30EA79D, 0xAA1596DC, 0xE554001B, 0xFC4F315A, 0xD7626299, 0xCE7953D8,
|
||||||
0xCBFAD74E, 0xD2E1E60F, 0xF9CCB5CC, 0xE0D7848D, 0xAF96124A, 0xB68D230B, 0x9DA070C8, 0x84BB4189,
|
0x49E14F17, 0x50FA7E56, 0x7BD72D95, 0x62CC1CD4, 0x2D8D8A13, 0x3496BB52, 0x1FBBE891, 0x06A0D9D0, 0x5E7EF3EC,
|
||||||
0x03235D46, 0x1A386C07, 0x31153FC4, 0x280E0E85, 0x674F9842, 0x7E54A903, 0x5579FAC0, 0x4C62CB81,
|
0x4765C2AD, 0x6C48916E, 0x7553A02F, 0x3A1236E8, 0x230907A9, 0x0824546A, 0x113F652B, 0x96A779E4, 0x8FBC48A5,
|
||||||
0x8138C51F, 0x9823F45E, 0xB30EA79D, 0xAA1596DC, 0xE554001B, 0xFC4F315A, 0xD7626299, 0xCE7953D8,
|
0xA4911B66, 0xBD8A2A27, 0xF2CBBCE0, 0xEBD08DA1, 0xC0FDDE62, 0xD9E6EF23, 0x14BCE1BD, 0x0DA7D0FC, 0x268A833F,
|
||||||
0x49E14F17, 0x50FA7E56, 0x7BD72D95, 0x62CC1CD4, 0x2D8D8A13, 0x3496BB52, 0x1FBBE891, 0x06A0D9D0,
|
0x3F91B27E, 0x70D024B9, 0x69CB15F8, 0x42E6463B, 0x5BFD777A, 0xDC656BB5, 0xC57E5AF4, 0xEE530937, 0xF7483876,
|
||||||
0x5E7EF3EC, 0x4765C2AD, 0x6C48916E, 0x7553A02F, 0x3A1236E8, 0x230907A9, 0x0824546A, 0x113F652B,
|
0xB809AEB1, 0xA1129FF0, 0x8A3FCC33, 0x9324FD72
|
||||||
0x96A779E4, 0x8FBC48A5, 0xA4911B66, 0xBD8A2A27, 0xF2CBBCE0, 0xEBD08DA1, 0xC0FDDE62, 0xD9E6EF23,
|
|
||||||
0x14BCE1BD, 0x0DA7D0FC, 0x268A833F, 0x3F91B27E, 0x70D024B9, 0x69CB15F8, 0x42E6463B, 0x5BFD777A,
|
|
||||||
0xDC656BB5, 0xC57E5AF4, 0xEE530937, 0xF7483876, 0xB809AEB1, 0xA1129FF0, 0x8A3FCC33, 0x9324FD72
|
|
||||||
},
|
},
|
||||||
new uint[]
|
new uint[]
|
||||||
{
|
{
|
||||||
0x00000000, 0x01C26A37, 0x0384D46E, 0x0246BE59, 0x0709A8DC, 0x06CBC2EB, 0x048D7CB2, 0x054F1685,
|
0x00000000, 0x01C26A37, 0x0384D46E, 0x0246BE59, 0x0709A8DC, 0x06CBC2EB, 0x048D7CB2, 0x054F1685, 0x0E1351B8,
|
||||||
0x0E1351B8, 0x0FD13B8F, 0x0D9785D6, 0x0C55EFE1, 0x091AF964, 0x08D89353, 0x0A9E2D0A, 0x0B5C473D,
|
0x0FD13B8F, 0x0D9785D6, 0x0C55EFE1, 0x091AF964, 0x08D89353, 0x0A9E2D0A, 0x0B5C473D, 0x1C26A370, 0x1DE4C947,
|
||||||
0x1C26A370, 0x1DE4C947, 0x1FA2771E, 0x1E601D29, 0x1B2F0BAC, 0x1AED619B, 0x18ABDFC2, 0x1969B5F5,
|
0x1FA2771E, 0x1E601D29, 0x1B2F0BAC, 0x1AED619B, 0x18ABDFC2, 0x1969B5F5, 0x1235F2C8, 0x13F798FF, 0x11B126A6,
|
||||||
0x1235F2C8, 0x13F798FF, 0x11B126A6, 0x10734C91, 0x153C5A14, 0x14FE3023, 0x16B88E7A, 0x177AE44D,
|
0x10734C91, 0x153C5A14, 0x14FE3023, 0x16B88E7A, 0x177AE44D, 0x384D46E0, 0x398F2CD7, 0x3BC9928E, 0x3A0BF8B9,
|
||||||
0x384D46E0, 0x398F2CD7, 0x3BC9928E, 0x3A0BF8B9, 0x3F44EE3C, 0x3E86840B, 0x3CC03A52, 0x3D025065,
|
0x3F44EE3C, 0x3E86840B, 0x3CC03A52, 0x3D025065, 0x365E1758, 0x379C7D6F, 0x35DAC336, 0x3418A901, 0x3157BF84,
|
||||||
0x365E1758, 0x379C7D6F, 0x35DAC336, 0x3418A901, 0x3157BF84, 0x3095D5B3, 0x32D36BEA, 0x331101DD,
|
0x3095D5B3, 0x32D36BEA, 0x331101DD, 0x246BE590, 0x25A98FA7, 0x27EF31FE, 0x262D5BC9, 0x23624D4C, 0x22A0277B,
|
||||||
0x246BE590, 0x25A98FA7, 0x27EF31FE, 0x262D5BC9, 0x23624D4C, 0x22A0277B, 0x20E69922, 0x2124F315,
|
0x20E69922, 0x2124F315, 0x2A78B428, 0x2BBADE1F, 0x29FC6046, 0x283E0A71, 0x2D711CF4, 0x2CB376C3, 0x2EF5C89A,
|
||||||
0x2A78B428, 0x2BBADE1F, 0x29FC6046, 0x283E0A71, 0x2D711CF4, 0x2CB376C3, 0x2EF5C89A, 0x2F37A2AD,
|
0x2F37A2AD, 0x709A8DC0, 0x7158E7F7, 0x731E59AE, 0x72DC3399, 0x7793251C, 0x76514F2B, 0x7417F172, 0x75D59B45,
|
||||||
0x709A8DC0, 0x7158E7F7, 0x731E59AE, 0x72DC3399, 0x7793251C, 0x76514F2B, 0x7417F172, 0x75D59B45,
|
0x7E89DC78, 0x7F4BB64F, 0x7D0D0816, 0x7CCF6221, 0x798074A4, 0x78421E93, 0x7A04A0CA, 0x7BC6CAFD, 0x6CBC2EB0,
|
||||||
0x7E89DC78, 0x7F4BB64F, 0x7D0D0816, 0x7CCF6221, 0x798074A4, 0x78421E93, 0x7A04A0CA, 0x7BC6CAFD,
|
0x6D7E4487, 0x6F38FADE, 0x6EFA90E9, 0x6BB5866C, 0x6A77EC5B, 0x68315202, 0x69F33835, 0x62AF7F08, 0x636D153F,
|
||||||
0x6CBC2EB0, 0x6D7E4487, 0x6F38FADE, 0x6EFA90E9, 0x6BB5866C, 0x6A77EC5B, 0x68315202, 0x69F33835,
|
0x612BAB66, 0x60E9C151, 0x65A6D7D4, 0x6464BDE3, 0x662203BA, 0x67E0698D, 0x48D7CB20, 0x4915A117, 0x4B531F4E,
|
||||||
0x62AF7F08, 0x636D153F, 0x612BAB66, 0x60E9C151, 0x65A6D7D4, 0x6464BDE3, 0x662203BA, 0x67E0698D,
|
0x4A917579, 0x4FDE63FC, 0x4E1C09CB, 0x4C5AB792, 0x4D98DDA5, 0x46C49A98, 0x4706F0AF, 0x45404EF6, 0x448224C1,
|
||||||
0x48D7CB20, 0x4915A117, 0x4B531F4E, 0x4A917579, 0x4FDE63FC, 0x4E1C09CB, 0x4C5AB792, 0x4D98DDA5,
|
0x41CD3244, 0x400F5873, 0x4249E62A, 0x438B8C1D, 0x54F16850, 0x55330267, 0x5775BC3E, 0x56B7D609, 0x53F8C08C,
|
||||||
0x46C49A98, 0x4706F0AF, 0x45404EF6, 0x448224C1, 0x41CD3244, 0x400F5873, 0x4249E62A, 0x438B8C1D,
|
0x523AAABB, 0x507C14E2, 0x51BE7ED5, 0x5AE239E8, 0x5B2053DF, 0x5966ED86, 0x58A487B1, 0x5DEB9134, 0x5C29FB03,
|
||||||
0x54F16850, 0x55330267, 0x5775BC3E, 0x56B7D609, 0x53F8C08C, 0x523AAABB, 0x507C14E2, 0x51BE7ED5,
|
0x5E6F455A, 0x5FAD2F6D, 0xE1351B80, 0xE0F771B7, 0xE2B1CFEE, 0xE373A5D9, 0xE63CB35C, 0xE7FED96B, 0xE5B86732,
|
||||||
0x5AE239E8, 0x5B2053DF, 0x5966ED86, 0x58A487B1, 0x5DEB9134, 0x5C29FB03, 0x5E6F455A, 0x5FAD2F6D,
|
0xE47A0D05, 0xEF264A38, 0xEEE4200F, 0xECA29E56, 0xED60F461, 0xE82FE2E4, 0xE9ED88D3, 0xEBAB368A, 0xEA695CBD,
|
||||||
0xE1351B80, 0xE0F771B7, 0xE2B1CFEE, 0xE373A5D9, 0xE63CB35C, 0xE7FED96B, 0xE5B86732, 0xE47A0D05,
|
0xFD13B8F0, 0xFCD1D2C7, 0xFE976C9E, 0xFF5506A9, 0xFA1A102C, 0xFBD87A1B, 0xF99EC442, 0xF85CAE75, 0xF300E948,
|
||||||
0xEF264A38, 0xEEE4200F, 0xECA29E56, 0xED60F461, 0xE82FE2E4, 0xE9ED88D3, 0xEBAB368A, 0xEA695CBD,
|
0xF2C2837F, 0xF0843D26, 0xF1465711, 0xF4094194, 0xF5CB2BA3, 0xF78D95FA, 0xF64FFFCD, 0xD9785D60, 0xD8BA3757,
|
||||||
0xFD13B8F0, 0xFCD1D2C7, 0xFE976C9E, 0xFF5506A9, 0xFA1A102C, 0xFBD87A1B, 0xF99EC442, 0xF85CAE75,
|
0xDAFC890E, 0xDB3EE339, 0xDE71F5BC, 0xDFB39F8B, 0xDDF521D2, 0xDC374BE5, 0xD76B0CD8, 0xD6A966EF, 0xD4EFD8B6,
|
||||||
0xF300E948, 0xF2C2837F, 0xF0843D26, 0xF1465711, 0xF4094194, 0xF5CB2BA3, 0xF78D95FA, 0xF64FFFCD,
|
0xD52DB281, 0xD062A404, 0xD1A0CE33, 0xD3E6706A, 0xD2241A5D, 0xC55EFE10, 0xC49C9427, 0xC6DA2A7E, 0xC7184049,
|
||||||
0xD9785D60, 0xD8BA3757, 0xDAFC890E, 0xDB3EE339, 0xDE71F5BC, 0xDFB39F8B, 0xDDF521D2, 0xDC374BE5,
|
0xC25756CC, 0xC3953CFB, 0xC1D382A2, 0xC011E895, 0xCB4DAFA8, 0xCA8FC59F, 0xC8C97BC6, 0xC90B11F1, 0xCC440774,
|
||||||
0xD76B0CD8, 0xD6A966EF, 0xD4EFD8B6, 0xD52DB281, 0xD062A404, 0xD1A0CE33, 0xD3E6706A, 0xD2241A5D,
|
0xCD866D43, 0xCFC0D31A, 0xCE02B92D, 0x91AF9640, 0x906DFC77, 0x922B422E, 0x93E92819, 0x96A63E9C, 0x976454AB,
|
||||||
0xC55EFE10, 0xC49C9427, 0xC6DA2A7E, 0xC7184049, 0xC25756CC, 0xC3953CFB, 0xC1D382A2, 0xC011E895,
|
0x9522EAF2, 0x94E080C5, 0x9FBCC7F8, 0x9E7EADCF, 0x9C381396, 0x9DFA79A1, 0x98B56F24, 0x99770513, 0x9B31BB4A,
|
||||||
0xCB4DAFA8, 0xCA8FC59F, 0xC8C97BC6, 0xC90B11F1, 0xCC440774, 0xCD866D43, 0xCFC0D31A, 0xCE02B92D,
|
0x9AF3D17D, 0x8D893530, 0x8C4B5F07, 0x8E0DE15E, 0x8FCF8B69, 0x8A809DEC, 0x8B42F7DB, 0x89044982, 0x88C623B5,
|
||||||
0x91AF9640, 0x906DFC77, 0x922B422E, 0x93E92819, 0x96A63E9C, 0x976454AB, 0x9522EAF2, 0x94E080C5,
|
0x839A6488, 0x82580EBF, 0x801EB0E6, 0x81DCDAD1, 0x8493CC54, 0x8551A663, 0x8717183A, 0x86D5720D, 0xA9E2D0A0,
|
||||||
0x9FBCC7F8, 0x9E7EADCF, 0x9C381396, 0x9DFA79A1, 0x98B56F24, 0x99770513, 0x9B31BB4A, 0x9AF3D17D,
|
0xA820BA97, 0xAA6604CE, 0xABA46EF9, 0xAEEB787C, 0xAF29124B, 0xAD6FAC12, 0xACADC625, 0xA7F18118, 0xA633EB2F,
|
||||||
0x8D893530, 0x8C4B5F07, 0x8E0DE15E, 0x8FCF8B69, 0x8A809DEC, 0x8B42F7DB, 0x89044982, 0x88C623B5,
|
0xA4755576, 0xA5B73F41, 0xA0F829C4, 0xA13A43F3, 0xA37CFDAA, 0xA2BE979D, 0xB5C473D0, 0xB40619E7, 0xB640A7BE,
|
||||||
0x839A6488, 0x82580EBF, 0x801EB0E6, 0x81DCDAD1, 0x8493CC54, 0x8551A663, 0x8717183A, 0x86D5720D,
|
0xB782CD89, 0xB2CDDB0C, 0xB30FB13B, 0xB1490F62, 0xB08B6555, 0xBBD72268, 0xBA15485F, 0xB853F606, 0xB9919C31,
|
||||||
0xA9E2D0A0, 0xA820BA97, 0xAA6604CE, 0xABA46EF9, 0xAEEB787C, 0xAF29124B, 0xAD6FAC12, 0xACADC625,
|
0xBCDE8AB4, 0xBD1CE083, 0xBF5A5EDA, 0xBE9834ED
|
||||||
0xA7F18118, 0xA633EB2F, 0xA4755576, 0xA5B73F41, 0xA0F829C4, 0xA13A43F3, 0xA37CFDAA, 0xA2BE979D,
|
|
||||||
0xB5C473D0, 0xB40619E7, 0xB640A7BE, 0xB782CD89, 0xB2CDDB0C, 0xB30FB13B, 0xB1490F62, 0xB08B6555,
|
|
||||||
0xBBD72268, 0xBA15485F, 0xB853F606, 0xB9919C31, 0xBCDE8AB4, 0xBD1CE083, 0xBF5A5EDA, 0xBE9834ED
|
|
||||||
},
|
},
|
||||||
new uint[]
|
new uint[]
|
||||||
{
|
{
|
||||||
0x00000000, 0xB8BC6765, 0xAA09C88B, 0x12B5AFEE, 0x8F629757, 0x37DEF032, 0x256B5FDC, 0x9DD738B9,
|
0x00000000, 0xB8BC6765, 0xAA09C88B, 0x12B5AFEE, 0x8F629757, 0x37DEF032, 0x256B5FDC, 0x9DD738B9, 0xC5B428EF,
|
||||||
0xC5B428EF, 0x7D084F8A, 0x6FBDE064, 0xD7018701, 0x4AD6BFB8, 0xF26AD8DD, 0xE0DF7733, 0x58631056,
|
0x7D084F8A, 0x6FBDE064, 0xD7018701, 0x4AD6BFB8, 0xF26AD8DD, 0xE0DF7733, 0x58631056, 0x5019579F, 0xE8A530FA,
|
||||||
0x5019579F, 0xE8A530FA, 0xFA109F14, 0x42ACF871, 0xDF7BC0C8, 0x67C7A7AD, 0x75720843, 0xCDCE6F26,
|
0xFA109F14, 0x42ACF871, 0xDF7BC0C8, 0x67C7A7AD, 0x75720843, 0xCDCE6F26, 0x95AD7F70, 0x2D111815, 0x3FA4B7FB,
|
||||||
0x95AD7F70, 0x2D111815, 0x3FA4B7FB, 0x8718D09E, 0x1ACFE827, 0xA2738F42, 0xB0C620AC, 0x087A47C9,
|
0x8718D09E, 0x1ACFE827, 0xA2738F42, 0xB0C620AC, 0x087A47C9, 0xA032AF3E, 0x188EC85B, 0x0A3B67B5, 0xB28700D0,
|
||||||
0xA032AF3E, 0x188EC85B, 0x0A3B67B5, 0xB28700D0, 0x2F503869, 0x97EC5F0C, 0x8559F0E2, 0x3DE59787,
|
0x2F503869, 0x97EC5F0C, 0x8559F0E2, 0x3DE59787, 0x658687D1, 0xDD3AE0B4, 0xCF8F4F5A, 0x7733283F, 0xEAE41086,
|
||||||
0x658687D1, 0xDD3AE0B4, 0xCF8F4F5A, 0x7733283F, 0xEAE41086, 0x525877E3, 0x40EDD80D, 0xF851BF68,
|
0x525877E3, 0x40EDD80D, 0xF851BF68, 0xF02BF8A1, 0x48979FC4, 0x5A22302A, 0xE29E574F, 0x7F496FF6, 0xC7F50893,
|
||||||
0xF02BF8A1, 0x48979FC4, 0x5A22302A, 0xE29E574F, 0x7F496FF6, 0xC7F50893, 0xD540A77D, 0x6DFCC018,
|
0xD540A77D, 0x6DFCC018, 0x359FD04E, 0x8D23B72B, 0x9F9618C5, 0x272A7FA0, 0xBAFD4719, 0x0241207C, 0x10F48F92,
|
||||||
0x359FD04E, 0x8D23B72B, 0x9F9618C5, 0x272A7FA0, 0xBAFD4719, 0x0241207C, 0x10F48F92, 0xA848E8F7,
|
0xA848E8F7, 0x9B14583D, 0x23A83F58, 0x311D90B6, 0x89A1F7D3, 0x1476CF6A, 0xACCAA80F, 0xBE7F07E1, 0x06C36084,
|
||||||
0x9B14583D, 0x23A83F58, 0x311D90B6, 0x89A1F7D3, 0x1476CF6A, 0xACCAA80F, 0xBE7F07E1, 0x06C36084,
|
0x5EA070D2, 0xE61C17B7, 0xF4A9B859, 0x4C15DF3C, 0xD1C2E785, 0x697E80E0, 0x7BCB2F0E, 0xC377486B, 0xCB0D0FA2,
|
||||||
0x5EA070D2, 0xE61C17B7, 0xF4A9B859, 0x4C15DF3C, 0xD1C2E785, 0x697E80E0, 0x7BCB2F0E, 0xC377486B,
|
0x73B168C7, 0x6104C729, 0xD9B8A04C, 0x446F98F5, 0xFCD3FF90, 0xEE66507E, 0x56DA371B, 0x0EB9274D, 0xB6054028,
|
||||||
0xCB0D0FA2, 0x73B168C7, 0x6104C729, 0xD9B8A04C, 0x446F98F5, 0xFCD3FF90, 0xEE66507E, 0x56DA371B,
|
0xA4B0EFC6, 0x1C0C88A3, 0x81DBB01A, 0x3967D77F, 0x2BD27891, 0x936E1FF4, 0x3B26F703, 0x839A9066, 0x912F3F88,
|
||||||
0x0EB9274D, 0xB6054028, 0xA4B0EFC6, 0x1C0C88A3, 0x81DBB01A, 0x3967D77F, 0x2BD27891, 0x936E1FF4,
|
0x299358ED, 0xB4446054, 0x0CF80731, 0x1E4DA8DF, 0xA6F1CFBA, 0xFE92DFEC, 0x462EB889, 0x549B1767, 0xEC277002,
|
||||||
0x3B26F703, 0x839A9066, 0x912F3F88, 0x299358ED, 0xB4446054, 0x0CF80731, 0x1E4DA8DF, 0xA6F1CFBA,
|
0x71F048BB, 0xC94C2FDE, 0xDBF98030, 0x6345E755, 0x6B3FA09C, 0xD383C7F9, 0xC1366817, 0x798A0F72, 0xE45D37CB,
|
||||||
0xFE92DFEC, 0x462EB889, 0x549B1767, 0xEC277002, 0x71F048BB, 0xC94C2FDE, 0xDBF98030, 0x6345E755,
|
0x5CE150AE, 0x4E54FF40, 0xF6E89825, 0xAE8B8873, 0x1637EF16, 0x048240F8, 0xBC3E279D, 0x21E91F24, 0x99557841,
|
||||||
0x6B3FA09C, 0xD383C7F9, 0xC1366817, 0x798A0F72, 0xE45D37CB, 0x5CE150AE, 0x4E54FF40, 0xF6E89825,
|
0x8BE0D7AF, 0x335CB0CA, 0xED59B63B, 0x55E5D15E, 0x47507EB0, 0xFFEC19D5, 0x623B216C, 0xDA874609, 0xC832E9E7,
|
||||||
0xAE8B8873, 0x1637EF16, 0x048240F8, 0xBC3E279D, 0x21E91F24, 0x99557841, 0x8BE0D7AF, 0x335CB0CA,
|
0x708E8E82, 0x28ED9ED4, 0x9051F9B1, 0x82E4565F, 0x3A58313A, 0xA78F0983, 0x1F336EE6, 0x0D86C108, 0xB53AA66D,
|
||||||
0xED59B63B, 0x55E5D15E, 0x47507EB0, 0xFFEC19D5, 0x623B216C, 0xDA874609, 0xC832E9E7, 0x708E8E82,
|
0xBD40E1A4, 0x05FC86C1, 0x1749292F, 0xAFF54E4A, 0x322276F3, 0x8A9E1196, 0x982BBE78, 0x2097D91D, 0x78F4C94B,
|
||||||
0x28ED9ED4, 0x9051F9B1, 0x82E4565F, 0x3A58313A, 0xA78F0983, 0x1F336EE6, 0x0D86C108, 0xB53AA66D,
|
0xC048AE2E, 0xD2FD01C0, 0x6A4166A5, 0xF7965E1C, 0x4F2A3979, 0x5D9F9697, 0xE523F1F2, 0x4D6B1905, 0xF5D77E60,
|
||||||
0xBD40E1A4, 0x05FC86C1, 0x1749292F, 0xAFF54E4A, 0x322276F3, 0x8A9E1196, 0x982BBE78, 0x2097D91D,
|
0xE762D18E, 0x5FDEB6EB, 0xC2098E52, 0x7AB5E937, 0x680046D9, 0xD0BC21BC, 0x88DF31EA, 0x3063568F, 0x22D6F961,
|
||||||
0x78F4C94B, 0xC048AE2E, 0xD2FD01C0, 0x6A4166A5, 0xF7965E1C, 0x4F2A3979, 0x5D9F9697, 0xE523F1F2,
|
0x9A6A9E04, 0x07BDA6BD, 0xBF01C1D8, 0xADB46E36, 0x15080953, 0x1D724E9A, 0xA5CE29FF, 0xB77B8611, 0x0FC7E174,
|
||||||
0x4D6B1905, 0xF5D77E60, 0xE762D18E, 0x5FDEB6EB, 0xC2098E52, 0x7AB5E937, 0x680046D9, 0xD0BC21BC,
|
0x9210D9CD, 0x2AACBEA8, 0x38191146, 0x80A57623, 0xD8C66675, 0x607A0110, 0x72CFAEFE, 0xCA73C99B, 0x57A4F122,
|
||||||
0x88DF31EA, 0x3063568F, 0x22D6F961, 0x9A6A9E04, 0x07BDA6BD, 0xBF01C1D8, 0xADB46E36, 0x15080953,
|
0xEF189647, 0xFDAD39A9, 0x45115ECC, 0x764DEE06, 0xCEF18963, 0xDC44268D, 0x64F841E8, 0xF92F7951, 0x41931E34,
|
||||||
0x1D724E9A, 0xA5CE29FF, 0xB77B8611, 0x0FC7E174, 0x9210D9CD, 0x2AACBEA8, 0x38191146, 0x80A57623,
|
0x5326B1DA, 0xEB9AD6BF, 0xB3F9C6E9, 0x0B45A18C, 0x19F00E62, 0xA14C6907, 0x3C9B51BE, 0x842736DB, 0x96929935,
|
||||||
0xD8C66675, 0x607A0110, 0x72CFAEFE, 0xCA73C99B, 0x57A4F122, 0xEF189647, 0xFDAD39A9, 0x45115ECC,
|
0x2E2EFE50, 0x2654B999, 0x9EE8DEFC, 0x8C5D7112, 0x34E11677, 0xA9362ECE, 0x118A49AB, 0x033FE645, 0xBB838120,
|
||||||
0x764DEE06, 0xCEF18963, 0xDC44268D, 0x64F841E8, 0xF92F7951, 0x41931E34, 0x5326B1DA, 0xEB9AD6BF,
|
0xE3E09176, 0x5B5CF613, 0x49E959FD, 0xF1553E98, 0x6C820621, 0xD43E6144, 0xC68BCEAA, 0x7E37A9CF, 0xD67F4138,
|
||||||
0xB3F9C6E9, 0x0B45A18C, 0x19F00E62, 0xA14C6907, 0x3C9B51BE, 0x842736DB, 0x96929935, 0x2E2EFE50,
|
0x6EC3265D, 0x7C7689B3, 0xC4CAEED6, 0x591DD66F, 0xE1A1B10A, 0xF3141EE4, 0x4BA87981, 0x13CB69D7, 0xAB770EB2,
|
||||||
0x2654B999, 0x9EE8DEFC, 0x8C5D7112, 0x34E11677, 0xA9362ECE, 0x118A49AB, 0x033FE645, 0xBB838120,
|
0xB9C2A15C, 0x017EC639, 0x9CA9FE80, 0x241599E5, 0x36A0360B, 0x8E1C516E, 0x866616A7, 0x3EDA71C2, 0x2C6FDE2C,
|
||||||
0xE3E09176, 0x5B5CF613, 0x49E959FD, 0xF1553E98, 0x6C820621, 0xD43E6144, 0xC68BCEAA, 0x7E37A9CF,
|
0x94D3B949, 0x090481F0, 0xB1B8E695, 0xA30D497B, 0x1BB12E1E, 0x43D23E48, 0xFB6E592D, 0xE9DBF6C3, 0x516791A6,
|
||||||
0xD67F4138, 0x6EC3265D, 0x7C7689B3, 0xC4CAEED6, 0x591DD66F, 0xE1A1B10A, 0xF3141EE4, 0x4BA87981,
|
0xCCB0A91F, 0x740CCE7A, 0x66B96194, 0xDE0506F1
|
||||||
0x13CB69D7, 0xAB770EB2, 0xB9C2A15C, 0x017EC639, 0x9CA9FE80, 0x241599E5, 0x36A0360B, 0x8E1C516E,
|
|
||||||
0x866616A7, 0x3EDA71C2, 0x2C6FDE2C, 0x94D3B949, 0x090481F0, 0xB1B8E695, 0xA30D497B, 0x1BB12E1E,
|
|
||||||
0x43D23E48, 0xFB6E592D, 0xE9DBF6C3, 0x516791A6, 0xCCB0A91F, 0x740CCE7A, 0x66B96194, 0xDE0506F1
|
|
||||||
},
|
},
|
||||||
new uint[]
|
new uint[]
|
||||||
{
|
{
|
||||||
0x00000000, 0x3D6029B0, 0x7AC05360, 0x47A07AD0, 0xF580A6C0, 0xC8E08F70, 0x8F40F5A0, 0xB220DC10,
|
0x00000000, 0x3D6029B0, 0x7AC05360, 0x47A07AD0, 0xF580A6C0, 0xC8E08F70, 0x8F40F5A0, 0xB220DC10, 0x30704BC1,
|
||||||
0x30704BC1, 0x0D106271, 0x4AB018A1, 0x77D03111, 0xC5F0ED01, 0xF890C4B1, 0xBF30BE61, 0x825097D1,
|
0x0D106271, 0x4AB018A1, 0x77D03111, 0xC5F0ED01, 0xF890C4B1, 0xBF30BE61, 0x825097D1, 0x60E09782, 0x5D80BE32,
|
||||||
0x60E09782, 0x5D80BE32, 0x1A20C4E2, 0x2740ED52, 0x95603142, 0xA80018F2, 0xEFA06222, 0xD2C04B92,
|
0x1A20C4E2, 0x2740ED52, 0x95603142, 0xA80018F2, 0xEFA06222, 0xD2C04B92, 0x5090DC43, 0x6DF0F5F3, 0x2A508F23,
|
||||||
0x5090DC43, 0x6DF0F5F3, 0x2A508F23, 0x1730A693, 0xA5107A83, 0x98705333, 0xDFD029E3, 0xE2B00053,
|
0x1730A693, 0xA5107A83, 0x98705333, 0xDFD029E3, 0xE2B00053, 0xC1C12F04, 0xFCA106B4, 0xBB017C64, 0x866155D4,
|
||||||
0xC1C12F04, 0xFCA106B4, 0xBB017C64, 0x866155D4, 0x344189C4, 0x0921A074, 0x4E81DAA4, 0x73E1F314,
|
0x344189C4, 0x0921A074, 0x4E81DAA4, 0x73E1F314, 0xF1B164C5, 0xCCD14D75, 0x8B7137A5, 0xB6111E15, 0x0431C205,
|
||||||
0xF1B164C5, 0xCCD14D75, 0x8B7137A5, 0xB6111E15, 0x0431C205, 0x3951EBB5, 0x7EF19165, 0x4391B8D5,
|
0x3951EBB5, 0x7EF19165, 0x4391B8D5, 0xA121B886, 0x9C419136, 0xDBE1EBE6, 0xE681C256, 0x54A11E46, 0x69C137F6,
|
||||||
0xA121B886, 0x9C419136, 0xDBE1EBE6, 0xE681C256, 0x54A11E46, 0x69C137F6, 0x2E614D26, 0x13016496,
|
0x2E614D26, 0x13016496, 0x9151F347, 0xAC31DAF7, 0xEB91A027, 0xD6F18997, 0x64D15587, 0x59B17C37, 0x1E1106E7,
|
||||||
0x9151F347, 0xAC31DAF7, 0xEB91A027, 0xD6F18997, 0x64D15587, 0x59B17C37, 0x1E1106E7, 0x23712F57,
|
0x23712F57, 0x58F35849, 0x659371F9, 0x22330B29, 0x1F532299, 0xAD73FE89, 0x9013D739, 0xD7B3ADE9, 0xEAD38459,
|
||||||
0x58F35849, 0x659371F9, 0x22330B29, 0x1F532299, 0xAD73FE89, 0x9013D739, 0xD7B3ADE9, 0xEAD38459,
|
0x68831388, 0x55E33A38, 0x124340E8, 0x2F236958, 0x9D03B548, 0xA0639CF8, 0xE7C3E628, 0xDAA3CF98, 0x3813CFCB,
|
||||||
0x68831388, 0x55E33A38, 0x124340E8, 0x2F236958, 0x9D03B548, 0xA0639CF8, 0xE7C3E628, 0xDAA3CF98,
|
0x0573E67B, 0x42D39CAB, 0x7FB3B51B, 0xCD93690B, 0xF0F340BB, 0xB7533A6B, 0x8A3313DB, 0x0863840A, 0x3503ADBA,
|
||||||
0x3813CFCB, 0x0573E67B, 0x42D39CAB, 0x7FB3B51B, 0xCD93690B, 0xF0F340BB, 0xB7533A6B, 0x8A3313DB,
|
0x72A3D76A, 0x4FC3FEDA, 0xFDE322CA, 0xC0830B7A, 0x872371AA, 0xBA43581A, 0x9932774D, 0xA4525EFD, 0xE3F2242D,
|
||||||
0x0863840A, 0x3503ADBA, 0x72A3D76A, 0x4FC3FEDA, 0xFDE322CA, 0xC0830B7A, 0x872371AA, 0xBA43581A,
|
0xDE920D9D, 0x6CB2D18D, 0x51D2F83D, 0x167282ED, 0x2B12AB5D, 0xA9423C8C, 0x9422153C, 0xD3826FEC, 0xEEE2465C,
|
||||||
0x9932774D, 0xA4525EFD, 0xE3F2242D, 0xDE920D9D, 0x6CB2D18D, 0x51D2F83D, 0x167282ED, 0x2B12AB5D,
|
0x5CC29A4C, 0x61A2B3FC, 0x2602C92C, 0x1B62E09C, 0xF9D2E0CF, 0xC4B2C97F, 0x8312B3AF, 0xBE729A1F, 0x0C52460F,
|
||||||
0xA9423C8C, 0x9422153C, 0xD3826FEC, 0xEEE2465C, 0x5CC29A4C, 0x61A2B3FC, 0x2602C92C, 0x1B62E09C,
|
0x31326FBF, 0x7692156F, 0x4BF23CDF, 0xC9A2AB0E, 0xF4C282BE, 0xB362F86E, 0x8E02D1DE, 0x3C220DCE, 0x0142247E,
|
||||||
0xF9D2E0CF, 0xC4B2C97F, 0x8312B3AF, 0xBE729A1F, 0x0C52460F, 0x31326FBF, 0x7692156F, 0x4BF23CDF,
|
0x46E25EAE, 0x7B82771E, 0xB1E6B092, 0x8C869922, 0xCB26E3F2, 0xF646CA42, 0x44661652, 0x79063FE2, 0x3EA64532,
|
||||||
0xC9A2AB0E, 0xF4C282BE, 0xB362F86E, 0x8E02D1DE, 0x3C220DCE, 0x0142247E, 0x46E25EAE, 0x7B82771E,
|
0x03C66C82, 0x8196FB53, 0xBCF6D2E3, 0xFB56A833, 0xC6368183, 0x74165D93, 0x49767423, 0x0ED60EF3, 0x33B62743,
|
||||||
0xB1E6B092, 0x8C869922, 0xCB26E3F2, 0xF646CA42, 0x44661652, 0x79063FE2, 0x3EA64532, 0x03C66C82,
|
0xD1062710, 0xEC660EA0, 0xABC67470, 0x96A65DC0, 0x248681D0, 0x19E6A860, 0x5E46D2B0, 0x6326FB00, 0xE1766CD1,
|
||||||
0x8196FB53, 0xBCF6D2E3, 0xFB56A833, 0xC6368183, 0x74165D93, 0x49767423, 0x0ED60EF3, 0x33B62743,
|
0xDC164561, 0x9BB63FB1, 0xA6D61601, 0x14F6CA11, 0x2996E3A1, 0x6E369971, 0x5356B0C1, 0x70279F96, 0x4D47B626,
|
||||||
0xD1062710, 0xEC660EA0, 0xABC67470, 0x96A65DC0, 0x248681D0, 0x19E6A860, 0x5E46D2B0, 0x6326FB00,
|
0x0AE7CCF6, 0x3787E546, 0x85A73956, 0xB8C710E6, 0xFF676A36, 0xC2074386, 0x4057D457, 0x7D37FDE7, 0x3A978737,
|
||||||
0xE1766CD1, 0xDC164561, 0x9BB63FB1, 0xA6D61601, 0x14F6CA11, 0x2996E3A1, 0x6E369971, 0x5356B0C1,
|
0x07F7AE87, 0xB5D77297, 0x88B75B27, 0xCF1721F7, 0xF2770847, 0x10C70814, 0x2DA721A4, 0x6A075B74, 0x576772C4,
|
||||||
0x70279F96, 0x4D47B626, 0x0AE7CCF6, 0x3787E546, 0x85A73956, 0xB8C710E6, 0xFF676A36, 0xC2074386,
|
0xE547AED4, 0xD8278764, 0x9F87FDB4, 0xA2E7D404, 0x20B743D5, 0x1DD76A65, 0x5A7710B5, 0x67173905, 0xD537E515,
|
||||||
0x4057D457, 0x7D37FDE7, 0x3A978737, 0x07F7AE87, 0xB5D77297, 0x88B75B27, 0xCF1721F7, 0xF2770847,
|
0xE857CCA5, 0xAFF7B675, 0x92979FC5, 0xE915E8DB, 0xD475C16B, 0x93D5BBBB, 0xAEB5920B, 0x1C954E1B, 0x21F567AB,
|
||||||
0x10C70814, 0x2DA721A4, 0x6A075B74, 0x576772C4, 0xE547AED4, 0xD8278764, 0x9F87FDB4, 0xA2E7D404,
|
0x66551D7B, 0x5B3534CB, 0xD965A31A, 0xE4058AAA, 0xA3A5F07A, 0x9EC5D9CA, 0x2CE505DA, 0x11852C6A, 0x562556BA,
|
||||||
0x20B743D5, 0x1DD76A65, 0x5A7710B5, 0x67173905, 0xD537E515, 0xE857CCA5, 0xAFF7B675, 0x92979FC5,
|
0x6B457F0A, 0x89F57F59, 0xB49556E9, 0xF3352C39, 0xCE550589, 0x7C75D999, 0x4115F029, 0x06B58AF9, 0x3BD5A349,
|
||||||
0xE915E8DB, 0xD475C16B, 0x93D5BBBB, 0xAEB5920B, 0x1C954E1B, 0x21F567AB, 0x66551D7B, 0x5B3534CB,
|
0xB9853498, 0x84E51D28, 0xC34567F8, 0xFE254E48, 0x4C059258, 0x7165BBE8, 0x36C5C138, 0x0BA5E888, 0x28D4C7DF,
|
||||||
0xD965A31A, 0xE4058AAA, 0xA3A5F07A, 0x9EC5D9CA, 0x2CE505DA, 0x11852C6A, 0x562556BA, 0x6B457F0A,
|
0x15B4EE6F, 0x521494BF, 0x6F74BD0F, 0xDD54611F, 0xE03448AF, 0xA794327F, 0x9AF41BCF, 0x18A48C1E, 0x25C4A5AE,
|
||||||
0x89F57F59, 0xB49556E9, 0xF3352C39, 0xCE550589, 0x7C75D999, 0x4115F029, 0x06B58AF9, 0x3BD5A349,
|
0x6264DF7E, 0x5F04F6CE, 0xED242ADE, 0xD044036E, 0x97E479BE, 0xAA84500E, 0x4834505D, 0x755479ED, 0x32F4033D,
|
||||||
0xB9853498, 0x84E51D28, 0xC34567F8, 0xFE254E48, 0x4C059258, 0x7165BBE8, 0x36C5C138, 0x0BA5E888,
|
0x0F942A8D, 0xBDB4F69D, 0x80D4DF2D, 0xC774A5FD, 0xFA148C4D, 0x78441B9C, 0x4524322C, 0x028448FC, 0x3FE4614C,
|
||||||
0x28D4C7DF, 0x15B4EE6F, 0x521494BF, 0x6F74BD0F, 0xDD54611F, 0xE03448AF, 0xA794327F, 0x9AF41BCF,
|
0x8DC4BD5C, 0xB0A494EC, 0xF704EE3C, 0xCA64C78C
|
||||||
0x18A48C1E, 0x25C4A5AE, 0x6264DF7E, 0x5F04F6CE, 0xED242ADE, 0xD044036E, 0x97E479BE, 0xAA84500E,
|
|
||||||
0x4834505D, 0x755479ED, 0x32F4033D, 0x0F942A8D, 0xBDB4F69D, 0x80D4DF2D, 0xC774A5FD, 0xFA148C4D,
|
|
||||||
0x78441B9C, 0x4524322C, 0x028448FC, 0x3FE4614C, 0x8DC4BD5C, 0xB0A494EC, 0xF704EE3C, 0xCA64C78C
|
|
||||||
},
|
},
|
||||||
new uint[]
|
new uint[]
|
||||||
{
|
{
|
||||||
0x00000000, 0xCB5CD3A5, 0x4DC8A10B, 0x869472AE, 0x9B914216, 0x50CD91B3, 0xD659E31D, 0x1D0530B8,
|
0x00000000, 0xCB5CD3A5, 0x4DC8A10B, 0x869472AE, 0x9B914216, 0x50CD91B3, 0xD659E31D, 0x1D0530B8, 0xEC53826D,
|
||||||
0xEC53826D, 0x270F51C8, 0xA19B2366, 0x6AC7F0C3, 0x77C2C07B, 0xBC9E13DE, 0x3A0A6170, 0xF156B2D5,
|
0x270F51C8, 0xA19B2366, 0x6AC7F0C3, 0x77C2C07B, 0xBC9E13DE, 0x3A0A6170, 0xF156B2D5, 0x03D6029B, 0xC88AD13E,
|
||||||
0x03D6029B, 0xC88AD13E, 0x4E1EA390, 0x85427035, 0x9847408D, 0x531B9328, 0xD58FE186, 0x1ED33223,
|
0x4E1EA390, 0x85427035, 0x9847408D, 0x531B9328, 0xD58FE186, 0x1ED33223, 0xEF8580F6, 0x24D95353, 0xA24D21FD,
|
||||||
0xEF8580F6, 0x24D95353, 0xA24D21FD, 0x6911F258, 0x7414C2E0, 0xBF481145, 0x39DC63EB, 0xF280B04E,
|
0x6911F258, 0x7414C2E0, 0xBF481145, 0x39DC63EB, 0xF280B04E, 0x07AC0536, 0xCCF0D693, 0x4A64A43D, 0x81387798,
|
||||||
0x07AC0536, 0xCCF0D693, 0x4A64A43D, 0x81387798, 0x9C3D4720, 0x57619485, 0xD1F5E62B, 0x1AA9358E,
|
0x9C3D4720, 0x57619485, 0xD1F5E62B, 0x1AA9358E, 0xEBFF875B, 0x20A354FE, 0xA6372650, 0x6D6BF5F5, 0x706EC54D,
|
||||||
0xEBFF875B, 0x20A354FE, 0xA6372650, 0x6D6BF5F5, 0x706EC54D, 0xBB3216E8, 0x3DA66446, 0xF6FAB7E3,
|
0xBB3216E8, 0x3DA66446, 0xF6FAB7E3, 0x047A07AD, 0xCF26D408, 0x49B2A6A6, 0x82EE7503, 0x9FEB45BB, 0x54B7961E,
|
||||||
0x047A07AD, 0xCF26D408, 0x49B2A6A6, 0x82EE7503, 0x9FEB45BB, 0x54B7961E, 0xD223E4B0, 0x197F3715,
|
0xD223E4B0, 0x197F3715, 0xE82985C0, 0x23755665, 0xA5E124CB, 0x6EBDF76E, 0x73B8C7D6, 0xB8E41473, 0x3E7066DD,
|
||||||
0xE82985C0, 0x23755665, 0xA5E124CB, 0x6EBDF76E, 0x73B8C7D6, 0xB8E41473, 0x3E7066DD, 0xF52CB578,
|
0xF52CB578, 0x0F580A6C, 0xC404D9C9, 0x4290AB67, 0x89CC78C2, 0x94C9487A, 0x5F959BDF, 0xD901E971, 0x125D3AD4,
|
||||||
0x0F580A6C, 0xC404D9C9, 0x4290AB67, 0x89CC78C2, 0x94C9487A, 0x5F959BDF, 0xD901E971, 0x125D3AD4,
|
0xE30B8801, 0x28575BA4, 0xAEC3290A, 0x659FFAAF, 0x789ACA17, 0xB3C619B2, 0x35526B1C, 0xFE0EB8B9, 0x0C8E08F7,
|
||||||
0xE30B8801, 0x28575BA4, 0xAEC3290A, 0x659FFAAF, 0x789ACA17, 0xB3C619B2, 0x35526B1C, 0xFE0EB8B9,
|
0xC7D2DB52, 0x4146A9FC, 0x8A1A7A59, 0x971F4AE1, 0x5C439944, 0xDAD7EBEA, 0x118B384F, 0xE0DD8A9A, 0x2B81593F,
|
||||||
0x0C8E08F7, 0xC7D2DB52, 0x4146A9FC, 0x8A1A7A59, 0x971F4AE1, 0x5C439944, 0xDAD7EBEA, 0x118B384F,
|
0xAD152B91, 0x6649F834, 0x7B4CC88C, 0xB0101B29, 0x36846987, 0xFDD8BA22, 0x08F40F5A, 0xC3A8DCFF, 0x453CAE51,
|
||||||
0xE0DD8A9A, 0x2B81593F, 0xAD152B91, 0x6649F834, 0x7B4CC88C, 0xB0101B29, 0x36846987, 0xFDD8BA22,
|
0x8E607DF4, 0x93654D4C, 0x58399EE9, 0xDEADEC47, 0x15F13FE2, 0xE4A78D37, 0x2FFB5E92, 0xA96F2C3C, 0x6233FF99,
|
||||||
0x08F40F5A, 0xC3A8DCFF, 0x453CAE51, 0x8E607DF4, 0x93654D4C, 0x58399EE9, 0xDEADEC47, 0x15F13FE2,
|
0x7F36CF21, 0xB46A1C84, 0x32FE6E2A, 0xF9A2BD8F, 0x0B220DC1, 0xC07EDE64, 0x46EAACCA, 0x8DB67F6F, 0x90B34FD7,
|
||||||
0xE4A78D37, 0x2FFB5E92, 0xA96F2C3C, 0x6233FF99, 0x7F36CF21, 0xB46A1C84, 0x32FE6E2A, 0xF9A2BD8F,
|
0x5BEF9C72, 0xDD7BEEDC, 0x16273D79, 0xE7718FAC, 0x2C2D5C09, 0xAAB92EA7, 0x61E5FD02, 0x7CE0CDBA, 0xB7BC1E1F,
|
||||||
0x0B220DC1, 0xC07EDE64, 0x46EAACCA, 0x8DB67F6F, 0x90B34FD7, 0x5BEF9C72, 0xDD7BEEDC, 0x16273D79,
|
0x31286CB1, 0xFA74BF14, 0x1EB014D8, 0xD5ECC77D, 0x5378B5D3, 0x98246676, 0x852156CE, 0x4E7D856B, 0xC8E9F7C5,
|
||||||
0xE7718FAC, 0x2C2D5C09, 0xAAB92EA7, 0x61E5FD02, 0x7CE0CDBA, 0xB7BC1E1F, 0x31286CB1, 0xFA74BF14,
|
0x03B52460, 0xF2E396B5, 0x39BF4510, 0xBF2B37BE, 0x7477E41B, 0x6972D4A3, 0xA22E0706, 0x24BA75A8, 0xEFE6A60D,
|
||||||
0x1EB014D8, 0xD5ECC77D, 0x5378B5D3, 0x98246676, 0x852156CE, 0x4E7D856B, 0xC8E9F7C5, 0x03B52460,
|
0x1D661643, 0xD63AC5E6, 0x50AEB748, 0x9BF264ED, 0x86F75455, 0x4DAB87F0, 0xCB3FF55E, 0x006326FB, 0xF135942E,
|
||||||
0xF2E396B5, 0x39BF4510, 0xBF2B37BE, 0x7477E41B, 0x6972D4A3, 0xA22E0706, 0x24BA75A8, 0xEFE6A60D,
|
0x3A69478B, 0xBCFD3525, 0x77A1E680, 0x6AA4D638, 0xA1F8059D, 0x276C7733, 0xEC30A496, 0x191C11EE, 0xD240C24B,
|
||||||
0x1D661643, 0xD63AC5E6, 0x50AEB748, 0x9BF264ED, 0x86F75455, 0x4DAB87F0, 0xCB3FF55E, 0x006326FB,
|
0x54D4B0E5, 0x9F886340, 0x828D53F8, 0x49D1805D, 0xCF45F2F3, 0x04192156, 0xF54F9383, 0x3E134026, 0xB8873288,
|
||||||
0xF135942E, 0x3A69478B, 0xBCFD3525, 0x77A1E680, 0x6AA4D638, 0xA1F8059D, 0x276C7733, 0xEC30A496,
|
0x73DBE12D, 0x6EDED195, 0xA5820230, 0x2316709E, 0xE84AA33B, 0x1ACA1375, 0xD196C0D0, 0x5702B27E, 0x9C5E61DB,
|
||||||
0x191C11EE, 0xD240C24B, 0x54D4B0E5, 0x9F886340, 0x828D53F8, 0x49D1805D, 0xCF45F2F3, 0x04192156,
|
0x815B5163, 0x4A0782C6, 0xCC93F068, 0x07CF23CD, 0xF6999118, 0x3DC542BD, 0xBB513013, 0x700DE3B6, 0x6D08D30E,
|
||||||
0xF54F9383, 0x3E134026, 0xB8873288, 0x73DBE12D, 0x6EDED195, 0xA5820230, 0x2316709E, 0xE84AA33B,
|
0xA65400AB, 0x20C07205, 0xEB9CA1A0, 0x11E81EB4, 0xDAB4CD11, 0x5C20BFBF, 0x977C6C1A, 0x8A795CA2, 0x41258F07,
|
||||||
0x1ACA1375, 0xD196C0D0, 0x5702B27E, 0x9C5E61DB, 0x815B5163, 0x4A0782C6, 0xCC93F068, 0x07CF23CD,
|
0xC7B1FDA9, 0x0CED2E0C, 0xFDBB9CD9, 0x36E74F7C, 0xB0733DD2, 0x7B2FEE77, 0x662ADECF, 0xAD760D6A, 0x2BE27FC4,
|
||||||
0xF6999118, 0x3DC542BD, 0xBB513013, 0x700DE3B6, 0x6D08D30E, 0xA65400AB, 0x20C07205, 0xEB9CA1A0,
|
0xE0BEAC61, 0x123E1C2F, 0xD962CF8A, 0x5FF6BD24, 0x94AA6E81, 0x89AF5E39, 0x42F38D9C, 0xC467FF32, 0x0F3B2C97,
|
||||||
0x11E81EB4, 0xDAB4CD11, 0x5C20BFBF, 0x977C6C1A, 0x8A795CA2, 0x41258F07, 0xC7B1FDA9, 0x0CED2E0C,
|
0xFE6D9E42, 0x35314DE7, 0xB3A53F49, 0x78F9ECEC, 0x65FCDC54, 0xAEA00FF1, 0x28347D5F, 0xE368AEFA, 0x16441B82,
|
||||||
0xFDBB9CD9, 0x36E74F7C, 0xB0733DD2, 0x7B2FEE77, 0x662ADECF, 0xAD760D6A, 0x2BE27FC4, 0xE0BEAC61,
|
0xDD18C827, 0x5B8CBA89, 0x90D0692C, 0x8DD55994, 0x46898A31, 0xC01DF89F, 0x0B412B3A, 0xFA1799EF, 0x314B4A4A,
|
||||||
0x123E1C2F, 0xD962CF8A, 0x5FF6BD24, 0x94AA6E81, 0x89AF5E39, 0x42F38D9C, 0xC467FF32, 0x0F3B2C97,
|
0xB7DF38E4, 0x7C83EB41, 0x6186DBF9, 0xAADA085C, 0x2C4E7AF2, 0xE712A957, 0x15921919, 0xDECECABC, 0x585AB812,
|
||||||
0xFE6D9E42, 0x35314DE7, 0xB3A53F49, 0x78F9ECEC, 0x65FCDC54, 0xAEA00FF1, 0x28347D5F, 0xE368AEFA,
|
0x93066BB7, 0x8E035B0F, 0x455F88AA, 0xC3CBFA04, 0x089729A1, 0xF9C19B74, 0x329D48D1, 0xB4093A7F, 0x7F55E9DA,
|
||||||
0x16441B82, 0xDD18C827, 0x5B8CBA89, 0x90D0692C, 0x8DD55994, 0x46898A31, 0xC01DF89F, 0x0B412B3A,
|
0x6250D962, 0xA90C0AC7, 0x2F987869, 0xE4C4ABCC
|
||||||
0xFA1799EF, 0x314B4A4A, 0xB7DF38E4, 0x7C83EB41, 0x6186DBF9, 0xAADA085C, 0x2C4E7AF2, 0xE712A957,
|
|
||||||
0x15921919, 0xDECECABC, 0x585AB812, 0x93066BB7, 0x8E035B0F, 0x455F88AA, 0xC3CBFA04, 0x089729A1,
|
|
||||||
0xF9C19B74, 0x329D48D1, 0xB4093A7F, 0x7F55E9DA, 0x6250D962, 0xA90C0AC7, 0x2F987869, 0xE4C4ABCC
|
|
||||||
},
|
},
|
||||||
new uint[]
|
new uint[]
|
||||||
{
|
{
|
||||||
0x00000000, 0xA6770BB4, 0x979F1129, 0x31E81A9D, 0xF44F2413, 0x52382FA7, 0x63D0353A, 0xC5A73E8E,
|
0x00000000, 0xA6770BB4, 0x979F1129, 0x31E81A9D, 0xF44F2413, 0x52382FA7, 0x63D0353A, 0xC5A73E8E, 0x33EF4E67,
|
||||||
0x33EF4E67, 0x959845D3, 0xA4705F4E, 0x020754FA, 0xC7A06A74, 0x61D761C0, 0x503F7B5D, 0xF64870E9,
|
0x959845D3, 0xA4705F4E, 0x020754FA, 0xC7A06A74, 0x61D761C0, 0x503F7B5D, 0xF64870E9, 0x67DE9CCE, 0xC1A9977A,
|
||||||
0x67DE9CCE, 0xC1A9977A, 0xF0418DE7, 0x56368653, 0x9391B8DD, 0x35E6B369, 0x040EA9F4, 0xA279A240,
|
0xF0418DE7, 0x56368653, 0x9391B8DD, 0x35E6B369, 0x040EA9F4, 0xA279A240, 0x5431D2A9, 0xF246D91D, 0xC3AEC380,
|
||||||
0x5431D2A9, 0xF246D91D, 0xC3AEC380, 0x65D9C834, 0xA07EF6BA, 0x0609FD0E, 0x37E1E793, 0x9196EC27,
|
0x65D9C834, 0xA07EF6BA, 0x0609FD0E, 0x37E1E793, 0x9196EC27, 0xCFBD399C, 0x69CA3228, 0x582228B5, 0xFE552301,
|
||||||
0xCFBD399C, 0x69CA3228, 0x582228B5, 0xFE552301, 0x3BF21D8F, 0x9D85163B, 0xAC6D0CA6, 0x0A1A0712,
|
0x3BF21D8F, 0x9D85163B, 0xAC6D0CA6, 0x0A1A0712, 0xFC5277FB, 0x5A257C4F, 0x6BCD66D2, 0xCDBA6D66, 0x081D53E8,
|
||||||
0xFC5277FB, 0x5A257C4F, 0x6BCD66D2, 0xCDBA6D66, 0x081D53E8, 0xAE6A585C, 0x9F8242C1, 0x39F54975,
|
0xAE6A585C, 0x9F8242C1, 0x39F54975, 0xA863A552, 0x0E14AEE6, 0x3FFCB47B, 0x998BBFCF, 0x5C2C8141, 0xFA5B8AF5,
|
||||||
0xA863A552, 0x0E14AEE6, 0x3FFCB47B, 0x998BBFCF, 0x5C2C8141, 0xFA5B8AF5, 0xCBB39068, 0x6DC49BDC,
|
0xCBB39068, 0x6DC49BDC, 0x9B8CEB35, 0x3DFBE081, 0x0C13FA1C, 0xAA64F1A8, 0x6FC3CF26, 0xC9B4C492, 0xF85CDE0F,
|
||||||
0x9B8CEB35, 0x3DFBE081, 0x0C13FA1C, 0xAA64F1A8, 0x6FC3CF26, 0xC9B4C492, 0xF85CDE0F, 0x5E2BD5BB,
|
0x5E2BD5BB, 0x440B7579, 0xE27C7ECD, 0xD3946450, 0x75E36FE4, 0xB044516A, 0x16335ADE, 0x27DB4043, 0x81AC4BF7,
|
||||||
0x440B7579, 0xE27C7ECD, 0xD3946450, 0x75E36FE4, 0xB044516A, 0x16335ADE, 0x27DB4043, 0x81AC4BF7,
|
0x77E43B1E, 0xD19330AA, 0xE07B2A37, 0x460C2183, 0x83AB1F0D, 0x25DC14B9, 0x14340E24, 0xB2430590, 0x23D5E9B7,
|
||||||
0x77E43B1E, 0xD19330AA, 0xE07B2A37, 0x460C2183, 0x83AB1F0D, 0x25DC14B9, 0x14340E24, 0xB2430590,
|
0x85A2E203, 0xB44AF89E, 0x123DF32A, 0xD79ACDA4, 0x71EDC610, 0x4005DC8D, 0xE672D739, 0x103AA7D0, 0xB64DAC64,
|
||||||
0x23D5E9B7, 0x85A2E203, 0xB44AF89E, 0x123DF32A, 0xD79ACDA4, 0x71EDC610, 0x4005DC8D, 0xE672D739,
|
0x87A5B6F9, 0x21D2BD4D, 0xE47583C3, 0x42028877, 0x73EA92EA, 0xD59D995E, 0x8BB64CE5, 0x2DC14751, 0x1C295DCC,
|
||||||
0x103AA7D0, 0xB64DAC64, 0x87A5B6F9, 0x21D2BD4D, 0xE47583C3, 0x42028877, 0x73EA92EA, 0xD59D995E,
|
0xBA5E5678, 0x7FF968F6, 0xD98E6342, 0xE86679DF, 0x4E11726B, 0xB8590282, 0x1E2E0936, 0x2FC613AB, 0x89B1181F,
|
||||||
0x8BB64CE5, 0x2DC14751, 0x1C295DCC, 0xBA5E5678, 0x7FF968F6, 0xD98E6342, 0xE86679DF, 0x4E11726B,
|
0x4C162691, 0xEA612D25, 0xDB8937B8, 0x7DFE3C0C, 0xEC68D02B, 0x4A1FDB9F, 0x7BF7C102, 0xDD80CAB6, 0x1827F438,
|
||||||
0xB8590282, 0x1E2E0936, 0x2FC613AB, 0x89B1181F, 0x4C162691, 0xEA612D25, 0xDB8937B8, 0x7DFE3C0C,
|
0xBE50FF8C, 0x8FB8E511, 0x29CFEEA5, 0xDF879E4C, 0x79F095F8, 0x48188F65, 0xEE6F84D1, 0x2BC8BA5F, 0x8DBFB1EB,
|
||||||
0xEC68D02B, 0x4A1FDB9F, 0x7BF7C102, 0xDD80CAB6, 0x1827F438, 0xBE50FF8C, 0x8FB8E511, 0x29CFEEA5,
|
0xBC57AB76, 0x1A20A0C2, 0x8816EAF2, 0x2E61E146, 0x1F89FBDB, 0xB9FEF06F, 0x7C59CEE1, 0xDA2EC555, 0xEBC6DFC8,
|
||||||
0xDF879E4C, 0x79F095F8, 0x48188F65, 0xEE6F84D1, 0x2BC8BA5F, 0x8DBFB1EB, 0xBC57AB76, 0x1A20A0C2,
|
0x4DB1D47C, 0xBBF9A495, 0x1D8EAF21, 0x2C66B5BC, 0x8A11BE08, 0x4FB68086, 0xE9C18B32, 0xD82991AF, 0x7E5E9A1B,
|
||||||
0x8816EAF2, 0x2E61E146, 0x1F89FBDB, 0xB9FEF06F, 0x7C59CEE1, 0xDA2EC555, 0xEBC6DFC8, 0x4DB1D47C,
|
0xEFC8763C, 0x49BF7D88, 0x78576715, 0xDE206CA1, 0x1B87522F, 0xBDF0599B, 0x8C184306, 0x2A6F48B2, 0xDC27385B,
|
||||||
0xBBF9A495, 0x1D8EAF21, 0x2C66B5BC, 0x8A11BE08, 0x4FB68086, 0xE9C18B32, 0xD82991AF, 0x7E5E9A1B,
|
0x7A5033EF, 0x4BB82972, 0xEDCF22C6, 0x28681C48, 0x8E1F17FC, 0xBFF70D61, 0x198006D5, 0x47ABD36E, 0xE1DCD8DA,
|
||||||
0xEFC8763C, 0x49BF7D88, 0x78576715, 0xDE206CA1, 0x1B87522F, 0xBDF0599B, 0x8C184306, 0x2A6F48B2,
|
0xD034C247, 0x7643C9F3, 0xB3E4F77D, 0x1593FCC9, 0x247BE654, 0x820CEDE0, 0x74449D09, 0xD23396BD, 0xE3DB8C20,
|
||||||
0xDC27385B, 0x7A5033EF, 0x4BB82972, 0xEDCF22C6, 0x28681C48, 0x8E1F17FC, 0xBFF70D61, 0x198006D5,
|
0x45AC8794, 0x800BB91A, 0x267CB2AE, 0x1794A833, 0xB1E3A387, 0x20754FA0, 0x86024414, 0xB7EA5E89, 0x119D553D,
|
||||||
0x47ABD36E, 0xE1DCD8DA, 0xD034C247, 0x7643C9F3, 0xB3E4F77D, 0x1593FCC9, 0x247BE654, 0x820CEDE0,
|
0xD43A6BB3, 0x724D6007, 0x43A57A9A, 0xE5D2712E, 0x139A01C7, 0xB5ED0A73, 0x840510EE, 0x22721B5A, 0xE7D525D4,
|
||||||
0x74449D09, 0xD23396BD, 0xE3DB8C20, 0x45AC8794, 0x800BB91A, 0x267CB2AE, 0x1794A833, 0xB1E3A387,
|
0x41A22E60, 0x704A34FD, 0xD63D3F49, 0xCC1D9F8B, 0x6A6A943F, 0x5B828EA2, 0xFDF58516, 0x3852BB98, 0x9E25B02C,
|
||||||
0x20754FA0, 0x86024414, 0xB7EA5E89, 0x119D553D, 0xD43A6BB3, 0x724D6007, 0x43A57A9A, 0xE5D2712E,
|
0xAFCDAAB1, 0x09BAA105, 0xFFF2D1EC, 0x5985DA58, 0x686DC0C5, 0xCE1ACB71, 0x0BBDF5FF, 0xADCAFE4B, 0x9C22E4D6,
|
||||||
0x139A01C7, 0xB5ED0A73, 0x840510EE, 0x22721B5A, 0xE7D525D4, 0x41A22E60, 0x704A34FD, 0xD63D3F49,
|
0x3A55EF62, 0xABC30345, 0x0DB408F1, 0x3C5C126C, 0x9A2B19D8, 0x5F8C2756, 0xF9FB2CE2, 0xC813367F, 0x6E643DCB,
|
||||||
0xCC1D9F8B, 0x6A6A943F, 0x5B828EA2, 0xFDF58516, 0x3852BB98, 0x9E25B02C, 0xAFCDAAB1, 0x09BAA105,
|
0x982C4D22, 0x3E5B4696, 0x0FB35C0B, 0xA9C457BF, 0x6C636931, 0xCA146285, 0xFBFC7818, 0x5D8B73AC, 0x03A0A617,
|
||||||
0xFFF2D1EC, 0x5985DA58, 0x686DC0C5, 0xCE1ACB71, 0x0BBDF5FF, 0xADCAFE4B, 0x9C22E4D6, 0x3A55EF62,
|
0xA5D7ADA3, 0x943FB73E, 0x3248BC8A, 0xF7EF8204, 0x519889B0, 0x6070932D, 0xC6079899, 0x304FE870, 0x9638E3C4,
|
||||||
0xABC30345, 0x0DB408F1, 0x3C5C126C, 0x9A2B19D8, 0x5F8C2756, 0xF9FB2CE2, 0xC813367F, 0x6E643DCB,
|
0xA7D0F959, 0x01A7F2ED, 0xC400CC63, 0x6277C7D7, 0x539FDD4A, 0xF5E8D6FE, 0x647E3AD9, 0xC209316D, 0xF3E12BF0,
|
||||||
0x982C4D22, 0x3E5B4696, 0x0FB35C0B, 0xA9C457BF, 0x6C636931, 0xCA146285, 0xFBFC7818, 0x5D8B73AC,
|
0x55962044, 0x90311ECA, 0x3646157E, 0x07AE0FE3, 0xA1D90457, 0x579174BE, 0xF1E67F0A, 0xC00E6597, 0x66796E23,
|
||||||
0x03A0A617, 0xA5D7ADA3, 0x943FB73E, 0x3248BC8A, 0xF7EF8204, 0x519889B0, 0x6070932D, 0xC6079899,
|
0xA3DE50AD, 0x05A95B19, 0x34414184, 0x92364A30
|
||||||
0x304FE870, 0x9638E3C4, 0xA7D0F959, 0x01A7F2ED, 0xC400CC63, 0x6277C7D7, 0x539FDD4A, 0xF5E8D6FE,
|
|
||||||
0x647E3AD9, 0xC209316D, 0xF3E12BF0, 0x55962044, 0x90311ECA, 0x3646157E, 0x07AE0FE3, 0xA1D90457,
|
|
||||||
0x579174BE, 0xF1E67F0A, 0xC00E6597, 0x66796E23, 0xA3DE50AD, 0x05A95B19, 0x34414184, 0x92364A30
|
|
||||||
},
|
},
|
||||||
new uint[]
|
new uint[]
|
||||||
{
|
{
|
||||||
0x00000000, 0xCCAA009E, 0x4225077D, 0x8E8F07E3, 0x844A0EFA, 0x48E00E64, 0xC66F0987, 0x0AC50919,
|
0x00000000, 0xCCAA009E, 0x4225077D, 0x8E8F07E3, 0x844A0EFA, 0x48E00E64, 0xC66F0987, 0x0AC50919, 0xD3E51BB5,
|
||||||
0xD3E51BB5, 0x1F4F1B2B, 0x91C01CC8, 0x5D6A1C56, 0x57AF154F, 0x9B0515D1, 0x158A1232, 0xD92012AC,
|
0x1F4F1B2B, 0x91C01CC8, 0x5D6A1C56, 0x57AF154F, 0x9B0515D1, 0x158A1232, 0xD92012AC, 0x7CBB312B, 0xB01131B5,
|
||||||
0x7CBB312B, 0xB01131B5, 0x3E9E3656, 0xF23436C8, 0xF8F13FD1, 0x345B3F4F, 0xBAD438AC, 0x767E3832,
|
0x3E9E3656, 0xF23436C8, 0xF8F13FD1, 0x345B3F4F, 0xBAD438AC, 0x767E3832, 0xAF5E2A9E, 0x63F42A00, 0xED7B2DE3,
|
||||||
0xAF5E2A9E, 0x63F42A00, 0xED7B2DE3, 0x21D12D7D, 0x2B142464, 0xE7BE24FA, 0x69312319, 0xA59B2387,
|
0x21D12D7D, 0x2B142464, 0xE7BE24FA, 0x69312319, 0xA59B2387, 0xF9766256, 0x35DC62C8, 0xBB53652B, 0x77F965B5,
|
||||||
0xF9766256, 0x35DC62C8, 0xBB53652B, 0x77F965B5, 0x7D3C6CAC, 0xB1966C32, 0x3F196BD1, 0xF3B36B4F,
|
0x7D3C6CAC, 0xB1966C32, 0x3F196BD1, 0xF3B36B4F, 0x2A9379E3, 0xE639797D, 0x68B67E9E, 0xA41C7E00, 0xAED97719,
|
||||||
0x2A9379E3, 0xE639797D, 0x68B67E9E, 0xA41C7E00, 0xAED97719, 0x62737787, 0xECFC7064, 0x205670FA,
|
0x62737787, 0xECFC7064, 0x205670FA, 0x85CD537D, 0x496753E3, 0xC7E85400, 0x0B42549E, 0x01875D87, 0xCD2D5D19,
|
||||||
0x85CD537D, 0x496753E3, 0xC7E85400, 0x0B42549E, 0x01875D87, 0xCD2D5D19, 0x43A25AFA, 0x8F085A64,
|
0x43A25AFA, 0x8F085A64, 0x562848C8, 0x9A824856, 0x140D4FB5, 0xD8A74F2B, 0xD2624632, 0x1EC846AC, 0x9047414F,
|
||||||
0x562848C8, 0x9A824856, 0x140D4FB5, 0xD8A74F2B, 0xD2624632, 0x1EC846AC, 0x9047414F, 0x5CED41D1,
|
0x5CED41D1, 0x299DC2ED, 0xE537C273, 0x6BB8C590, 0xA712C50E, 0xADD7CC17, 0x617DCC89, 0xEFF2CB6A, 0x2358CBF4,
|
||||||
0x299DC2ED, 0xE537C273, 0x6BB8C590, 0xA712C50E, 0xADD7CC17, 0x617DCC89, 0xEFF2CB6A, 0x2358CBF4,
|
0xFA78D958, 0x36D2D9C6, 0xB85DDE25, 0x74F7DEBB, 0x7E32D7A2, 0xB298D73C, 0x3C17D0DF, 0xF0BDD041, 0x5526F3C6,
|
||||||
0xFA78D958, 0x36D2D9C6, 0xB85DDE25, 0x74F7DEBB, 0x7E32D7A2, 0xB298D73C, 0x3C17D0DF, 0xF0BDD041,
|
0x998CF358, 0x1703F4BB, 0xDBA9F425, 0xD16CFD3C, 0x1DC6FDA2, 0x9349FA41, 0x5FE3FADF, 0x86C3E873, 0x4A69E8ED,
|
||||||
0x5526F3C6, 0x998CF358, 0x1703F4BB, 0xDBA9F425, 0xD16CFD3C, 0x1DC6FDA2, 0x9349FA41, 0x5FE3FADF,
|
0xC4E6EF0E, 0x084CEF90, 0x0289E689, 0xCE23E617, 0x40ACE1F4, 0x8C06E16A, 0xD0EBA0BB, 0x1C41A025, 0x92CEA7C6,
|
||||||
0x86C3E873, 0x4A69E8ED, 0xC4E6EF0E, 0x084CEF90, 0x0289E689, 0xCE23E617, 0x40ACE1F4, 0x8C06E16A,
|
0x5E64A758, 0x54A1AE41, 0x980BAEDF, 0x1684A93C, 0xDA2EA9A2, 0x030EBB0E, 0xCFA4BB90, 0x412BBC73, 0x8D81BCED,
|
||||||
0xD0EBA0BB, 0x1C41A025, 0x92CEA7C6, 0x5E64A758, 0x54A1AE41, 0x980BAEDF, 0x1684A93C, 0xDA2EA9A2,
|
0x8744B5F4, 0x4BEEB56A, 0xC561B289, 0x09CBB217, 0xAC509190, 0x60FA910E, 0xEE7596ED, 0x22DF9673, 0x281A9F6A,
|
||||||
0x030EBB0E, 0xCFA4BB90, 0x412BBC73, 0x8D81BCED, 0x8744B5F4, 0x4BEEB56A, 0xC561B289, 0x09CBB217,
|
0xE4B09FF4, 0x6A3F9817, 0xA6959889, 0x7FB58A25, 0xB31F8ABB, 0x3D908D58, 0xF13A8DC6, 0xFBFF84DF, 0x37558441,
|
||||||
0xAC509190, 0x60FA910E, 0xEE7596ED, 0x22DF9673, 0x281A9F6A, 0xE4B09FF4, 0x6A3F9817, 0xA6959889,
|
0xB9DA83A2, 0x7570833C, 0x533B85DA, 0x9F918544, 0x111E82A7, 0xDDB48239, 0xD7718B20, 0x1BDB8BBE, 0x95548C5D,
|
||||||
0x7FB58A25, 0xB31F8ABB, 0x3D908D58, 0xF13A8DC6, 0xFBFF84DF, 0x37558441, 0xB9DA83A2, 0x7570833C,
|
0x59FE8CC3, 0x80DE9E6F, 0x4C749EF1, 0xC2FB9912, 0x0E51998C, 0x04949095, 0xC83E900B, 0x46B197E8, 0x8A1B9776,
|
||||||
0x533B85DA, 0x9F918544, 0x111E82A7, 0xDDB48239, 0xD7718B20, 0x1BDB8BBE, 0x95548C5D, 0x59FE8CC3,
|
0x2F80B4F1, 0xE32AB46F, 0x6DA5B38C, 0xA10FB312, 0xABCABA0B, 0x6760BA95, 0xE9EFBD76, 0x2545BDE8, 0xFC65AF44,
|
||||||
0x80DE9E6F, 0x4C749EF1, 0xC2FB9912, 0x0E51998C, 0x04949095, 0xC83E900B, 0x46B197E8, 0x8A1B9776,
|
0x30CFAFDA, 0xBE40A839, 0x72EAA8A7, 0x782FA1BE, 0xB485A120, 0x3A0AA6C3, 0xF6A0A65D, 0xAA4DE78C, 0x66E7E712,
|
||||||
0x2F80B4F1, 0xE32AB46F, 0x6DA5B38C, 0xA10FB312, 0xABCABA0B, 0x6760BA95, 0xE9EFBD76, 0x2545BDE8,
|
0xE868E0F1, 0x24C2E06F, 0x2E07E976, 0xE2ADE9E8, 0x6C22EE0B, 0xA088EE95, 0x79A8FC39, 0xB502FCA7, 0x3B8DFB44,
|
||||||
0xFC65AF44, 0x30CFAFDA, 0xBE40A839, 0x72EAA8A7, 0x782FA1BE, 0xB485A120, 0x3A0AA6C3, 0xF6A0A65D,
|
0xF727FBDA, 0xFDE2F2C3, 0x3148F25D, 0xBFC7F5BE, 0x736DF520, 0xD6F6D6A7, 0x1A5CD639, 0x94D3D1DA, 0x5879D144,
|
||||||
0xAA4DE78C, 0x66E7E712, 0xE868E0F1, 0x24C2E06F, 0x2E07E976, 0xE2ADE9E8, 0x6C22EE0B, 0xA088EE95,
|
0x52BCD85D, 0x9E16D8C3, 0x1099DF20, 0xDC33DFBE, 0x0513CD12, 0xC9B9CD8C, 0x4736CA6F, 0x8B9CCAF1, 0x8159C3E8,
|
||||||
0x79A8FC39, 0xB502FCA7, 0x3B8DFB44, 0xF727FBDA, 0xFDE2F2C3, 0x3148F25D, 0xBFC7F5BE, 0x736DF520,
|
0x4DF3C376, 0xC37CC495, 0x0FD6C40B, 0x7AA64737, 0xB60C47A9, 0x3883404A, 0xF42940D4, 0xFEEC49CD, 0x32464953,
|
||||||
0xD6F6D6A7, 0x1A5CD639, 0x94D3D1DA, 0x5879D144, 0x52BCD85D, 0x9E16D8C3, 0x1099DF20, 0xDC33DFBE,
|
0xBCC94EB0, 0x70634E2E, 0xA9435C82, 0x65E95C1C, 0xEB665BFF, 0x27CC5B61, 0x2D095278, 0xE1A352E6, 0x6F2C5505,
|
||||||
0x0513CD12, 0xC9B9CD8C, 0x4736CA6F, 0x8B9CCAF1, 0x8159C3E8, 0x4DF3C376, 0xC37CC495, 0x0FD6C40B,
|
0xA386559B, 0x061D761C, 0xCAB77682, 0x44387161, 0x889271FF, 0x825778E6, 0x4EFD7878, 0xC0727F9B, 0x0CD87F05,
|
||||||
0x7AA64737, 0xB60C47A9, 0x3883404A, 0xF42940D4, 0xFEEC49CD, 0x32464953, 0xBCC94EB0, 0x70634E2E,
|
0xD5F86DA9, 0x19526D37, 0x97DD6AD4, 0x5B776A4A, 0x51B26353, 0x9D1863CD, 0x1397642E, 0xDF3D64B0, 0x83D02561,
|
||||||
0xA9435C82, 0x65E95C1C, 0xEB665BFF, 0x27CC5B61, 0x2D095278, 0xE1A352E6, 0x6F2C5505, 0xA386559B,
|
0x4F7A25FF, 0xC1F5221C, 0x0D5F2282, 0x079A2B9B, 0xCB302B05, 0x45BF2CE6, 0x89152C78, 0x50353ED4, 0x9C9F3E4A,
|
||||||
0x061D761C, 0xCAB77682, 0x44387161, 0x889271FF, 0x825778E6, 0x4EFD7878, 0xC0727F9B, 0x0CD87F05,
|
0x121039A9, 0xDEBA3937, 0xD47F302E, 0x18D530B0, 0x965A3753, 0x5AF037CD, 0xFF6B144A, 0x33C114D4, 0xBD4E1337,
|
||||||
0xD5F86DA9, 0x19526D37, 0x97DD6AD4, 0x5B776A4A, 0x51B26353, 0x9D1863CD, 0x1397642E, 0xDF3D64B0,
|
0x71E413A9, 0x7B211AB0, 0xB78B1A2E, 0x39041DCD, 0xF5AE1D53, 0x2C8E0FFF, 0xE0240F61, 0x6EAB0882, 0xA201081C,
|
||||||
0x83D02561, 0x4F7A25FF, 0xC1F5221C, 0x0D5F2282, 0x079A2B9B, 0xCB302B05, 0x45BF2CE6, 0x89152C78,
|
0xA8C40105, 0x646E019B, 0xEAE10678, 0x264B06E6
|
||||||
0x50353ED4, 0x9C9F3E4A, 0x121039A9, 0xDEBA3937, 0xD47F302E, 0x18D530B0, 0x965A3753, 0x5AF037CD,
|
|
||||||
0xFF6B144A, 0x33C114D4, 0xBD4E1337, 0x71E413A9, 0x7B211AB0, 0xB78B1A2E, 0x39041DCD, 0xF5AE1D53,
|
|
||||||
0x2C8E0FFF, 0xE0240F61, 0x6EAB0882, 0xA201081C, 0xA8C40105, 0x646E019B, 0xEAE10678, 0x264B06E6
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -348,8 +324,7 @@ public sealed class Crc32Context : IChecksum
|
|||||||
_table = _isoCrc32Table;
|
_table = _isoCrc32Table;
|
||||||
_useIso = true;
|
_useIso = true;
|
||||||
|
|
||||||
if(!Native.IsSupported)
|
if(!Native.IsSupported) return;
|
||||||
return;
|
|
||||||
|
|
||||||
_nativeContext = crc32_init();
|
_nativeContext = crc32_init();
|
||||||
_useNative = _nativeContext != IntPtr.Zero;
|
_useNative = _nativeContext != IntPtr.Zero;
|
||||||
@@ -371,58 +346,6 @@ public sealed class Crc32Context : IChecksum
|
|||||||
_table = GenerateTable(polynomial);
|
_table = GenerateTable(polynomial);
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IChecksum Members
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Updates the hash with data.</summary>
|
|
||||||
/// <param name="data">Data buffer.</param>
|
|
||||||
/// <param name="len">Length of buffer to hash.</param>
|
|
||||||
public void Update(byte[] data, uint len) =>
|
|
||||||
Step(ref _hashInt, _table, data, len, _useIso, _useNative, _nativeContext);
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Updates the hash with data.</summary>
|
|
||||||
/// <param name="data">Data buffer.</param>
|
|
||||||
public void Update(byte[] data) => Update(data, (uint)data.Length);
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Returns a byte array of the hash value.</summary>
|
|
||||||
public byte[] Final()
|
|
||||||
{
|
|
||||||
uint crc = _hashInt ^ _finalSeed;
|
|
||||||
|
|
||||||
if(!_useNative ||
|
|
||||||
!_useIso)
|
|
||||||
return BigEndianBitConverter.GetBytes(crc);
|
|
||||||
|
|
||||||
crc32_final(_nativeContext, ref crc);
|
|
||||||
crc32_free(_nativeContext);
|
|
||||||
|
|
||||||
return BigEndianBitConverter.GetBytes(crc);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Returns a hexadecimal representation of the hash value.</summary>
|
|
||||||
public string End()
|
|
||||||
{
|
|
||||||
uint crc = _hashInt ^ _finalSeed;
|
|
||||||
|
|
||||||
var crc32Output = new StringBuilder();
|
|
||||||
|
|
||||||
if(_useNative && _useIso)
|
|
||||||
{
|
|
||||||
crc32_final(_nativeContext, ref crc);
|
|
||||||
crc32_free(_nativeContext);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(var i = 0; i < BigEndianBitConverter.GetBytes(crc).Length; i++)
|
|
||||||
crc32Output.Append(BigEndianBitConverter.GetBytes(crc)[i].ToString("x2"));
|
|
||||||
|
|
||||||
return crc32Output.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
||||||
static extern IntPtr crc32_init();
|
static extern IntPtr crc32_init();
|
||||||
|
|
||||||
@@ -439,8 +362,7 @@ public sealed class Crc32Context : IChecksum
|
|||||||
{
|
{
|
||||||
var table = new uint[8][];
|
var table = new uint[8][];
|
||||||
|
|
||||||
for(var i = 0; i < 8; i++)
|
for(var i = 0; i < 8; i++) table[i] = new uint[256];
|
||||||
table[i] = new uint[256];
|
|
||||||
|
|
||||||
for(var i = 0; i < 256; i++)
|
for(var i = 0; i < 256; i++)
|
||||||
{
|
{
|
||||||
@@ -458,8 +380,10 @@ public sealed class Crc32Context : IChecksum
|
|||||||
}
|
}
|
||||||
|
|
||||||
for(var slice = 1; slice < 8; slice++)
|
for(var slice = 1; slice < 8; slice++)
|
||||||
for(var i = 0; i < 256; i++)
|
{
|
||||||
table[slice][i] = table[slice - 1][i] >> 8 ^ table[0][table[slice - 1][i] & 0xFF];
|
for(var i = 0; i < 256; i++)
|
||||||
|
table[slice][i] = table[slice - 1][i] >> 8 ^ table[0][table[slice - 1][i] & 0xFF];
|
||||||
|
}
|
||||||
|
|
||||||
return table;
|
return table;
|
||||||
}
|
}
|
||||||
@@ -478,10 +402,7 @@ public sealed class Crc32Context : IChecksum
|
|||||||
|
|
||||||
if(useIso)
|
if(useIso)
|
||||||
{
|
{
|
||||||
if(Pclmulqdq.IsSupported &&
|
if(Pclmulqdq.IsSupported && Sse41.IsSupported && Ssse3.IsSupported && Sse2.IsSupported)
|
||||||
Sse41.IsSupported &&
|
|
||||||
Ssse3.IsSupported &&
|
|
||||||
Sse2.IsSupported)
|
|
||||||
{
|
{
|
||||||
// Only works in blocks of 16 bytes
|
// Only works in blocks of 16 bytes
|
||||||
uint blocks = len / 64;
|
uint blocks = len / 64;
|
||||||
@@ -494,8 +415,7 @@ public sealed class Crc32Context : IChecksum
|
|||||||
len -= blocks * 64;
|
len -= blocks * 64;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(len == 0)
|
if(len == 0) return;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Crc32.Arm64.IsSupported)
|
if(Crc32.Arm64.IsSupported)
|
||||||
@@ -525,8 +445,7 @@ public sealed class Crc32Context : IChecksum
|
|||||||
len -= blocks * 64;
|
len -= blocks * 64;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(len == 0)
|
if(len == 0) return;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -548,16 +467,20 @@ public sealed class Crc32Context : IChecksum
|
|||||||
var two = BitConverter.ToUInt32(data, currentPos);
|
var two = BitConverter.ToUInt32(data, currentPos);
|
||||||
currentPos += 4;
|
currentPos += 4;
|
||||||
|
|
||||||
crc = table[0][two >> 24 & 0xFF] ^ table[1][two >> 16 & 0xFF] ^ table[2][two >> 8 & 0xFF] ^
|
crc = table[0][two >> 24 & 0xFF] ^
|
||||||
table[3][two & 0xFF] ^ table[4][one >> 24 & 0xFF] ^ table[5][one >> 16 & 0xFF] ^
|
table[1][two >> 16 & 0xFF] ^
|
||||||
table[6][one >> 8 & 0xFF] ^ table[7][one & 0xFF];
|
table[2][two >> 8 & 0xFF] ^
|
||||||
|
table[3][two & 0xFF] ^
|
||||||
|
table[4][one >> 24 & 0xFF] ^
|
||||||
|
table[5][one >> 16 & 0xFF] ^
|
||||||
|
table[6][one >> 8 & 0xFF] ^
|
||||||
|
table[7][one & 0xFF];
|
||||||
}
|
}
|
||||||
|
|
||||||
len -= bytesAtOnce;
|
len -= bytesAtOnce;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(len-- != 0)
|
while(len-- != 0) crc = crc >> 8 ^ table[0][crc & 0xFF ^ data[currentPos++]];
|
||||||
crc = crc >> 8 ^ table[0][crc & 0xFF ^ data[currentPos++]];
|
|
||||||
|
|
||||||
previousCrc = crc;
|
previousCrc = crc;
|
||||||
}
|
}
|
||||||
@@ -622,8 +545,7 @@ public sealed class Crc32Context : IChecksum
|
|||||||
|
|
||||||
var crc32Output = new StringBuilder();
|
var crc32Output = new StringBuilder();
|
||||||
|
|
||||||
foreach(byte h in hash)
|
foreach(byte h in hash) crc32Output.Append(h.ToString("x2"));
|
||||||
crc32Output.Append(h.ToString("x2"));
|
|
||||||
|
|
||||||
fileStream.Close();
|
fileStream.Close();
|
||||||
|
|
||||||
@@ -673,8 +595,7 @@ public sealed class Crc32Context : IChecksum
|
|||||||
|
|
||||||
var crc32Output = new StringBuilder();
|
var crc32Output = new StringBuilder();
|
||||||
|
|
||||||
foreach(byte h in hash)
|
foreach(byte h in hash) crc32Output.Append(h.ToString("x2"));
|
||||||
crc32Output.Append(h.ToString("x2"));
|
|
||||||
|
|
||||||
return crc32Output.ToString();
|
return crc32Output.ToString();
|
||||||
}
|
}
|
||||||
@@ -683,4 +604,54 @@ public sealed class Crc32Context : IChecksum
|
|||||||
/// <param name="data">Data buffer.</param>
|
/// <param name="data">Data buffer.</param>
|
||||||
/// <param name="hash">Byte array of the hash value.</param>
|
/// <param name="hash">Byte array of the hash value.</param>
|
||||||
public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash);
|
public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash);
|
||||||
|
|
||||||
|
#region IChecksum Members
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Updates the hash with data.</summary>
|
||||||
|
/// <param name="data">Data buffer.</param>
|
||||||
|
/// <param name="len">Length of buffer to hash.</param>
|
||||||
|
public void Update(byte[] data, uint len) =>
|
||||||
|
Step(ref _hashInt, _table, data, len, _useIso, _useNative, _nativeContext);
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Updates the hash with data.</summary>
|
||||||
|
/// <param name="data">Data buffer.</param>
|
||||||
|
public void Update(byte[] data) => Update(data, (uint)data.Length);
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Returns a byte array of the hash value.</summary>
|
||||||
|
public byte[] Final()
|
||||||
|
{
|
||||||
|
uint crc = _hashInt ^ _finalSeed;
|
||||||
|
|
||||||
|
if(!_useNative || !_useIso) return BigEndianBitConverter.GetBytes(crc);
|
||||||
|
|
||||||
|
crc32_final(_nativeContext, ref crc);
|
||||||
|
crc32_free(_nativeContext);
|
||||||
|
|
||||||
|
return BigEndianBitConverter.GetBytes(crc);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Returns a hexadecimal representation of the hash value.</summary>
|
||||||
|
public string End()
|
||||||
|
{
|
||||||
|
uint crc = _hashInt ^ _finalSeed;
|
||||||
|
|
||||||
|
var crc32Output = new StringBuilder();
|
||||||
|
|
||||||
|
if(_useNative && _useIso)
|
||||||
|
{
|
||||||
|
crc32_final(_nativeContext, ref crc);
|
||||||
|
crc32_free(_nativeContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var i = 0; i < BigEndianBitConverter.GetBytes(crc).Length; i++)
|
||||||
|
crc32Output.Append(BigEndianBitConverter.GetBytes(crc)[i].ToString("x2"));
|
||||||
|
|
||||||
|
return crc32Output.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -42,14 +42,22 @@ static class Clmul
|
|||||||
{
|
{
|
||||||
uint maskPos = 16 - n;
|
uint maskPos = 16 - n;
|
||||||
|
|
||||||
var maskA = Vector128.Create(_shuffleMasks[maskPos], _shuffleMasks[maskPos + 1],
|
var maskA = Vector128.Create(_shuffleMasks[maskPos],
|
||||||
_shuffleMasks[maskPos + 2], _shuffleMasks[maskPos + 3],
|
_shuffleMasks[maskPos + 1],
|
||||||
_shuffleMasks[maskPos + 4], _shuffleMasks[maskPos + 5],
|
_shuffleMasks[maskPos + 2],
|
||||||
_shuffleMasks[maskPos + 6], _shuffleMasks[maskPos + 7],
|
_shuffleMasks[maskPos + 3],
|
||||||
_shuffleMasks[maskPos + 8], _shuffleMasks[maskPos + 9],
|
_shuffleMasks[maskPos + 4],
|
||||||
_shuffleMasks[maskPos + 10], _shuffleMasks[maskPos + 11],
|
_shuffleMasks[maskPos + 5],
|
||||||
_shuffleMasks[maskPos + 12], _shuffleMasks[maskPos + 13],
|
_shuffleMasks[maskPos + 6],
|
||||||
_shuffleMasks[maskPos + 14], _shuffleMasks[maskPos + 15]);
|
_shuffleMasks[maskPos + 7],
|
||||||
|
_shuffleMasks[maskPos + 8],
|
||||||
|
_shuffleMasks[maskPos + 9],
|
||||||
|
_shuffleMasks[maskPos + 10],
|
||||||
|
_shuffleMasks[maskPos + 11],
|
||||||
|
_shuffleMasks[maskPos + 12],
|
||||||
|
_shuffleMasks[maskPos + 13],
|
||||||
|
_shuffleMasks[maskPos + 14],
|
||||||
|
_shuffleMasks[maskPos + 15]);
|
||||||
|
|
||||||
Vector128<byte> maskB = Sse2.Xor(maskA, Sse2.CompareEqual(Vector128<byte>.Zero, Vector128<byte>.Zero));
|
Vector128<byte> maskB = Sse2.Xor(maskA, Sse2.CompareEqual(Vector128<byte>.Zero, Vector128<byte>.Zero));
|
||||||
|
|
||||||
@@ -78,13 +86,17 @@ static class Clmul
|
|||||||
ShiftRight128(initialCrc, 0, out Vector128<ulong> crc0, out Vector128<ulong> crc1);
|
ShiftRight128(initialCrc, 0, out Vector128<ulong> crc0, out Vector128<ulong> crc1);
|
||||||
|
|
||||||
Vector128<ulong> accumulator =
|
Vector128<ulong> accumulator =
|
||||||
Sse2.Xor(Fold(Sse2.Xor(crc0, Vector128.Create(BitConverter.ToUInt64(data, 0), BitConverter.ToUInt64(data, 8))), foldConstants1),
|
Sse2.Xor(Fold(Sse2.Xor(crc0,
|
||||||
|
Vector128.Create(BitConverter.ToUInt64(data, 0), BitConverter.ToUInt64(data, 8))),
|
||||||
|
foldConstants1),
|
||||||
crc1);
|
crc1);
|
||||||
|
|
||||||
while(length >= 32)
|
while(length >= 32)
|
||||||
{
|
{
|
||||||
accumulator =
|
accumulator =
|
||||||
Fold(Sse2.Xor(Vector128.Create(BitConverter.ToUInt64(data, bufPos), BitConverter.ToUInt64(data, bufPos + 8)), accumulator),
|
Fold(Sse2.Xor(Vector128.Create(BitConverter.ToUInt64(data, bufPos),
|
||||||
|
BitConverter.ToUInt64(data, bufPos + 8)),
|
||||||
|
accumulator),
|
||||||
foldConstants1);
|
foldConstants1);
|
||||||
|
|
||||||
length -= 16;
|
length -= 16;
|
||||||
@@ -101,9 +113,9 @@ static class Clmul
|
|||||||
// Final Barrett reduction
|
// Final Barrett reduction
|
||||||
Vector128<ulong> t1 = Pclmulqdq.CarrylessMultiply(r, foldConstants2, 0x00);
|
Vector128<ulong> t1 = Pclmulqdq.CarrylessMultiply(r, foldConstants2, 0x00);
|
||||||
|
|
||||||
Vector128<ulong> t2 =
|
Vector128<ulong> t2 = Sse2.Xor(Sse2.Xor(Pclmulqdq.CarrylessMultiply(t1, foldConstants2, 0x10),
|
||||||
Sse2.Xor(Sse2.Xor(Pclmulqdq.CarrylessMultiply(t1, foldConstants2, 0x10), Sse2.ShiftLeftLogical128BitLane(t1, 8)),
|
Sse2.ShiftLeftLogical128BitLane(t1, 8)),
|
||||||
r);
|
r);
|
||||||
|
|
||||||
return ~((ulong)Sse41.Extract(t2.AsUInt32(), 3) << 32 | Sse41.Extract(t2.AsUInt32(), 2));
|
return ~((ulong)Sse41.Extract(t2.AsUInt32(), 3) << 32 | Sse41.Extract(t2.AsUInt32(), 2));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -290,8 +290,7 @@ public sealed class Crc64Context : IChecksum
|
|||||||
_finalSeed = CRC64_ECMA_SEED;
|
_finalSeed = CRC64_ECMA_SEED;
|
||||||
_useEcma = true;
|
_useEcma = true;
|
||||||
|
|
||||||
if(!Native.IsSupported)
|
if(!Native.IsSupported) return;
|
||||||
return;
|
|
||||||
|
|
||||||
_nativeContext = crc64_init();
|
_nativeContext = crc64_init();
|
||||||
_useNative = _nativeContext != IntPtr.Zero;
|
_useNative = _nativeContext != IntPtr.Zero;
|
||||||
@@ -313,58 +312,6 @@ public sealed class Crc64Context : IChecksum
|
|||||||
_table = GenerateTable(polynomial);
|
_table = GenerateTable(polynomial);
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IChecksum Members
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Updates the hash with data.</summary>
|
|
||||||
/// <param name="data">Data buffer.</param>
|
|
||||||
/// <param name="len">Length of buffer to hash.</param>
|
|
||||||
public void Update(byte[] data, uint len) =>
|
|
||||||
Step(ref _hashInt, _table, data, len, _useEcma, _useNative, _nativeContext);
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Updates the hash with data.</summary>
|
|
||||||
/// <param name="data">Data buffer.</param>
|
|
||||||
public void Update(byte[] data) => Update(data, (uint)data.Length);
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Returns a byte array of the hash value.</summary>
|
|
||||||
public byte[] Final()
|
|
||||||
{
|
|
||||||
ulong crc = _hashInt ^ _finalSeed;
|
|
||||||
|
|
||||||
if(!_useNative ||
|
|
||||||
!_useEcma)
|
|
||||||
return BigEndianBitConverter.GetBytes(crc);
|
|
||||||
|
|
||||||
crc64_final(_nativeContext, ref crc);
|
|
||||||
crc64_free(_nativeContext);
|
|
||||||
|
|
||||||
return BigEndianBitConverter.GetBytes(crc);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Returns a hexadecimal representation of the hash value.</summary>
|
|
||||||
public string End()
|
|
||||||
{
|
|
||||||
ulong crc = _hashInt ^ _finalSeed;
|
|
||||||
|
|
||||||
var crc64Output = new StringBuilder();
|
|
||||||
|
|
||||||
if(_useNative && _useEcma)
|
|
||||||
{
|
|
||||||
crc64_final(_nativeContext, ref crc);
|
|
||||||
crc64_free(_nativeContext);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(var i = 0; i < BigEndianBitConverter.GetBytes(crc).Length; i++)
|
|
||||||
crc64Output.Append(BigEndianBitConverter.GetBytes(crc)[i].ToString("x2"));
|
|
||||||
|
|
||||||
return crc64Output.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
||||||
static extern IntPtr crc64_init();
|
static extern IntPtr crc64_init();
|
||||||
|
|
||||||
@@ -381,8 +328,7 @@ public sealed class Crc64Context : IChecksum
|
|||||||
{
|
{
|
||||||
var table = new ulong[8][];
|
var table = new ulong[8][];
|
||||||
|
|
||||||
for(var i = 0; i < 8; i++)
|
for(var i = 0; i < 8; i++) table[i] = new ulong[256];
|
||||||
table[i] = new ulong[256];
|
|
||||||
|
|
||||||
for(var i = 0; i < 256; i++)
|
for(var i = 0; i < 256; i++)
|
||||||
{
|
{
|
||||||
@@ -400,8 +346,10 @@ public sealed class Crc64Context : IChecksum
|
|||||||
}
|
}
|
||||||
|
|
||||||
for(var slice = 1; slice < 4; slice++)
|
for(var slice = 1; slice < 4; slice++)
|
||||||
for(var i = 0; i < 256; i++)
|
{
|
||||||
table[slice][i] = table[slice - 1][i] >> 8 ^ table[0][table[slice - 1][i] & 0xFF];
|
for(var i = 0; i < 256; i++)
|
||||||
|
table[slice][i] = table[slice - 1][i] >> 8 ^ table[0][table[slice - 1][i] & 0xFF];
|
||||||
|
}
|
||||||
|
|
||||||
return table;
|
return table;
|
||||||
}
|
}
|
||||||
@@ -418,11 +366,7 @@ public sealed class Crc64Context : IChecksum
|
|||||||
|
|
||||||
var dataOff = 0;
|
var dataOff = 0;
|
||||||
|
|
||||||
if(useEcma &&
|
if(useEcma && Pclmulqdq.IsSupported && Sse41.IsSupported && Ssse3.IsSupported && Sse2.IsSupported)
|
||||||
Pclmulqdq.IsSupported &&
|
|
||||||
Sse41.IsSupported &&
|
|
||||||
Ssse3.IsSupported &&
|
|
||||||
Sse2.IsSupported)
|
|
||||||
{
|
{
|
||||||
// Only works in blocks of 32 bytes
|
// Only works in blocks of 32 bytes
|
||||||
uint blocks = len / 32;
|
uint blocks = len / 32;
|
||||||
@@ -435,8 +379,7 @@ public sealed class Crc64Context : IChecksum
|
|||||||
len -= blocks * 32;
|
len -= blocks * 32;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(len == 0)
|
if(len == 0) return;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unroll according to Intel slicing by uint8_t
|
// Unroll according to Intel slicing by uint8_t
|
||||||
@@ -455,13 +398,15 @@ public sealed class Crc64Context : IChecksum
|
|||||||
var tmp = (uint)(crc ^ BitConverter.ToUInt32(data, dataOff));
|
var tmp = (uint)(crc ^ BitConverter.ToUInt32(data, dataOff));
|
||||||
dataOff += 4;
|
dataOff += 4;
|
||||||
|
|
||||||
crc = table[3][tmp & 0xFF] ^ table[2][tmp >> 8 & 0xFF] ^ crc >> 32 ^ table[1][tmp >> 16 & 0xFF] ^
|
crc = table[3][tmp & 0xFF] ^
|
||||||
|
table[2][tmp >> 8 & 0xFF] ^
|
||||||
|
crc >> 32 ^
|
||||||
|
table[1][tmp >> 16 & 0xFF] ^
|
||||||
table[0][tmp >> 24];
|
table[0][tmp >> 24];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while(len-- != 0)
|
while(len-- != 0) crc = table[0][data[dataOff++] ^ crc & 0xFF] ^ crc >> 8;
|
||||||
crc = table[0][data[dataOff++] ^ crc & 0xFF] ^ crc >> 8;
|
|
||||||
|
|
||||||
previousCrc = crc;
|
previousCrc = crc;
|
||||||
}
|
}
|
||||||
@@ -526,8 +471,7 @@ public sealed class Crc64Context : IChecksum
|
|||||||
|
|
||||||
var crc64Output = new StringBuilder();
|
var crc64Output = new StringBuilder();
|
||||||
|
|
||||||
foreach(byte h in hash)
|
foreach(byte h in hash) crc64Output.Append(h.ToString("x2"));
|
||||||
crc64Output.Append(h.ToString("x2"));
|
|
||||||
|
|
||||||
fileStream.Close();
|
fileStream.Close();
|
||||||
|
|
||||||
@@ -577,8 +521,7 @@ public sealed class Crc64Context : IChecksum
|
|||||||
|
|
||||||
var crc64Output = new StringBuilder();
|
var crc64Output = new StringBuilder();
|
||||||
|
|
||||||
foreach(byte h in hash)
|
foreach(byte h in hash) crc64Output.Append(h.ToString("x2"));
|
||||||
crc64Output.Append(h.ToString("x2"));
|
|
||||||
|
|
||||||
return crc64Output.ToString();
|
return crc64Output.ToString();
|
||||||
}
|
}
|
||||||
@@ -587,4 +530,54 @@ public sealed class Crc64Context : IChecksum
|
|||||||
/// <param name="data">Data buffer.</param>
|
/// <param name="data">Data buffer.</param>
|
||||||
/// <param name="hash">Byte array of the hash value.</param>
|
/// <param name="hash">Byte array of the hash value.</param>
|
||||||
public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash);
|
public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash);
|
||||||
|
|
||||||
|
#region IChecksum Members
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Updates the hash with data.</summary>
|
||||||
|
/// <param name="data">Data buffer.</param>
|
||||||
|
/// <param name="len">Length of buffer to hash.</param>
|
||||||
|
public void Update(byte[] data, uint len) =>
|
||||||
|
Step(ref _hashInt, _table, data, len, _useEcma, _useNative, _nativeContext);
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Updates the hash with data.</summary>
|
||||||
|
/// <param name="data">Data buffer.</param>
|
||||||
|
public void Update(byte[] data) => Update(data, (uint)data.Length);
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Returns a byte array of the hash value.</summary>
|
||||||
|
public byte[] Final()
|
||||||
|
{
|
||||||
|
ulong crc = _hashInt ^ _finalSeed;
|
||||||
|
|
||||||
|
if(!_useNative || !_useEcma) return BigEndianBitConverter.GetBytes(crc);
|
||||||
|
|
||||||
|
crc64_final(_nativeContext, ref crc);
|
||||||
|
crc64_free(_nativeContext);
|
||||||
|
|
||||||
|
return BigEndianBitConverter.GetBytes(crc);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Returns a hexadecimal representation of the hash value.</summary>
|
||||||
|
public string End()
|
||||||
|
{
|
||||||
|
ulong crc = _hashInt ^ _finalSeed;
|
||||||
|
|
||||||
|
var crc64Output = new StringBuilder();
|
||||||
|
|
||||||
|
if(_useNative && _useEcma)
|
||||||
|
{
|
||||||
|
crc64_final(_nativeContext, ref crc);
|
||||||
|
crc64_free(_nativeContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var i = 0; i < BigEndianBitConverter.GetBytes(crc).Length; i++)
|
||||||
|
crc64Output.Append(BigEndianBitConverter.GetBytes(crc)[i].ToString("x2"));
|
||||||
|
|
||||||
|
return crc64Output.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -73,8 +73,7 @@ static class neon
|
|||||||
{
|
{
|
||||||
uint n = Fletcher32Context.NMAX / BLOCK_SIZE; /* The NMAX constraint. */
|
uint n = Fletcher32Context.NMAX / BLOCK_SIZE; /* The NMAX constraint. */
|
||||||
|
|
||||||
if(n > blocks)
|
if(n > blocks) n = blocks;
|
||||||
n = blocks;
|
|
||||||
|
|
||||||
blocks -= n;
|
blocks -= n;
|
||||||
/*
|
/*
|
||||||
@@ -93,21 +92,41 @@ static class neon
|
|||||||
/*
|
/*
|
||||||
* Load 32 input bytes.
|
* Load 32 input bytes.
|
||||||
*/
|
*/
|
||||||
var bytes1 = Vector128.Create(buf[bufPos], buf[bufPos + 1], buf[bufPos + 2],
|
var bytes1 = Vector128.Create(buf[bufPos],
|
||||||
buf[bufPos + 3], buf[bufPos + 4], buf[bufPos + 5],
|
buf[bufPos + 1],
|
||||||
buf[bufPos + 6], buf[bufPos + 7], buf[bufPos + 8],
|
buf[bufPos + 2],
|
||||||
buf[bufPos + 9], buf[bufPos + 10], buf[bufPos + 11],
|
buf[bufPos + 3],
|
||||||
buf[bufPos + 12], buf[bufPos + 13], buf[bufPos + 14],
|
buf[bufPos + 4],
|
||||||
buf[bufPos + 15]);
|
buf[bufPos + 5],
|
||||||
|
buf[bufPos + 6],
|
||||||
|
buf[bufPos + 7],
|
||||||
|
buf[bufPos + 8],
|
||||||
|
buf[bufPos + 9],
|
||||||
|
buf[bufPos + 10],
|
||||||
|
buf[bufPos + 11],
|
||||||
|
buf[bufPos + 12],
|
||||||
|
buf[bufPos + 13],
|
||||||
|
buf[bufPos + 14],
|
||||||
|
buf[bufPos + 15]);
|
||||||
|
|
||||||
bufPos += 16;
|
bufPos += 16;
|
||||||
|
|
||||||
var bytes2 = Vector128.Create(buf[bufPos], buf[bufPos + 1], buf[bufPos + 2],
|
var bytes2 = Vector128.Create(buf[bufPos],
|
||||||
buf[bufPos + 3], buf[bufPos + 4], buf[bufPos + 5],
|
buf[bufPos + 1],
|
||||||
buf[bufPos + 6], buf[bufPos + 7], buf[bufPos + 8],
|
buf[bufPos + 2],
|
||||||
buf[bufPos + 9], buf[bufPos + 10], buf[bufPos + 11],
|
buf[bufPos + 3],
|
||||||
buf[bufPos + 12], buf[bufPos + 13], buf[bufPos + 14],
|
buf[bufPos + 4],
|
||||||
buf[bufPos + 15]);
|
buf[bufPos + 5],
|
||||||
|
buf[bufPos + 6],
|
||||||
|
buf[bufPos + 7],
|
||||||
|
buf[bufPos + 8],
|
||||||
|
buf[bufPos + 9],
|
||||||
|
buf[bufPos + 10],
|
||||||
|
buf[bufPos + 11],
|
||||||
|
buf[bufPos + 12],
|
||||||
|
buf[bufPos + 13],
|
||||||
|
buf[bufPos + 14],
|
||||||
|
buf[bufPos + 15]);
|
||||||
|
|
||||||
bufPos += 16;
|
bufPos += 16;
|
||||||
/*
|
/*
|
||||||
@@ -118,11 +137,11 @@ static class neon
|
|||||||
/*
|
/*
|
||||||
* Horizontally add the bytes for s1.
|
* Horizontally add the bytes for s1.
|
||||||
*/
|
*/
|
||||||
v_s1 =
|
v_s1 = AdvSimd.AddPairwiseWideningAndAdd(v_s1,
|
||||||
AdvSimd.AddPairwiseWideningAndAdd(v_s1,
|
AdvSimd
|
||||||
AdvSimd.
|
.AddPairwiseWideningAndAdd(AdvSimd
|
||||||
AddPairwiseWideningAndAdd(AdvSimd.AddPairwiseWidening(bytes1),
|
.AddPairwiseWidening(bytes1),
|
||||||
bytes2));
|
bytes2));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Vertically add the bytes for s2.
|
* Vertically add the bytes for s2.
|
||||||
@@ -138,28 +157,36 @@ static class neon
|
|||||||
/*
|
/*
|
||||||
* Multiply-add bytes by [ 32, 31, 30, ... ] for s2.
|
* Multiply-add bytes by [ 32, 31, 30, ... ] for s2.
|
||||||
*/
|
*/
|
||||||
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2, v_column_sum_1.GetLower(),
|
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2,
|
||||||
|
v_column_sum_1.GetLower(),
|
||||||
Vector64.Create((ushort)32, 31, 30, 29));
|
Vector64.Create((ushort)32, 31, 30, 29));
|
||||||
|
|
||||||
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2, v_column_sum_1.GetUpper(),
|
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2,
|
||||||
|
v_column_sum_1.GetUpper(),
|
||||||
Vector64.Create((ushort)28, 27, 26, 25));
|
Vector64.Create((ushort)28, 27, 26, 25));
|
||||||
|
|
||||||
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2, v_column_sum_2.GetLower(),
|
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2,
|
||||||
|
v_column_sum_2.GetLower(),
|
||||||
Vector64.Create((ushort)24, 23, 22, 21));
|
Vector64.Create((ushort)24, 23, 22, 21));
|
||||||
|
|
||||||
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2, v_column_sum_2.GetUpper(),
|
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2,
|
||||||
|
v_column_sum_2.GetUpper(),
|
||||||
Vector64.Create((ushort)20, 19, 18, 17));
|
Vector64.Create((ushort)20, 19, 18, 17));
|
||||||
|
|
||||||
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2, v_column_sum_3.GetLower(),
|
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2,
|
||||||
|
v_column_sum_3.GetLower(),
|
||||||
Vector64.Create((ushort)16, 15, 14, 13));
|
Vector64.Create((ushort)16, 15, 14, 13));
|
||||||
|
|
||||||
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2, v_column_sum_3.GetUpper(),
|
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2,
|
||||||
|
v_column_sum_3.GetUpper(),
|
||||||
Vector64.Create((ushort)12, 11, 10, 9));
|
Vector64.Create((ushort)12, 11, 10, 9));
|
||||||
|
|
||||||
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2, v_column_sum_4.GetLower(),
|
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2,
|
||||||
|
v_column_sum_4.GetLower(),
|
||||||
Vector64.Create((ushort)8, 7, 6, 5));
|
Vector64.Create((ushort)8, 7, 6, 5));
|
||||||
|
|
||||||
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2, v_column_sum_4.GetUpper(),
|
v_s2 = AdvSimd.MultiplyWideningLowerAndAdd(v_s2,
|
||||||
|
v_column_sum_4.GetUpper(),
|
||||||
Vector64.Create((ushort)4, 3, 2, 1));
|
Vector64.Create((ushort)4, 3, 2, 1));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -203,11 +230,9 @@ static class neon
|
|||||||
len -= 16;
|
len -= 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(len-- != 0)
|
while(len-- != 0) s2 += s1 += buf[bufPos++];
|
||||||
s2 += s1 += buf[bufPos++];
|
|
||||||
|
|
||||||
if(s1 >= Fletcher32Context.FLETCHER_MODULE)
|
if(s1 >= Fletcher32Context.FLETCHER_MODULE) s1 -= Fletcher32Context.FLETCHER_MODULE;
|
||||||
s1 -= Fletcher32Context.FLETCHER_MODULE;
|
|
||||||
|
|
||||||
s2 %= Fletcher32Context.FLETCHER_MODULE;
|
s2 %= Fletcher32Context.FLETCHER_MODULE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,13 +70,12 @@ static class ssse3
|
|||||||
{
|
{
|
||||||
uint n = Fletcher32Context.NMAX / BLOCK_SIZE; /* The NMAX constraint. */
|
uint n = Fletcher32Context.NMAX / BLOCK_SIZE; /* The NMAX constraint. */
|
||||||
|
|
||||||
if(n > blocks)
|
if(n > blocks) n = blocks;
|
||||||
n = blocks;
|
|
||||||
|
|
||||||
blocks -= n;
|
blocks -= n;
|
||||||
|
|
||||||
Vector128<byte> tap1 = Vector128.Create(32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17).
|
Vector128<byte> tap1 = Vector128.Create(32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17)
|
||||||
AsByte();
|
.AsByte();
|
||||||
|
|
||||||
Vector128<byte> tap2 = Vector128.Create(16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1).AsByte();
|
Vector128<byte> tap2 = Vector128.Create(16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1).AsByte();
|
||||||
Vector128<byte> zero = Vector128.Create(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0).AsByte();
|
Vector128<byte> zero = Vector128.Create(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0).AsByte();
|
||||||
@@ -167,11 +166,9 @@ static class ssse3
|
|||||||
len -= 16;
|
len -= 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(len-- != 0)
|
while(len-- != 0) s2 += s1 += buf[bufPos++];
|
||||||
s2 += s1 += buf[bufPos++];
|
|
||||||
|
|
||||||
if(s1 >= Fletcher32Context.FLETCHER_MODULE)
|
if(s1 >= Fletcher32Context.FLETCHER_MODULE) s1 -= Fletcher32Context.FLETCHER_MODULE;
|
||||||
s1 -= Fletcher32Context.FLETCHER_MODULE;
|
|
||||||
|
|
||||||
s2 %= Fletcher32Context.FLETCHER_MODULE;
|
s2 %= Fletcher32Context.FLETCHER_MODULE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,63 +59,12 @@ public sealed class Fletcher32Context : IChecksum
|
|||||||
_sum1 = 0xFFFF;
|
_sum1 = 0xFFFF;
|
||||||
_sum2 = 0xFFFF;
|
_sum2 = 0xFFFF;
|
||||||
|
|
||||||
if(!Native.IsSupported)
|
if(!Native.IsSupported) return;
|
||||||
return;
|
|
||||||
|
|
||||||
_nativeContext = fletcher32_init();
|
_nativeContext = fletcher32_init();
|
||||||
_useNative = _nativeContext != IntPtr.Zero;
|
_useNative = _nativeContext != IntPtr.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IChecksum Members
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Updates the hash with data.</summary>
|
|
||||||
/// <param name="data">Data buffer.</param>
|
|
||||||
/// <param name="len">Length of buffer to hash.</param>
|
|
||||||
public void Update(byte[] data, uint len) => Step(ref _sum1, ref _sum2, data, len, _useNative, _nativeContext);
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Updates the hash with data.</summary>
|
|
||||||
/// <param name="data">Data buffer.</param>
|
|
||||||
public void Update(byte[] data) => Update(data, (uint)data.Length);
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Returns a byte array of the hash value.</summary>
|
|
||||||
public byte[] Final()
|
|
||||||
{
|
|
||||||
var finalSum = (uint)(_sum2 << 16 | _sum1);
|
|
||||||
|
|
||||||
if(!_useNative)
|
|
||||||
return BigEndianBitConverter.GetBytes(finalSum);
|
|
||||||
|
|
||||||
fletcher32_final(_nativeContext, ref finalSum);
|
|
||||||
fletcher32_free(_nativeContext);
|
|
||||||
|
|
||||||
return BigEndianBitConverter.GetBytes(finalSum);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Returns a hexadecimal representation of the hash value.</summary>
|
|
||||||
public string End()
|
|
||||||
{
|
|
||||||
var finalSum = (uint)(_sum2 << 16 | _sum1);
|
|
||||||
|
|
||||||
if(_useNative)
|
|
||||||
{
|
|
||||||
fletcher32_final(_nativeContext, ref finalSum);
|
|
||||||
fletcher32_free(_nativeContext);
|
|
||||||
}
|
|
||||||
|
|
||||||
var fletcherOutput = new StringBuilder();
|
|
||||||
|
|
||||||
for(var i = 0; i < BigEndianBitConverter.GetBytes(finalSum).Length; i++)
|
|
||||||
fletcherOutput.Append(BigEndianBitConverter.GetBytes(finalSum)[i].ToString("x2"));
|
|
||||||
|
|
||||||
return fletcherOutput.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
||||||
static extern IntPtr fletcher32_init();
|
static extern IntPtr fletcher32_init();
|
||||||
|
|
||||||
@@ -162,13 +111,11 @@ public sealed class Fletcher32Context : IChecksum
|
|||||||
{
|
{
|
||||||
sum1 += data[dataOff];
|
sum1 += data[dataOff];
|
||||||
|
|
||||||
if(sum1 >= FLETCHER_MODULE)
|
if(sum1 >= FLETCHER_MODULE) sum1 -= FLETCHER_MODULE;
|
||||||
sum1 -= FLETCHER_MODULE;
|
|
||||||
|
|
||||||
sum2 += sum1;
|
sum2 += sum1;
|
||||||
|
|
||||||
if(sum2 >= FLETCHER_MODULE)
|
if(sum2 >= FLETCHER_MODULE) sum2 -= FLETCHER_MODULE;
|
||||||
sum2 -= FLETCHER_MODULE;
|
|
||||||
|
|
||||||
previousSum1 = (ushort)(sum1 & 0xFFFF);
|
previousSum1 = (ushort)(sum1 & 0xFFFF);
|
||||||
previousSum2 = (ushort)(sum2 & 0xFFFF);
|
previousSum2 = (ushort)(sum2 & 0xFFFF);
|
||||||
@@ -185,8 +132,7 @@ public sealed class Fletcher32Context : IChecksum
|
|||||||
sum2 += sum1;
|
sum2 += sum1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(sum1 >= FLETCHER_MODULE)
|
if(sum1 >= FLETCHER_MODULE) sum1 -= FLETCHER_MODULE;
|
||||||
sum1 -= FLETCHER_MODULE;
|
|
||||||
|
|
||||||
sum2 %= FLETCHER_MODULE; /* only added so many FLETCHER_MODULE's */
|
sum2 %= FLETCHER_MODULE; /* only added so many FLETCHER_MODULE's */
|
||||||
previousSum1 = (ushort)(sum1 & 0xFFFF);
|
previousSum1 = (ushort)(sum1 & 0xFFFF);
|
||||||
@@ -322,8 +268,7 @@ public sealed class Fletcher32Context : IChecksum
|
|||||||
{
|
{
|
||||||
nativeContext = fletcher32_init();
|
nativeContext = fletcher32_init();
|
||||||
|
|
||||||
if(nativeContext == IntPtr.Zero)
|
if(nativeContext == IntPtr.Zero) useNative = false;
|
||||||
useNative = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var fileStream = new FileStream(filename, FileMode.Open);
|
var fileStream = new FileStream(filename, FileMode.Open);
|
||||||
@@ -353,8 +298,7 @@ public sealed class Fletcher32Context : IChecksum
|
|||||||
|
|
||||||
var fletcherOutput = new StringBuilder();
|
var fletcherOutput = new StringBuilder();
|
||||||
|
|
||||||
foreach(byte h in hash)
|
foreach(byte h in hash) fletcherOutput.Append(h.ToString("x2"));
|
||||||
fletcherOutput.Append(h.ToString("x2"));
|
|
||||||
|
|
||||||
fileStream.Close();
|
fileStream.Close();
|
||||||
|
|
||||||
@@ -374,8 +318,7 @@ public sealed class Fletcher32Context : IChecksum
|
|||||||
{
|
{
|
||||||
nativeContext = fletcher32_init();
|
nativeContext = fletcher32_init();
|
||||||
|
|
||||||
if(nativeContext == IntPtr.Zero)
|
if(nativeContext == IntPtr.Zero) useNative = false;
|
||||||
useNative = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ushort localSum1 = 0xFFFF;
|
ushort localSum1 = 0xFFFF;
|
||||||
@@ -395,8 +338,7 @@ public sealed class Fletcher32Context : IChecksum
|
|||||||
|
|
||||||
var adlerOutput = new StringBuilder();
|
var adlerOutput = new StringBuilder();
|
||||||
|
|
||||||
foreach(byte h in hash)
|
foreach(byte h in hash) adlerOutput.Append(h.ToString("x2"));
|
||||||
adlerOutput.Append(h.ToString("x2"));
|
|
||||||
|
|
||||||
return adlerOutput.ToString();
|
return adlerOutput.ToString();
|
||||||
}
|
}
|
||||||
@@ -405,6 +347,55 @@ public sealed class Fletcher32Context : IChecksum
|
|||||||
/// <param name="data">Data buffer.</param>
|
/// <param name="data">Data buffer.</param>
|
||||||
/// <param name="hash">Byte array of the hash value.</param>
|
/// <param name="hash">Byte array of the hash value.</param>
|
||||||
public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash);
|
public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash);
|
||||||
|
|
||||||
|
#region IChecksum Members
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Updates the hash with data.</summary>
|
||||||
|
/// <param name="data">Data buffer.</param>
|
||||||
|
/// <param name="len">Length of buffer to hash.</param>
|
||||||
|
public void Update(byte[] data, uint len) => Step(ref _sum1, ref _sum2, data, len, _useNative, _nativeContext);
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Updates the hash with data.</summary>
|
||||||
|
/// <param name="data">Data buffer.</param>
|
||||||
|
public void Update(byte[] data) => Update(data, (uint)data.Length);
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Returns a byte array of the hash value.</summary>
|
||||||
|
public byte[] Final()
|
||||||
|
{
|
||||||
|
var finalSum = (uint)(_sum2 << 16 | _sum1);
|
||||||
|
|
||||||
|
if(!_useNative) return BigEndianBitConverter.GetBytes(finalSum);
|
||||||
|
|
||||||
|
fletcher32_final(_nativeContext, ref finalSum);
|
||||||
|
fletcher32_free(_nativeContext);
|
||||||
|
|
||||||
|
return BigEndianBitConverter.GetBytes(finalSum);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Returns a hexadecimal representation of the hash value.</summary>
|
||||||
|
public string End()
|
||||||
|
{
|
||||||
|
var finalSum = (uint)(_sum2 << 16 | _sum1);
|
||||||
|
|
||||||
|
if(_useNative)
|
||||||
|
{
|
||||||
|
fletcher32_final(_nativeContext, ref finalSum);
|
||||||
|
fletcher32_free(_nativeContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
var fletcherOutput = new StringBuilder();
|
||||||
|
|
||||||
|
for(var i = 0; i < BigEndianBitConverter.GetBytes(finalSum).Length; i++)
|
||||||
|
fletcherOutput.Append(BigEndianBitConverter.GetBytes(finalSum)[i].ToString("x2"));
|
||||||
|
|
||||||
|
return fletcherOutput.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
@@ -424,63 +415,12 @@ public sealed class Fletcher16Context : IChecksum
|
|||||||
_sum1 = 0xFF;
|
_sum1 = 0xFF;
|
||||||
_sum2 = 0xFF;
|
_sum2 = 0xFF;
|
||||||
|
|
||||||
if(!Native.IsSupported)
|
if(!Native.IsSupported) return;
|
||||||
return;
|
|
||||||
|
|
||||||
_nativeContext = fletcher16_init();
|
_nativeContext = fletcher16_init();
|
||||||
_useNative = _nativeContext != IntPtr.Zero;
|
_useNative = _nativeContext != IntPtr.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IChecksum Members
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Updates the hash with data.</summary>
|
|
||||||
/// <param name="data">Data buffer.</param>
|
|
||||||
/// <param name="len">Length of buffer to hash.</param>
|
|
||||||
public void Update(byte[] data, uint len) => Step(ref _sum1, ref _sum2, data, len, _useNative, _nativeContext);
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Updates the hash with data.</summary>
|
|
||||||
/// <param name="data">Data buffer.</param>
|
|
||||||
public void Update(byte[] data) => Update(data, (uint)data.Length);
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Returns a byte array of the hash value.</summary>
|
|
||||||
public byte[] Final()
|
|
||||||
{
|
|
||||||
var finalSum = (ushort)(_sum2 << 8 | _sum1);
|
|
||||||
|
|
||||||
if(!_useNative)
|
|
||||||
return BigEndianBitConverter.GetBytes(finalSum);
|
|
||||||
|
|
||||||
fletcher16_final(_nativeContext, ref finalSum);
|
|
||||||
fletcher16_free(_nativeContext);
|
|
||||||
|
|
||||||
return BigEndianBitConverter.GetBytes(finalSum);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Returns a hexadecimal representation of the hash value.</summary>
|
|
||||||
public string End()
|
|
||||||
{
|
|
||||||
var finalSum = (ushort)(_sum2 << 8 | _sum1);
|
|
||||||
|
|
||||||
if(_useNative)
|
|
||||||
{
|
|
||||||
fletcher16_final(_nativeContext, ref finalSum);
|
|
||||||
fletcher16_free(_nativeContext);
|
|
||||||
}
|
|
||||||
|
|
||||||
var fletcherOutput = new StringBuilder();
|
|
||||||
|
|
||||||
for(var i = 0; i < BigEndianBitConverter.GetBytes(finalSum).Length; i++)
|
|
||||||
fletcherOutput.Append(BigEndianBitConverter.GetBytes(finalSum)[i].ToString("x2"));
|
|
||||||
|
|
||||||
return fletcherOutput.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
[DllImport("libAaru.Checksums.Native", SetLastError = true)]
|
||||||
static extern IntPtr fletcher16_init();
|
static extern IntPtr fletcher16_init();
|
||||||
|
|
||||||
@@ -513,13 +453,11 @@ public sealed class Fletcher16Context : IChecksum
|
|||||||
{
|
{
|
||||||
sum1 += data[dataOff];
|
sum1 += data[dataOff];
|
||||||
|
|
||||||
if(sum1 >= FLETCHER_MODULE)
|
if(sum1 >= FLETCHER_MODULE) sum1 -= FLETCHER_MODULE;
|
||||||
sum1 -= FLETCHER_MODULE;
|
|
||||||
|
|
||||||
sum2 += sum1;
|
sum2 += sum1;
|
||||||
|
|
||||||
if(sum2 >= FLETCHER_MODULE)
|
if(sum2 >= FLETCHER_MODULE) sum2 -= FLETCHER_MODULE;
|
||||||
sum2 -= FLETCHER_MODULE;
|
|
||||||
|
|
||||||
previousSum1 = (byte)(sum1 & 0xFF);
|
previousSum1 = (byte)(sum1 & 0xFF);
|
||||||
previousSum2 = (byte)(sum2 & 0xFF);
|
previousSum2 = (byte)(sum2 & 0xFF);
|
||||||
@@ -536,8 +474,7 @@ public sealed class Fletcher16Context : IChecksum
|
|||||||
sum2 += sum1;
|
sum2 += sum1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(sum1 >= FLETCHER_MODULE)
|
if(sum1 >= FLETCHER_MODULE) sum1 -= FLETCHER_MODULE;
|
||||||
sum1 -= FLETCHER_MODULE;
|
|
||||||
|
|
||||||
sum2 %= FLETCHER_MODULE; /* only added so many FLETCHER_MODULE's */
|
sum2 %= FLETCHER_MODULE; /* only added so many FLETCHER_MODULE's */
|
||||||
previousSum1 = (byte)(sum1 & 0xFF);
|
previousSum1 = (byte)(sum1 & 0xFF);
|
||||||
@@ -653,8 +590,7 @@ public sealed class Fletcher16Context : IChecksum
|
|||||||
{
|
{
|
||||||
nativeContext = fletcher16_init();
|
nativeContext = fletcher16_init();
|
||||||
|
|
||||||
if(nativeContext == IntPtr.Zero)
|
if(nativeContext == IntPtr.Zero) useNative = false;
|
||||||
useNative = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var fileStream = new FileStream(filename, FileMode.Open);
|
var fileStream = new FileStream(filename, FileMode.Open);
|
||||||
@@ -684,8 +620,7 @@ public sealed class Fletcher16Context : IChecksum
|
|||||||
|
|
||||||
var fletcherOutput = new StringBuilder();
|
var fletcherOutput = new StringBuilder();
|
||||||
|
|
||||||
foreach(byte h in hash)
|
foreach(byte h in hash) fletcherOutput.Append(h.ToString("x2"));
|
||||||
fletcherOutput.Append(h.ToString("x2"));
|
|
||||||
|
|
||||||
fileStream.Close();
|
fileStream.Close();
|
||||||
|
|
||||||
@@ -705,8 +640,7 @@ public sealed class Fletcher16Context : IChecksum
|
|||||||
{
|
{
|
||||||
nativeContext = fletcher16_init();
|
nativeContext = fletcher16_init();
|
||||||
|
|
||||||
if(nativeContext == IntPtr.Zero)
|
if(nativeContext == IntPtr.Zero) useNative = false;
|
||||||
useNative = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
byte localSum1 = 0xFF;
|
byte localSum1 = 0xFF;
|
||||||
@@ -726,8 +660,7 @@ public sealed class Fletcher16Context : IChecksum
|
|||||||
|
|
||||||
var adlerOutput = new StringBuilder();
|
var adlerOutput = new StringBuilder();
|
||||||
|
|
||||||
foreach(byte h in hash)
|
foreach(byte h in hash) adlerOutput.Append(h.ToString("x2"));
|
||||||
adlerOutput.Append(h.ToString("x2"));
|
|
||||||
|
|
||||||
return adlerOutput.ToString();
|
return adlerOutput.ToString();
|
||||||
}
|
}
|
||||||
@@ -736,4 +669,53 @@ public sealed class Fletcher16Context : IChecksum
|
|||||||
/// <param name="data">Data buffer.</param>
|
/// <param name="data">Data buffer.</param>
|
||||||
/// <param name="hash">Byte array of the hash value.</param>
|
/// <param name="hash">Byte array of the hash value.</param>
|
||||||
public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash);
|
public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash);
|
||||||
|
|
||||||
|
#region IChecksum Members
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Updates the hash with data.</summary>
|
||||||
|
/// <param name="data">Data buffer.</param>
|
||||||
|
/// <param name="len">Length of buffer to hash.</param>
|
||||||
|
public void Update(byte[] data, uint len) => Step(ref _sum1, ref _sum2, data, len, _useNative, _nativeContext);
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Updates the hash with data.</summary>
|
||||||
|
/// <param name="data">Data buffer.</param>
|
||||||
|
public void Update(byte[] data) => Update(data, (uint)data.Length);
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Returns a byte array of the hash value.</summary>
|
||||||
|
public byte[] Final()
|
||||||
|
{
|
||||||
|
var finalSum = (ushort)(_sum2 << 8 | _sum1);
|
||||||
|
|
||||||
|
if(!_useNative) return BigEndianBitConverter.GetBytes(finalSum);
|
||||||
|
|
||||||
|
fletcher16_final(_nativeContext, ref finalSum);
|
||||||
|
fletcher16_free(_nativeContext);
|
||||||
|
|
||||||
|
return BigEndianBitConverter.GetBytes(finalSum);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Returns a hexadecimal representation of the hash value.</summary>
|
||||||
|
public string End()
|
||||||
|
{
|
||||||
|
var finalSum = (ushort)(_sum2 << 8 | _sum1);
|
||||||
|
|
||||||
|
if(_useNative)
|
||||||
|
{
|
||||||
|
fletcher16_final(_nativeContext, ref finalSum);
|
||||||
|
fletcher16_free(_nativeContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
var fletcherOutput = new StringBuilder();
|
||||||
|
|
||||||
|
for(var i = 0; i < BigEndianBitConverter.GetBytes(finalSum).Length; i++)
|
||||||
|
fletcherOutput.Append(BigEndianBitConverter.GetBytes(finalSum)[i].ToString("x2"));
|
||||||
|
|
||||||
|
return fletcherOutput.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -13,11 +13,9 @@ public static class Native
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if(ForceManaged)
|
if(ForceManaged) return false;
|
||||||
return false;
|
|
||||||
|
|
||||||
if(_checked)
|
if(_checked) return _supported;
|
||||||
return _supported;
|
|
||||||
|
|
||||||
ulong version;
|
ulong version;
|
||||||
_checked = true;
|
_checked = true;
|
||||||
|
|||||||
@@ -77,8 +77,7 @@ public sealed class SpamSumContext : IChecksum
|
|||||||
Bh = new BlockhashContext[NUM_BLOCKHASHES]
|
Bh = new BlockhashContext[NUM_BLOCKHASHES]
|
||||||
};
|
};
|
||||||
|
|
||||||
for(var i = 0; i < NUM_BLOCKHASHES; i++)
|
for(var i = 0; i < NUM_BLOCKHASHES; i++) _self.Bh[i].Digest = new byte[SPAMSUM_LENGTH];
|
||||||
_self.Bh[i].Digest = new byte[SPAMSUM_LENGTH];
|
|
||||||
|
|
||||||
_self.Bhstart = 0;
|
_self.Bhstart = 0;
|
||||||
_self.Bhend = 1;
|
_self.Bhend = 1;
|
||||||
@@ -91,40 +90,6 @@ public sealed class SpamSumContext : IChecksum
|
|||||||
roll_init();
|
roll_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IChecksum Members
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Updates the hash with data.</summary>
|
|
||||||
/// <param name="data">Data buffer.</param>
|
|
||||||
/// <param name="len">Length of buffer to hash.</param>
|
|
||||||
public void Update(byte[] data, uint len)
|
|
||||||
{
|
|
||||||
_self.TotalSize += len;
|
|
||||||
|
|
||||||
for(var i = 0; i < len; i++)
|
|
||||||
fuzzy_engine_step(data[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Updates the hash with data.</summary>
|
|
||||||
/// <param name="data">Data buffer.</param>
|
|
||||||
public void Update(byte[] data) => Update(data, (uint)data.Length);
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Returns a byte array of the hash value.</summary>
|
|
||||||
public byte[] Final() => throw new NotImplementedException("SpamSum does not have a binary representation.");
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
/// <summary>Returns a base64 representation of the hash value.</summary>
|
|
||||||
public string End()
|
|
||||||
{
|
|
||||||
FuzzyDigest(out byte[] result);
|
|
||||||
|
|
||||||
return CToString(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
void roll_init() => _self.Roll = new RollState
|
void roll_init() => _self.Roll = new RollState
|
||||||
{
|
{
|
||||||
@@ -173,8 +138,7 @@ public sealed class SpamSumContext : IChecksum
|
|||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
void fuzzy_try_fork_blockhash()
|
void fuzzy_try_fork_blockhash()
|
||||||
{
|
{
|
||||||
if(_self.Bhend >= NUM_BLOCKHASHES)
|
if(_self.Bhend >= NUM_BLOCKHASHES) return;
|
||||||
return;
|
|
||||||
|
|
||||||
if(_self.Bhend == 0) // assert
|
if(_self.Bhend == 0) // assert
|
||||||
throw new Exception("Assertion failed");
|
throw new Exception("Assertion failed");
|
||||||
@@ -192,8 +156,7 @@ public sealed class SpamSumContext : IChecksum
|
|||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
void fuzzy_try_reduce_blockhash()
|
void fuzzy_try_reduce_blockhash()
|
||||||
{
|
{
|
||||||
if(_self.Bhstart >= _self.Bhend)
|
if(_self.Bhstart >= _self.Bhend) throw new Exception("Assertion failed");
|
||||||
throw new Exception("Assertion failed");
|
|
||||||
|
|
||||||
if(_self.Bhend - _self.Bhstart < 2)
|
if(_self.Bhend - _self.Bhstart < 2)
|
||||||
/* Need at least two working hashes. */
|
/* Need at least two working hashes. */
|
||||||
@@ -241,8 +204,7 @@ public sealed class SpamSumContext : IChecksum
|
|||||||
/* We have hit a reset point. We now emit hashes which are
|
/* We have hit a reset point. We now emit hashes which are
|
||||||
* based on all characters in the piece of the message between
|
* based on all characters in the piece of the message between
|
||||||
* the last reset point and this one */
|
* the last reset point and this one */
|
||||||
if(0 == _self.Bh[i].Dlen)
|
if(0 == _self.Bh[i].Dlen) fuzzy_try_fork_blockhash();
|
||||||
fuzzy_try_fork_blockhash();
|
|
||||||
|
|
||||||
_self.Bh[i].Digest[_self.Bh[i].Dlen] = _b64[_self.Bh[i].H % 64];
|
_self.Bh[i].Digest[_self.Bh[i].Dlen] = _b64[_self.Bh[i].H % 64];
|
||||||
_self.Bh[i].Halfdigest = _b64[_self.Bh[i].Halfh % 64];
|
_self.Bh[i].Halfdigest = _b64[_self.Bh[i].Halfh % 64];
|
||||||
@@ -258,8 +220,7 @@ public sealed class SpamSumContext : IChecksum
|
|||||||
_self.Bh[i].Digest[++_self.Bh[i].Dlen] = 0;
|
_self.Bh[i].Digest[++_self.Bh[i].Dlen] = 0;
|
||||||
_self.Bh[i].H = HASH_INIT;
|
_self.Bh[i].H = HASH_INIT;
|
||||||
|
|
||||||
if(_self.Bh[i].Dlen >= SPAMSUM_LENGTH / 2)
|
if(_self.Bh[i].Dlen >= SPAMSUM_LENGTH / 2) continue;
|
||||||
continue;
|
|
||||||
|
|
||||||
_self.Bh[i].Halfh = HASH_INIT;
|
_self.Bh[i].Halfh = HASH_INIT;
|
||||||
_self.Bh[i].Halfdigest = 0;
|
_self.Bh[i].Halfdigest = 0;
|
||||||
@@ -290,21 +251,15 @@ public sealed class SpamSumContext : IChecksum
|
|||||||
{
|
{
|
||||||
++bi;
|
++bi;
|
||||||
|
|
||||||
if(bi >= NUM_BLOCKHASHES)
|
if(bi >= NUM_BLOCKHASHES) throw new OverflowException("The input exceeds data types.");
|
||||||
throw new OverflowException("The input exceeds data types.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Adapt blocksize guess to actual digest length. */
|
/* Adapt blocksize guess to actual digest length. */
|
||||||
while(bi >= _self.Bhend)
|
while(bi >= _self.Bhend) --bi;
|
||||||
--bi;
|
|
||||||
|
|
||||||
while(bi > _self.Bhstart &&
|
while(bi > _self.Bhstart && _self.Bh[bi].Dlen < SPAMSUM_LENGTH / 2) --bi;
|
||||||
_self.Bh[bi].Dlen < SPAMSUM_LENGTH / 2)
|
|
||||||
--bi;
|
|
||||||
|
|
||||||
if(bi > 0 &&
|
if(bi > 0 && _self.Bh[bi].Dlen < SPAMSUM_LENGTH / 2) throw new Exception("Assertion failed");
|
||||||
_self.Bh[bi].Dlen < SPAMSUM_LENGTH / 2)
|
|
||||||
throw new Exception("Assertion failed");
|
|
||||||
|
|
||||||
sb.AppendFormat("{0}:", SSDEEP_BS(bi));
|
sb.AppendFormat("{0}:", SSDEEP_BS(bi));
|
||||||
int i = Encoding.ASCII.GetBytes(sb.ToString()).Length;
|
int i = Encoding.ASCII.GetBytes(sb.ToString()).Length;
|
||||||
@@ -313,8 +268,7 @@ public sealed class SpamSumContext : IChecksum
|
|||||||
/* Maybe snprintf has set errno here? */
|
/* Maybe snprintf has set errno here? */
|
||||||
throw new OverflowException("The input exceeds data types.");
|
throw new OverflowException("The input exceeds data types.");
|
||||||
|
|
||||||
if(i >= remain)
|
if(i >= remain) throw new Exception("Assertion failed");
|
||||||
throw new Exception("Assertion failed");
|
|
||||||
|
|
||||||
remain -= i;
|
remain -= i;
|
||||||
|
|
||||||
@@ -324,8 +278,7 @@ public sealed class SpamSumContext : IChecksum
|
|||||||
|
|
||||||
i = (int)_self.Bh[bi].Dlen;
|
i = (int)_self.Bh[bi].Dlen;
|
||||||
|
|
||||||
if(i > remain)
|
if(i > remain) throw new Exception("Assertion failed");
|
||||||
throw new Exception("Assertion failed");
|
|
||||||
|
|
||||||
Array.Copy(_self.Bh[bi].Digest, 0, result, resultOff, i);
|
Array.Copy(_self.Bh[bi].Digest, 0, result, resultOff, i);
|
||||||
resultOff += i;
|
resultOff += i;
|
||||||
@@ -333,8 +286,7 @@ public sealed class SpamSumContext : IChecksum
|
|||||||
|
|
||||||
if(h != 0)
|
if(h != 0)
|
||||||
{
|
{
|
||||||
if(remain <= 0)
|
if(remain <= 0) throw new Exception("Assertion failed");
|
||||||
throw new Exception("Assertion failed");
|
|
||||||
|
|
||||||
result[resultOff] = _b64[_self.Bh[bi].H % 64];
|
result[resultOff] = _b64[_self.Bh[bi].H % 64];
|
||||||
|
|
||||||
@@ -349,8 +301,7 @@ public sealed class SpamSumContext : IChecksum
|
|||||||
}
|
}
|
||||||
else if(_self.Bh[bi].Digest[i] != 0)
|
else if(_self.Bh[bi].Digest[i] != 0)
|
||||||
{
|
{
|
||||||
if(remain <= 0)
|
if(remain <= 0) throw new Exception("Assertion failed");
|
||||||
throw new Exception("Assertion failed");
|
|
||||||
|
|
||||||
result[resultOff] = _self.Bh[bi].Digest[i];
|
result[resultOff] = _self.Bh[bi].Digest[i];
|
||||||
|
|
||||||
@@ -364,8 +315,7 @@ public sealed class SpamSumContext : IChecksum
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(remain <= 0)
|
if(remain <= 0) throw new Exception("Assertion failed");
|
||||||
throw new Exception("Assertion failed");
|
|
||||||
|
|
||||||
result[resultOff++] = 0x3A; // ':'
|
result[resultOff++] = 0x3A; // ':'
|
||||||
--remain;
|
--remain;
|
||||||
@@ -375,8 +325,7 @@ public sealed class SpamSumContext : IChecksum
|
|||||||
++bi;
|
++bi;
|
||||||
i = (int)_self.Bh[bi].Dlen;
|
i = (int)_self.Bh[bi].Dlen;
|
||||||
|
|
||||||
if(i > remain)
|
if(i > remain) throw new Exception("Assertion failed");
|
||||||
throw new Exception("Assertion failed");
|
|
||||||
|
|
||||||
Array.Copy(_self.Bh[bi].Digest, 0, result, resultOff, i);
|
Array.Copy(_self.Bh[bi].Digest, 0, result, resultOff, i);
|
||||||
resultOff += i;
|
resultOff += i;
|
||||||
@@ -384,8 +333,7 @@ public sealed class SpamSumContext : IChecksum
|
|||||||
|
|
||||||
if(h != 0)
|
if(h != 0)
|
||||||
{
|
{
|
||||||
if(remain <= 0)
|
if(remain <= 0) throw new Exception("Assertion failed");
|
||||||
throw new Exception("Assertion failed");
|
|
||||||
|
|
||||||
h = _self.Bh[bi].Halfh;
|
h = _self.Bh[bi].Halfh;
|
||||||
result[resultOff] = _b64[h % 64];
|
result[resultOff] = _b64[h % 64];
|
||||||
@@ -405,8 +353,7 @@ public sealed class SpamSumContext : IChecksum
|
|||||||
|
|
||||||
if(i != 0)
|
if(i != 0)
|
||||||
{
|
{
|
||||||
if(remain <= 0)
|
if(remain <= 0) throw new Exception("Assertion failed");
|
||||||
throw new Exception("Assertion failed");
|
|
||||||
|
|
||||||
result[resultOff] = (byte)i;
|
result[resultOff] = (byte)i;
|
||||||
|
|
||||||
@@ -423,11 +370,9 @@ public sealed class SpamSumContext : IChecksum
|
|||||||
}
|
}
|
||||||
else if(h != 0)
|
else if(h != 0)
|
||||||
{
|
{
|
||||||
if(_self.Bh[bi].Dlen != 0)
|
if(_self.Bh[bi].Dlen != 0) throw new Exception("Assertion failed");
|
||||||
throw new Exception("Assertion failed");
|
|
||||||
|
|
||||||
if(remain <= 0)
|
if(remain <= 0) throw new Exception("Assertion failed");
|
||||||
throw new Exception("Assertion failed");
|
|
||||||
|
|
||||||
result[resultOff++] = _b64[_self.Bh[bi].H % 64];
|
result[resultOff++] = _b64[_self.Bh[bi].H % 64];
|
||||||
/* No need to bother with FUZZY_FLAG_ELIMSEQ, because this
|
/* No need to bother with FUZZY_FLAG_ELIMSEQ, because this
|
||||||
@@ -481,8 +426,7 @@ public sealed class SpamSumContext : IChecksum
|
|||||||
// LINQ is six times slower
|
// LINQ is six times slower
|
||||||
foreach(byte c in cString)
|
foreach(byte c in cString)
|
||||||
{
|
{
|
||||||
if(c == 0)
|
if(c == 0) break;
|
||||||
break;
|
|
||||||
|
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
@@ -538,5 +482,38 @@ public sealed class SpamSumContext : IChecksum
|
|||||||
public uint N;
|
public uint N;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region IChecksum Members
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Updates the hash with data.</summary>
|
||||||
|
/// <param name="data">Data buffer.</param>
|
||||||
|
/// <param name="len">Length of buffer to hash.</param>
|
||||||
|
public void Update(byte[] data, uint len)
|
||||||
|
{
|
||||||
|
_self.TotalSize += len;
|
||||||
|
|
||||||
|
for(var i = 0; i < len; i++) fuzzy_engine_step(data[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Updates the hash with data.</summary>
|
||||||
|
/// <param name="data">Data buffer.</param>
|
||||||
|
public void Update(byte[] data) => Update(data, (uint)data.Length);
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Returns a byte array of the hash value.</summary>
|
||||||
|
public byte[] Final() => throw new NotImplementedException("SpamSum does not have a binary representation.");
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
/// <summary>Returns a base64 representation of the hash value.</summary>
|
||||||
|
public string End()
|
||||||
|
{
|
||||||
|
FuzzyDigest(out byte[] result);
|
||||||
|
|
||||||
|
return CToString(result);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -85,8 +85,7 @@ public class ADC
|
|||||||
case PLAIN:
|
case PLAIN:
|
||||||
chunkSize = GetChunkSize(readByte);
|
chunkSize = GetChunkSize(readByte);
|
||||||
|
|
||||||
if(outPosition + chunkSize > destination.Length)
|
if(outPosition + chunkSize > destination.Length) goto finished;
|
||||||
goto finished;
|
|
||||||
|
|
||||||
Array.Copy(source, inputPosition, destination, outPosition, chunkSize);
|
Array.Copy(source, inputPosition, destination, outPosition, chunkSize);
|
||||||
outPosition += chunkSize;
|
outPosition += chunkSize;
|
||||||
@@ -99,8 +98,7 @@ public class ADC
|
|||||||
temp[1] = source[inputPosition++];
|
temp[1] = source[inputPosition++];
|
||||||
offset = GetOffset(temp);
|
offset = GetOffset(temp);
|
||||||
|
|
||||||
if(outPosition + chunkSize > destination.Length)
|
if(outPosition + chunkSize > destination.Length) goto finished;
|
||||||
goto finished;
|
|
||||||
|
|
||||||
if(offset == 0)
|
if(offset == 0)
|
||||||
{
|
{
|
||||||
@@ -129,8 +127,7 @@ public class ADC
|
|||||||
temp[2] = source[inputPosition++];
|
temp[2] = source[inputPosition++];
|
||||||
offset = GetOffset(temp);
|
offset = GetOffset(temp);
|
||||||
|
|
||||||
if(outPosition + chunkSize > destination.Length)
|
if(outPosition + chunkSize > destination.Length) goto finished;
|
||||||
goto finished;
|
|
||||||
|
|
||||||
if(offset == 0)
|
if(offset == 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -50,8 +50,7 @@ public class AppleRle
|
|||||||
var repeatMode = false; // true if we're repeating, false if we're just copying
|
var repeatMode = false; // true if we're repeating, false if we're just copying
|
||||||
int inPosition = 0, outPosition = 0;
|
int inPosition = 0, outPosition = 0;
|
||||||
|
|
||||||
while(inPosition <= source.Length &&
|
while(inPosition <= source.Length && outPosition <= destination.Length)
|
||||||
outPosition <= destination.Length)
|
|
||||||
{
|
{
|
||||||
switch(repeatMode)
|
switch(repeatMode)
|
||||||
{
|
{
|
||||||
@@ -82,8 +81,7 @@ public class AppleRle
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(inPosition == source.Length)
|
if(inPosition == source.Length) break;
|
||||||
break;
|
|
||||||
|
|
||||||
while(true)
|
while(true)
|
||||||
{
|
{
|
||||||
@@ -91,10 +89,7 @@ public class AppleRle
|
|||||||
byte b2 = source[inPosition++];
|
byte b2 = source[inPosition++];
|
||||||
var s = (short)(b1 << 8 | b2);
|
var s = (short)(b1 << 8 | b2);
|
||||||
|
|
||||||
if(s == 0 ||
|
if(s == 0 || s >= DART_CHUNK || s <= -DART_CHUNK) continue;
|
||||||
s >= DART_CHUNK ||
|
|
||||||
s <= -DART_CHUNK)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if(s < 0)
|
if(s < 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -145,8 +145,7 @@ public class TeleDiskLzh
|
|||||||
_tdctl.Bufcnt = 0;
|
_tdctl.Bufcnt = 0;
|
||||||
StartHuff();
|
StartHuff();
|
||||||
|
|
||||||
for(i = 0; i < N - F; i++)
|
for(i = 0; i < N - F; i++) _textBuf[i] = 0x20;
|
||||||
_textBuf[i] = 0x20;
|
|
||||||
|
|
||||||
_tdctl.R = N - F;
|
_tdctl.R = N - F;
|
||||||
_inStream = dataStream;
|
_inStream = dataStream;
|
||||||
@@ -172,8 +171,7 @@ public class TeleDiskLzh
|
|||||||
{
|
{
|
||||||
if(_tdctl.Bufcnt == 0)
|
if(_tdctl.Bufcnt == 0)
|
||||||
{
|
{
|
||||||
if((c = DecodeChar()) < 0)
|
if((c = DecodeChar()) < 0) return count; // fatal error
|
||||||
return count; // fatal error
|
|
||||||
|
|
||||||
if(c < 256)
|
if(c < 256)
|
||||||
{
|
{
|
||||||
@@ -186,8 +184,7 @@ public class TeleDiskLzh
|
|||||||
{
|
{
|
||||||
short pos;
|
short pos;
|
||||||
|
|
||||||
if((pos = DecodePosition()) < 0)
|
if((pos = DecodePosition()) < 0) return count; // fatal error
|
||||||
return count; // fatal error
|
|
||||||
|
|
||||||
_tdctl.Bufpos = (ushort)(_tdctl.R - pos - 1 & N - 1);
|
_tdctl.Bufpos = (ushort)(_tdctl.R - pos - 1 & N - 1);
|
||||||
_tdctl.Bufcnt = (ushort)(c - 255 + THRESHOLD);
|
_tdctl.Bufcnt = (ushort)(c - 255 + THRESHOLD);
|
||||||
@@ -197,8 +194,7 @@ public class TeleDiskLzh
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// still chars from last string
|
// still chars from last string
|
||||||
while(_tdctl.Bufndx < _tdctl.Bufcnt &&
|
while(_tdctl.Bufndx < _tdctl.Bufcnt && count < len)
|
||||||
count < len)
|
|
||||||
{
|
{
|
||||||
c = _textBuf[_tdctl.Bufpos + _tdctl.Bufndx & N - 1];
|
c = _textBuf[_tdctl.Bufpos + _tdctl.Bufndx & N - 1];
|
||||||
buf[count] = (byte)c;
|
buf[count] = (byte)c;
|
||||||
@@ -209,8 +205,7 @@ public class TeleDiskLzh
|
|||||||
}
|
}
|
||||||
|
|
||||||
// reset bufcnt after copy string from text_buf[]
|
// reset bufcnt after copy string from text_buf[]
|
||||||
if(_tdctl.Bufndx >= _tdctl.Bufcnt)
|
if(_tdctl.Bufndx >= _tdctl.Bufcnt) _tdctl.Bufndx = _tdctl.Bufcnt = 0;
|
||||||
_tdctl.Bufndx = _tdctl.Bufcnt = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,8 +214,7 @@ public class TeleDiskLzh
|
|||||||
|
|
||||||
long DataRead(out byte[] buf, long size)
|
long DataRead(out byte[] buf, long size)
|
||||||
{
|
{
|
||||||
if(size > _inStream.Length - _inStream.Position)
|
if(size > _inStream.Length - _inStream.Position) size = _inStream.Length - _inStream.Position;
|
||||||
size = _inStream.Length - _inStream.Position;
|
|
||||||
|
|
||||||
buf = new byte[size];
|
buf = new byte[size];
|
||||||
_inStream.Read(buf, 0, (int)size);
|
_inStream.Read(buf, 0, (int)size);
|
||||||
@@ -235,8 +229,7 @@ public class TeleDiskLzh
|
|||||||
_tdctl.Ibufndx = 0;
|
_tdctl.Ibufndx = 0;
|
||||||
_tdctl.Ibufcnt = (ushort)DataRead(out _tdctl.Inbuf, BUFSZ);
|
_tdctl.Ibufcnt = (ushort)DataRead(out _tdctl.Inbuf, BUFSZ);
|
||||||
|
|
||||||
if(_tdctl.Ibufcnt <= 0)
|
if(_tdctl.Ibufcnt <= 0) return -1;
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
while(_getlen <= 8)
|
while(_getlen <= 8)
|
||||||
@@ -251,8 +244,7 @@ public class TeleDiskLzh
|
|||||||
|
|
||||||
int GetBit() /* get one bit */
|
int GetBit() /* get one bit */
|
||||||
{
|
{
|
||||||
if(NextWord() < 0)
|
if(NextWord() < 0) return -1;
|
||||||
return -1;
|
|
||||||
|
|
||||||
var i = (short)_getbuf;
|
var i = (short)_getbuf;
|
||||||
_getbuf <<= 1;
|
_getbuf <<= 1;
|
||||||
@@ -263,8 +255,7 @@ public class TeleDiskLzh
|
|||||||
|
|
||||||
int GetByte() /* get a byte */
|
int GetByte() /* get a byte */
|
||||||
{
|
{
|
||||||
if(NextWord() != 0)
|
if(NextWord() != 0) return -1;
|
||||||
return -1;
|
|
||||||
|
|
||||||
ushort i = _getbuf;
|
ushort i = _getbuf;
|
||||||
_getbuf <<= 8;
|
_getbuf <<= 8;
|
||||||
@@ -353,8 +344,7 @@ public class TeleDiskLzh
|
|||||||
|
|
||||||
void Update(int c)
|
void Update(int c)
|
||||||
{
|
{
|
||||||
if(_freq[ROOT] == MAX_FREQ)
|
if(_freq[ROOT] == MAX_FREQ) Reconst();
|
||||||
Reconst();
|
|
||||||
|
|
||||||
c = _prnt[c + T];
|
c = _prnt[c + T];
|
||||||
|
|
||||||
@@ -365,8 +355,7 @@ public class TeleDiskLzh
|
|||||||
/* swap nodes to keep the tree freq-ordered */
|
/* swap nodes to keep the tree freq-ordered */
|
||||||
int l;
|
int l;
|
||||||
|
|
||||||
if(k <= _freq[l = c + 1])
|
if(k <= _freq[l = c + 1]) continue;
|
||||||
continue;
|
|
||||||
|
|
||||||
while(k > _freq[++l]) {}
|
while(k > _freq[++l]) {}
|
||||||
|
|
||||||
@@ -377,16 +366,14 @@ public class TeleDiskLzh
|
|||||||
int i = _son[c];
|
int i = _son[c];
|
||||||
_prnt[i] = (short)l;
|
_prnt[i] = (short)l;
|
||||||
|
|
||||||
if(i < T)
|
if(i < T) _prnt[i + 1] = (short)l;
|
||||||
_prnt[i + 1] = (short)l;
|
|
||||||
|
|
||||||
int j = _son[l];
|
int j = _son[l];
|
||||||
_son[l] = (short)i;
|
_son[l] = (short)i;
|
||||||
|
|
||||||
_prnt[j] = (short)c;
|
_prnt[j] = (short)c;
|
||||||
|
|
||||||
if(j < T)
|
if(j < T) _prnt[j + 1] = (short)c;
|
||||||
_prnt[j + 1] = (short)c;
|
|
||||||
|
|
||||||
_son[c] = (short)j;
|
_son[c] = (short)j;
|
||||||
|
|
||||||
@@ -407,8 +394,7 @@ public class TeleDiskLzh
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if((ret = GetBit()) < 0)
|
if((ret = GetBit()) < 0) return -1;
|
||||||
return -1;
|
|
||||||
|
|
||||||
c += (ushort)ret;
|
c += (ushort)ret;
|
||||||
c = (ushort)_son[c];
|
c = (ushort)_son[c];
|
||||||
@@ -425,8 +411,7 @@ public class TeleDiskLzh
|
|||||||
short bit;
|
short bit;
|
||||||
|
|
||||||
/* decode upper 6 bits from given table */
|
/* decode upper 6 bits from given table */
|
||||||
if((bit = (short)GetByte()) < 0)
|
if((bit = (short)GetByte()) < 0) return -1;
|
||||||
return -1;
|
|
||||||
|
|
||||||
var i = (ushort)bit;
|
var i = (ushort)bit;
|
||||||
var c = (ushort)(_dCode[i] << 6);
|
var c = (ushort)(_dCode[i] << 6);
|
||||||
@@ -437,8 +422,7 @@ public class TeleDiskLzh
|
|||||||
|
|
||||||
while(j-- > 0)
|
while(j-- > 0)
|
||||||
{
|
{
|
||||||
if((bit = (short)GetBit()) < 0)
|
if((bit = (short)GetBit()) < 0) return -1;
|
||||||
return -1;
|
|
||||||
|
|
||||||
i = (ushort)((i << 1) + bit);
|
i = (ushort)((i << 1) + bit);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,84 +1,84 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFrameworks>netcoreapp3.1;net8.0</TargetFrameworks>
|
<TargetFrameworks>netcoreapp3.1;net8.0</TargetFrameworks>
|
||||||
<LangVersion>latest</LangVersion>
|
<LangVersion>latest</LangVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Aaru.Checksums" Version="5.3.2"/>
|
<PackageReference Include="Aaru.Checksums" Version="5.3.2"/>
|
||||||
<PackageReference Include="Aaru.Compression" Version="5.3.2"/>
|
<PackageReference Include="Aaru.Compression" Version="5.3.2"/>
|
||||||
<PackageReference Include="Aaru.Compression.Native" Version="6.0.0-alpha.10" />
|
<PackageReference Include="Aaru.Compression.Native" Version="6.0.0-alpha.10"/>
|
||||||
<PackageReference Include="BenchmarkDotNet" Version="0.13.12" />
|
<PackageReference Include="BenchmarkDotNet" Version="0.13.12"/>
|
||||||
<PackageReference Include="BenchmarkDotNet.Diagnostics.Windows" Version="0.13.12" />
|
<PackageReference Include="BenchmarkDotNet.Diagnostics.Windows" Version="0.13.12"/>
|
||||||
<PackageReference Include="System.Text.Encoding.CodePages" Version="8.0.0" />
|
<PackageReference Include="System.Text.Encoding.CodePages" Version="8.0.0"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1' ">
|
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||||
<PackageReference Include="DotNetZip" Version="1.13.8"/>
|
<PackageReference Include="DotNetZip" Version="1.13.8"/>
|
||||||
<PackageReference Include="SharpCompress" Version="0.37.2" />
|
<PackageReference Include="SharpCompress" Version="0.37.2"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
|
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
|
||||||
<PackageReference Include="DotNetZip" Version="1.16.0"/>
|
<PackageReference Include="DotNetZip" Version="1.16.0"/>
|
||||||
<PackageReference Include="SharpCompress" Version="0.37.2" />
|
<PackageReference Include="SharpCompress" Version="0.37.2"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Remove="data\random"/>
|
<None Remove="data\random"/>
|
||||||
<Content Include="data\random">
|
<Content Include="data\random">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<None Remove="data\gzip.gz"/>
|
<None Remove="data\gzip.gz"/>
|
||||||
<Content Include="data\gzip.gz">
|
<Content Include="data\gzip.gz">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<None Remove="data\bzip2.bz2"/>
|
<None Remove="data\bzip2.bz2"/>
|
||||||
<Content Include="data\bzip2.bz2">
|
<Content Include="data\bzip2.bz2">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<None Remove="data\apple_rle.bin"/>
|
<None Remove="data\apple_rle.bin"/>
|
||||||
<Content Include="data\apple_rle.bin">
|
<Content Include="data\apple_rle.bin">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<None Remove="data\teledisk_lzh.bin"/>
|
<None Remove="data\teledisk_lzh.bin"/>
|
||||||
<Content Include="data\teledisk_lzh.bin">
|
<Content Include="data\teledisk_lzh.bin">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<None Remove="data\adc.bin"/>
|
<None Remove="data\adc.bin"/>
|
||||||
<Content Include="data\adc.bin">
|
<Content Include="data\adc.bin">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<None Remove="data\lzip.lz"/>
|
<None Remove="data\lzip.lz"/>
|
||||||
<Content Include="data\lzip.lz">
|
<Content Include="data\lzip.lz">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<None Remove="data\lzma.bin"/>
|
<None Remove="data\lzma.bin"/>
|
||||||
<Content Include="data\lzma.bin">
|
<Content Include="data\lzma.bin">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<None Remove="data\flac.flac"/>
|
<None Remove="data\flac.flac"/>
|
||||||
<Content Include="data\flac.flac">
|
<Content Include="data\flac.flac">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<None Remove="data\audio.bin"/>
|
<None Remove="data\audio.bin"/>
|
||||||
<Content Include="data\audio.bin">
|
<Content Include="data\audio.bin">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<None Remove="data\data.bin"/>
|
<None Remove="data\data.bin"/>
|
||||||
<Content Include="data\data.bin">
|
<Content Include="data\data.bin">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
|
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
|
||||||
<ProjectReference Include="..\Aaru6.Checksums\Aaru6.Checksums.csproj"/>
|
<ProjectReference Include="..\Aaru6.Checksums\Aaru6.Checksums.csproj"/>
|
||||||
<ProjectReference Include="..\Aaru6.Compression\Aaru6.Compression.csproj"/>
|
<ProjectReference Include="..\Aaru6.Compression\Aaru6.Compression.csproj"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="data"/>
|
<Folder Include="data"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -23,15 +23,15 @@ namespace AaruBenchmark
|
|||||||
NetCoreAppSettings dotnetCli32Bit =
|
NetCoreAppSettings dotnetCli32Bit =
|
||||||
NetCoreAppSettings.NetCoreApp31.WithCustomDotNetCliPath(@"/usr/local/share/dotnet/x64/dotnet", "x64");
|
NetCoreAppSettings.NetCoreApp31.WithCustomDotNetCliPath(@"/usr/local/share/dotnet/x64/dotnet", "x64");
|
||||||
|
|
||||||
Config = ManualConfig.CreateEmpty().
|
Config = ManualConfig.CreateEmpty()
|
||||||
AddJob(job.WithToolchain(CsProjCoreToolchain.From(dotnetCli32Bit)).AsBaseline());
|
.AddJob(job.WithToolchain(CsProjCoreToolchain.From(dotnetCli32Bit)).AsBaseline());
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IConfigSource Members
|
#region IConfigSource Members
|
||||||
|
|
||||||
public IConfig Config { get; }
|
public IConfig Config { get; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Assembly)]
|
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Assembly)]
|
||||||
@@ -45,15 +45,15 @@ namespace AaruBenchmark
|
|||||||
NetCoreAppSettings.NetCoreApp31.WithCustomDotNetCliPath(@"C:\\Program Files\\dotnet\\x64\\dotnet.exe",
|
NetCoreAppSettings.NetCoreApp31.WithCustomDotNetCliPath(@"C:\\Program Files\\dotnet\\x64\\dotnet.exe",
|
||||||
"x64");
|
"x64");
|
||||||
|
|
||||||
Config = ManualConfig.CreateEmpty().
|
Config = ManualConfig.CreateEmpty()
|
||||||
AddJob(job.WithToolchain(CsProjCoreToolchain.From(dotnetCli32Bit)).AsBaseline());
|
.AddJob(job.WithToolchain(CsProjCoreToolchain.From(dotnetCli32Bit)).AsBaseline());
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IConfigSource Members
|
#region IConfigSource Members
|
||||||
|
|
||||||
public IConfig Config { get; }
|
public IConfig Config { get; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Assembly)]
|
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Assembly)]
|
||||||
@@ -70,11 +70,11 @@ namespace AaruBenchmark
|
|||||||
Config = ManualConfig.CreateEmpty().AddJob(job.WithToolchain(CsProjCoreToolchain.From(dotnetCli32Bit)));
|
Config = ManualConfig.CreateEmpty().AddJob(job.WithToolchain(CsProjCoreToolchain.From(dotnetCli32Bit)));
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IConfigSource Members
|
#region IConfigSource Members
|
||||||
|
|
||||||
public IConfig Config { get; }
|
public IConfig Config { get; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -90,7 +90,7 @@ namespace AaruBenchmark
|
|||||||
// [NativeMemoryProfiler]
|
// [NativeMemoryProfiler]
|
||||||
public class ADCBenchs
|
public class ADCBenchs
|
||||||
{
|
{
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => throw new NotImplementedException();
|
public void Aaru() => throw new NotImplementedException();
|
||||||
|
|
||||||
@@ -99,7 +99,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => Compression.AaruNative.ADC();
|
public void AaruNative() => Compression.AaruNative.ADC();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Compression.SharpCompress.ADC();
|
public void Aaru() => Compression.SharpCompress.ADC();
|
||||||
|
|
||||||
@@ -108,7 +108,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => throw new NotImplementedException();
|
public void AaruNative() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -124,7 +124,7 @@ namespace AaruBenchmark
|
|||||||
// [NativeMemoryProfiler]
|
// [NativeMemoryProfiler]
|
||||||
public class AppleRleBenchs
|
public class AppleRleBenchs
|
||||||
{
|
{
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => throw new NotImplementedException();
|
public void Aaru() => throw new NotImplementedException();
|
||||||
|
|
||||||
@@ -133,7 +133,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => Compression.AaruNative.AppleRle();
|
public void AaruNative() => Compression.AaruNative.AppleRle();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Compression.Aaru.AppleRle();
|
public void Aaru() => Compression.Aaru.AppleRle();
|
||||||
|
|
||||||
@@ -142,7 +142,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => throw new NotImplementedException();
|
public void AaruNative() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -158,19 +158,19 @@ namespace AaruBenchmark
|
|||||||
// [NativeMemoryProfiler]
|
// [NativeMemoryProfiler]
|
||||||
public class TeleDiskLzhBenchs
|
public class TeleDiskLzhBenchs
|
||||||
{
|
{
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => throw new NotImplementedException();
|
public void Aaru() => throw new NotImplementedException();
|
||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru6() => Aaru6Compressions.TeleDiskLzh();
|
public void Aaru6() => Aaru6Compressions.TeleDiskLzh();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Compression.Aaru.TeleDiskLzh();
|
public void Aaru() => Compression.Aaru.TeleDiskLzh();
|
||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru6() => throw new NotImplementedException();
|
public void Aaru6() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -186,19 +186,19 @@ namespace AaruBenchmark
|
|||||||
// [NativeMemoryProfiler]
|
// [NativeMemoryProfiler]
|
||||||
public class GzipBenchs
|
public class GzipBenchs
|
||||||
{
|
{
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => throw new NotImplementedException();
|
public void Aaru() => throw new NotImplementedException();
|
||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru6() => NetRuntime.Gzip();
|
public void Aaru6() => NetRuntime.Gzip();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Compression.SharpCompress.Gzip();
|
public void Aaru() => Compression.SharpCompress.Gzip();
|
||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru6() => throw new NotImplementedException();
|
public void Aaru6() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -214,19 +214,19 @@ namespace AaruBenchmark
|
|||||||
// [NativeMemoryProfiler]
|
// [NativeMemoryProfiler]
|
||||||
public class CompressGzipBenchs
|
public class CompressGzipBenchs
|
||||||
{
|
{
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => throw new NotImplementedException();
|
public void Aaru() => throw new NotImplementedException();
|
||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru6() => NetRuntime.CompressGzip();
|
public void Aaru6() => NetRuntime.CompressGzip();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Compression.SharpCompress.CompressGzip();
|
public void Aaru() => Compression.SharpCompress.CompressGzip();
|
||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru6() => throw new NotImplementedException();
|
public void Aaru6() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -242,7 +242,7 @@ namespace AaruBenchmark
|
|||||||
// [NativeMemoryProfiler]
|
// [NativeMemoryProfiler]
|
||||||
public class Bzip2Benchs
|
public class Bzip2Benchs
|
||||||
{
|
{
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => throw new NotImplementedException();
|
public void Aaru() => throw new NotImplementedException();
|
||||||
|
|
||||||
@@ -251,7 +251,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => Compression.AaruNative.Bzip2();
|
public void AaruNative() => Compression.AaruNative.Bzip2();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Compression.SharpCompress.Bzip2();
|
public void Aaru() => Compression.SharpCompress.Bzip2();
|
||||||
|
|
||||||
@@ -260,7 +260,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => throw new NotImplementedException();
|
public void AaruNative() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -276,7 +276,7 @@ namespace AaruBenchmark
|
|||||||
// [NativeMemoryProfiler]
|
// [NativeMemoryProfiler]
|
||||||
public class CompressBzip2Benchs
|
public class CompressBzip2Benchs
|
||||||
{
|
{
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => throw new NotImplementedException();
|
public void Aaru() => throw new NotImplementedException();
|
||||||
|
|
||||||
@@ -285,7 +285,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => Compression.AaruNative.CompressBzip2();
|
public void AaruNative() => Compression.AaruNative.CompressBzip2();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Compression.SharpCompress.CompressBzip2();
|
public void Aaru() => Compression.SharpCompress.CompressBzip2();
|
||||||
|
|
||||||
@@ -294,7 +294,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => throw new NotImplementedException();
|
public void AaruNative() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -313,13 +313,13 @@ namespace AaruBenchmark
|
|||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Compression.SharpCompress.Lzip();
|
public void Aaru() => Compression.SharpCompress.Lzip();
|
||||||
|
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => Compression.AaruNative.Lzip();
|
public void AaruNative() => Compression.AaruNative.Lzip();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => throw new NotImplementedException();
|
public void AaruNative() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -338,13 +338,13 @@ namespace AaruBenchmark
|
|||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Compression.SharpCompress.CompressLzip();
|
public void Aaru() => Compression.SharpCompress.CompressLzip();
|
||||||
|
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => Compression.AaruNative.CompressLzip();
|
public void AaruNative() => Compression.AaruNative.CompressLzip();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => throw new NotImplementedException();
|
public void AaruNative() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -362,13 +362,13 @@ namespace AaruBenchmark
|
|||||||
{
|
{
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Compression.SharpCompress.Lzma();
|
public void Aaru() => Compression.SharpCompress.Lzma();
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => Compression.AaruNative.Lzma();
|
public void AaruNative() => Compression.AaruNative.Lzma();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => throw new NotImplementedException();
|
public void AaruNative() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -387,13 +387,13 @@ namespace AaruBenchmark
|
|||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Compression.SharpCompress.CompressLzma();
|
public void Aaru() => Compression.SharpCompress.CompressLzma();
|
||||||
|
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => Compression.AaruNative.CompressLzma();
|
public void AaruNative() => Compression.AaruNative.CompressLzma();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => throw new NotImplementedException();
|
public void AaruNative() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -412,13 +412,13 @@ namespace AaruBenchmark
|
|||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Compression.Aaru.Flac();
|
public void Aaru() => Compression.Aaru.Flac();
|
||||||
|
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => Compression.AaruNative.Flac();
|
public void AaruNative() => Compression.AaruNative.Flac();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => throw new NotImplementedException();
|
public void AaruNative() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -437,13 +437,13 @@ namespace AaruBenchmark
|
|||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Compression.Aaru.CompressFlac();
|
public void Aaru() => Compression.Aaru.CompressFlac();
|
||||||
|
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => Compression.AaruNative.CompressFlac();
|
public void AaruNative() => Compression.AaruNative.CompressFlac();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => throw new NotImplementedException();
|
public void AaruNative() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -459,7 +459,7 @@ namespace AaruBenchmark
|
|||||||
// [NativeMemoryProfiler]
|
// [NativeMemoryProfiler]
|
||||||
public class Adler32Benchs
|
public class Adler32Benchs
|
||||||
{
|
{
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => throw new NotImplementedException();
|
public void Aaru() => throw new NotImplementedException();
|
||||||
|
|
||||||
@@ -468,7 +468,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => Checksums.AaruNative.Adler32();
|
public void AaruNative() => Checksums.AaruNative.Adler32();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Checksums.Aaru.Adler32();
|
public void Aaru() => Checksums.Aaru.Adler32();
|
||||||
|
|
||||||
@@ -477,7 +477,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => throw new NotImplementedException();
|
public void AaruNative() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -493,7 +493,7 @@ namespace AaruBenchmark
|
|||||||
// [NativeMemoryProfiler]
|
// [NativeMemoryProfiler]
|
||||||
public class Fletcher16Benchs
|
public class Fletcher16Benchs
|
||||||
{
|
{
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => throw new NotImplementedException();
|
public void Aaru() => throw new NotImplementedException();
|
||||||
|
|
||||||
@@ -502,7 +502,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => Checksums.AaruNative.Fletcher16();
|
public void AaruNative() => Checksums.AaruNative.Fletcher16();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Checksums.Aaru.Fletcher16();
|
public void Aaru() => Checksums.Aaru.Fletcher16();
|
||||||
|
|
||||||
@@ -511,7 +511,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => throw new NotImplementedException();
|
public void AaruNative() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -527,7 +527,7 @@ namespace AaruBenchmark
|
|||||||
// [NativeMemoryProfiler]
|
// [NativeMemoryProfiler]
|
||||||
public class Fletcher32Benchs
|
public class Fletcher32Benchs
|
||||||
{
|
{
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => throw new NotImplementedException();
|
public void Aaru() => throw new NotImplementedException();
|
||||||
|
|
||||||
@@ -536,7 +536,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => Checksums.AaruNative.Fletcher32();
|
public void AaruNative() => Checksums.AaruNative.Fletcher32();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Checksums.Aaru.Fletcher32();
|
public void Aaru() => Checksums.Aaru.Fletcher32();
|
||||||
|
|
||||||
@@ -545,7 +545,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => throw new NotImplementedException();
|
public void AaruNative() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -561,7 +561,7 @@ namespace AaruBenchmark
|
|||||||
// [NativeMemoryProfiler]
|
// [NativeMemoryProfiler]
|
||||||
public class Crc16CcittBenchs
|
public class Crc16CcittBenchs
|
||||||
{
|
{
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => throw new NotImplementedException();
|
public void Aaru() => throw new NotImplementedException();
|
||||||
|
|
||||||
@@ -570,7 +570,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => Checksums.AaruNative.Crc16Ccitt();
|
public void AaruNative() => Checksums.AaruNative.Crc16Ccitt();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Checksums.Aaru.Crc16Ccitt();
|
public void Aaru() => Checksums.Aaru.Crc16Ccitt();
|
||||||
|
|
||||||
@@ -579,7 +579,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => throw new NotImplementedException();
|
public void AaruNative() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -595,7 +595,7 @@ namespace AaruBenchmark
|
|||||||
// [NativeMemoryProfiler]
|
// [NativeMemoryProfiler]
|
||||||
public class Crc16Benchs
|
public class Crc16Benchs
|
||||||
{
|
{
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => throw new NotImplementedException();
|
public void Aaru() => throw new NotImplementedException();
|
||||||
|
|
||||||
@@ -604,7 +604,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => Checksums.AaruNative.Crc16();
|
public void AaruNative() => Checksums.AaruNative.Crc16();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Checksums.Aaru.Crc16();
|
public void Aaru() => Checksums.Aaru.Crc16();
|
||||||
|
|
||||||
@@ -613,7 +613,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => throw new NotImplementedException();
|
public void AaruNative() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -629,7 +629,7 @@ namespace AaruBenchmark
|
|||||||
// [NativeMemoryProfiler]
|
// [NativeMemoryProfiler]
|
||||||
public class Crc32Benchs
|
public class Crc32Benchs
|
||||||
{
|
{
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => throw new NotImplementedException();
|
public void Aaru() => throw new NotImplementedException();
|
||||||
|
|
||||||
@@ -638,7 +638,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => Checksums.AaruNative.Crc32();
|
public void AaruNative() => Checksums.AaruNative.Crc32();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Checksums.Aaru.Crc32();
|
public void Aaru() => Checksums.Aaru.Crc32();
|
||||||
|
|
||||||
@@ -647,7 +647,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => throw new NotImplementedException();
|
public void AaruNative() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -663,7 +663,7 @@ namespace AaruBenchmark
|
|||||||
// [NativeMemoryProfiler]
|
// [NativeMemoryProfiler]
|
||||||
public class Crc64Benchs
|
public class Crc64Benchs
|
||||||
{
|
{
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => throw new NotImplementedException();
|
public void Aaru() => throw new NotImplementedException();
|
||||||
|
|
||||||
@@ -672,7 +672,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => Checksums.AaruNative.Crc64();
|
public void AaruNative() => Checksums.AaruNative.Crc64();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Checksums.Aaru.Crc64();
|
public void Aaru() => Checksums.Aaru.Crc64();
|
||||||
|
|
||||||
@@ -681,7 +681,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => throw new NotImplementedException();
|
public void AaruNative() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
|
||||||
@@ -782,7 +782,7 @@ namespace AaruBenchmark
|
|||||||
// [NativeMemoryProfiler]
|
// [NativeMemoryProfiler]
|
||||||
public class SpamSumBenchs
|
public class SpamSumBenchs
|
||||||
{
|
{
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => throw new NotImplementedException();
|
public void Aaru() => throw new NotImplementedException();
|
||||||
|
|
||||||
@@ -791,7 +791,7 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => Checksums.AaruNative.SpamSum();
|
public void AaruNative() => Checksums.AaruNative.SpamSum();
|
||||||
#else
|
#else
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Aaru() => Checksums.Aaru.SpamSum();
|
public void Aaru() => Checksums.Aaru.SpamSum();
|
||||||
|
|
||||||
@@ -800,6 +800,6 @@ namespace AaruBenchmark
|
|||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void AaruNative() => throw new NotImplementedException();
|
public void AaruNative() => throw new NotImplementedException();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -10,19 +10,40 @@ namespace AaruBenchmark.Checksums
|
|||||||
{
|
{
|
||||||
public class Aaru
|
public class Aaru
|
||||||
{
|
{
|
||||||
static readonly byte[] _expectedRandomAdler32 = { 0x37, 0x28, 0xd1, 0x86 };
|
static readonly byte[] _expectedRandomAdler32 =
|
||||||
|
{
|
||||||
|
0x37, 0x28, 0xd1, 0x86
|
||||||
|
};
|
||||||
|
|
||||||
static readonly byte[] _expectedRandomFletcher16 = { 0x33, 0x57 };
|
static readonly byte[] _expectedRandomFletcher16 =
|
||||||
|
{
|
||||||
|
0x33, 0x57
|
||||||
|
};
|
||||||
|
|
||||||
static readonly byte[] _expectedRandomFletcher32 = { 0x21, 0x12, 0x61, 0xF5 };
|
static readonly byte[] _expectedRandomFletcher32 =
|
||||||
|
{
|
||||||
|
0x21, 0x12, 0x61, 0xF5
|
||||||
|
};
|
||||||
|
|
||||||
static readonly byte[] _expectedRandomCrc16Ccitt = { 0xC9, 0xBF };
|
static readonly byte[] _expectedRandomCrc16Ccitt =
|
||||||
|
{
|
||||||
|
0xC9, 0xBF
|
||||||
|
};
|
||||||
|
|
||||||
static readonly byte[] _expectedRandomCrc16 = { 0x2d, 0x6d };
|
static readonly byte[] _expectedRandomCrc16 =
|
||||||
|
{
|
||||||
|
0x2d, 0x6d
|
||||||
|
};
|
||||||
|
|
||||||
static readonly byte[] _expectedRandomCrc32 = { 0x2b, 0x6e, 0x68, 0x54 };
|
static readonly byte[] _expectedRandomCrc32 =
|
||||||
|
{
|
||||||
|
0x2b, 0x6e, 0x68, 0x54
|
||||||
|
};
|
||||||
|
|
||||||
static readonly byte[] _expectedRandomCrc64 = { 0xbf, 0x09, 0x99, 0x2c, 0xc5, 0xed, 0xe3, 0x8e };
|
static readonly byte[] _expectedRandomCrc64 =
|
||||||
|
{
|
||||||
|
0xbf, 0x09, 0x99, 0x2c, 0xc5, 0xed, 0xe3, 0x8e
|
||||||
|
};
|
||||||
|
|
||||||
static readonly byte[] _expectedRandomMd5 =
|
static readonly byte[] _expectedRandomMd5 =
|
||||||
{
|
{
|
||||||
@@ -31,29 +52,29 @@ namespace AaruBenchmark.Checksums
|
|||||||
|
|
||||||
static readonly byte[] _expectedRandomSha1 =
|
static readonly byte[] _expectedRandomSha1 =
|
||||||
{
|
{
|
||||||
0x72, 0x0d, 0x3b, 0x71, 0x7d, 0xe0, 0xc7, 0x4c, 0x77, 0xdd, 0x9c, 0xaa, 0x9e, 0xba, 0x50, 0x60, 0xdc,
|
0x72, 0x0d, 0x3b, 0x71, 0x7d, 0xe0, 0xc7, 0x4c, 0x77, 0xdd, 0x9c, 0xaa, 0x9e, 0xba, 0x50, 0x60, 0xdc, 0xbd,
|
||||||
0xbd, 0x28, 0x8d
|
0x28, 0x8d
|
||||||
};
|
};
|
||||||
|
|
||||||
static readonly byte[] _expectedRandomSha256 =
|
static readonly byte[] _expectedRandomSha256 =
|
||||||
{
|
{
|
||||||
0x4d, 0x1a, 0x6b, 0x8a, 0x54, 0x67, 0x00, 0xc4, 0x8e, 0xda, 0x70, 0xd3, 0x39, 0x1c, 0x8f, 0x15, 0x8a,
|
0x4d, 0x1a, 0x6b, 0x8a, 0x54, 0x67, 0x00, 0xc4, 0x8e, 0xda, 0x70, 0xd3, 0x39, 0x1c, 0x8f, 0x15, 0x8a, 0x8d,
|
||||||
0x8d, 0x12, 0xb2, 0x38, 0x92, 0x89, 0x29, 0x50, 0x47, 0x8c, 0x41, 0x8e, 0x25, 0xcc, 0x39
|
0x12, 0xb2, 0x38, 0x92, 0x89, 0x29, 0x50, 0x47, 0x8c, 0x41, 0x8e, 0x25, 0xcc, 0x39
|
||||||
};
|
};
|
||||||
|
|
||||||
static readonly byte[] _expectedRandomSha384 =
|
static readonly byte[] _expectedRandomSha384 =
|
||||||
{
|
{
|
||||||
0xdb, 0x53, 0x0e, 0x17, 0x9b, 0x81, 0xfe, 0x5f, 0x6d, 0x20, 0x41, 0x04, 0x6e, 0x77, 0xd9, 0x85, 0xf2,
|
0xdb, 0x53, 0x0e, 0x17, 0x9b, 0x81, 0xfe, 0x5f, 0x6d, 0x20, 0x41, 0x04, 0x6e, 0x77, 0xd9, 0x85, 0xf2, 0x85,
|
||||||
0x85, 0x8a, 0x66, 0xca, 0xd3, 0x8d, 0x1a, 0xd5, 0xac, 0x67, 0xa9, 0x74, 0xe1, 0xef, 0x3f, 0x4d, 0xdf,
|
0x8a, 0x66, 0xca, 0xd3, 0x8d, 0x1a, 0xd5, 0xac, 0x67, 0xa9, 0x74, 0xe1, 0xef, 0x3f, 0x4d, 0xdf, 0x94, 0x15,
|
||||||
0x94, 0x15, 0x2e, 0xac, 0x2e, 0xfe, 0x16, 0x95, 0x81, 0x54, 0xdc, 0x59, 0xd4, 0xc3
|
0x2e, 0xac, 0x2e, 0xfe, 0x16, 0x95, 0x81, 0x54, 0xdc, 0x59, 0xd4, 0xc3
|
||||||
};
|
};
|
||||||
|
|
||||||
static readonly byte[] _expectedRandomSha512 =
|
static readonly byte[] _expectedRandomSha512 =
|
||||||
{
|
{
|
||||||
0x6a, 0x0a, 0x18, 0xc2, 0xad, 0xf8, 0x83, 0xac, 0x58, 0xe6, 0x21, 0x96, 0xdb, 0x8d, 0x3d, 0x0e, 0xb9,
|
0x6a, 0x0a, 0x18, 0xc2, 0xad, 0xf8, 0x83, 0xac, 0x58, 0xe6, 0x21, 0x96, 0xdb, 0x8d, 0x3d, 0x0e, 0xb9, 0x87,
|
||||||
0x87, 0xd1, 0x49, 0x24, 0x97, 0xdb, 0x15, 0xb9, 0xfc, 0xcc, 0xb0, 0x36, 0xdf, 0x64, 0xae, 0xdb, 0x3e,
|
0xd1, 0x49, 0x24, 0x97, 0xdb, 0x15, 0xb9, 0xfc, 0xcc, 0xb0, 0x36, 0xdf, 0x64, 0xae, 0xdb, 0x3e, 0x82, 0xa0,
|
||||||
0x82, 0xa0, 0x4d, 0xdc, 0xd1, 0x37, 0x48, 0x92, 0x95, 0x51, 0xf9, 0xdd, 0xab, 0x82, 0xf4, 0x8a, 0x85,
|
0x4d, 0xdc, 0xd1, 0x37, 0x48, 0x92, 0x95, 0x51, 0xf9, 0xdd, 0xab, 0x82, 0xf4, 0x8a, 0x85, 0x3f, 0x9a, 0x01,
|
||||||
0x3f, 0x9a, 0x01, 0xb5, 0xf2, 0x8c, 0xbb, 0x4a, 0xa5, 0x1b, 0x40, 0x7c, 0xb6
|
0xb5, 0xf2, 0x8c, 0xbb, 0x4a, 0xa5, 0x1b, 0x40, 0x7c, 0xb6
|
||||||
};
|
};
|
||||||
|
|
||||||
public static void Fletcher16()
|
public static void Fletcher16()
|
||||||
@@ -69,8 +90,7 @@ namespace AaruBenchmark.Checksums
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomFletcher16.Length)
|
if(result?.Length != _expectedRandomFletcher16.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomFletcher16[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomFletcher16[i]).Any())
|
||||||
throw new Exception("Invalid hash value");
|
throw new Exception("Invalid hash value");
|
||||||
@@ -89,8 +109,7 @@ namespace AaruBenchmark.Checksums
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomFletcher32.Length)
|
if(result?.Length != _expectedRandomFletcher32.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomFletcher32[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomFletcher32[i]).Any())
|
||||||
throw new Exception("Invalid hash value");
|
throw new Exception("Invalid hash value");
|
||||||
@@ -109,11 +128,9 @@ namespace AaruBenchmark.Checksums
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomAdler32.Length)
|
if(result?.Length != _expectedRandomAdler32.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomAdler32[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomAdler32[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Crc16Ccitt()
|
public static void Crc16Ccitt()
|
||||||
@@ -129,8 +146,7 @@ namespace AaruBenchmark.Checksums
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomCrc16Ccitt.Length)
|
if(result?.Length != _expectedRandomCrc16Ccitt.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomCrc16Ccitt[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomCrc16Ccitt[i]).Any())
|
||||||
throw new Exception("Invalid hash value");
|
throw new Exception("Invalid hash value");
|
||||||
@@ -149,11 +165,9 @@ namespace AaruBenchmark.Checksums
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomCrc16.Length)
|
if(result?.Length != _expectedRandomCrc16.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomCrc16[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomCrc16[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Crc32()
|
public static void Crc32()
|
||||||
@@ -169,11 +183,9 @@ namespace AaruBenchmark.Checksums
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomCrc32.Length)
|
if(result?.Length != _expectedRandomCrc32.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomCrc32[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomCrc32[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Crc64()
|
public static void Crc64()
|
||||||
@@ -189,11 +201,9 @@ namespace AaruBenchmark.Checksums
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomCrc64.Length)
|
if(result?.Length != _expectedRandomCrc64.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomCrc64[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomCrc64[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Md5()
|
public static void Md5()
|
||||||
@@ -209,11 +219,9 @@ namespace AaruBenchmark.Checksums
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomMd5.Length)
|
if(result?.Length != _expectedRandomMd5.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomMd5[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomMd5[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SpamSum()
|
public static void SpamSum()
|
||||||
@@ -243,11 +251,9 @@ namespace AaruBenchmark.Checksums
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomSha1.Length)
|
if(result?.Length != _expectedRandomSha1.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomSha1[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomSha1[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Sha256()
|
public static void Sha256()
|
||||||
@@ -263,11 +269,9 @@ namespace AaruBenchmark.Checksums
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomSha256.Length)
|
if(result?.Length != _expectedRandomSha256.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomSha256[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomSha256[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Sha384()
|
public static void Sha384()
|
||||||
@@ -283,11 +287,9 @@ namespace AaruBenchmark.Checksums
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomSha384.Length)
|
if(result?.Length != _expectedRandomSha384.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomSha384[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomSha384[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Sha512()
|
public static void Sha512()
|
||||||
@@ -303,11 +305,9 @@ namespace AaruBenchmark.Checksums
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomSha512.Length)
|
if(result?.Length != _expectedRandomSha512.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomSha512[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomSha512[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -80,7 +80,7 @@ public class Aaru6
|
|||||||
{
|
{
|
||||||
Native.ForceManaged = true;
|
Native.ForceManaged = true;
|
||||||
|
|
||||||
byte[] data = new byte[1048576];
|
var data = new byte[1048576];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -91,18 +91,16 @@ public class Aaru6
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomFletcher16.Length)
|
if(result?.Length != _expectedRandomFletcher16.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomFletcher16[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomFletcher16[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Fletcher32()
|
public static void Fletcher32()
|
||||||
{
|
{
|
||||||
Native.ForceManaged = true;
|
Native.ForceManaged = true;
|
||||||
|
|
||||||
byte[] data = new byte[1048576];
|
var data = new byte[1048576];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -113,18 +111,16 @@ public class Aaru6
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomFletcher32.Length)
|
if(result?.Length != _expectedRandomFletcher32.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomFletcher32[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomFletcher32[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Adler32()
|
public static void Adler32()
|
||||||
{
|
{
|
||||||
Native.ForceManaged = true;
|
Native.ForceManaged = true;
|
||||||
|
|
||||||
byte[] data = new byte[1048576];
|
var data = new byte[1048576];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -135,18 +131,16 @@ public class Aaru6
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomAdler32.Length)
|
if(result?.Length != _expectedRandomAdler32.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomAdler32[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomAdler32[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Crc16Ccitt()
|
public static void Crc16Ccitt()
|
||||||
{
|
{
|
||||||
Native.ForceManaged = true;
|
Native.ForceManaged = true;
|
||||||
|
|
||||||
byte[] data = new byte[1048576];
|
var data = new byte[1048576];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -157,18 +151,16 @@ public class Aaru6
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomCrc16Ccitt.Length)
|
if(result?.Length != _expectedRandomCrc16Ccitt.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomCrc16Ccitt[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomCrc16Ccitt[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Crc16()
|
public static void Crc16()
|
||||||
{
|
{
|
||||||
Native.ForceManaged = true;
|
Native.ForceManaged = true;
|
||||||
|
|
||||||
byte[] data = new byte[1048576];
|
var data = new byte[1048576];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -179,18 +171,16 @@ public class Aaru6
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomCrc16.Length)
|
if(result?.Length != _expectedRandomCrc16.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomCrc16[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomCrc16[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Crc32()
|
public static void Crc32()
|
||||||
{
|
{
|
||||||
Native.ForceManaged = true;
|
Native.ForceManaged = true;
|
||||||
|
|
||||||
byte[] data = new byte[1048576];
|
var data = new byte[1048576];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -201,18 +191,16 @@ public class Aaru6
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomCrc32.Length)
|
if(result?.Length != _expectedRandomCrc32.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomCrc32[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomCrc32[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Crc64()
|
public static void Crc64()
|
||||||
{
|
{
|
||||||
Native.ForceManaged = true;
|
Native.ForceManaged = true;
|
||||||
|
|
||||||
byte[] data = new byte[1048576];
|
var data = new byte[1048576];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -223,16 +211,14 @@ public class Aaru6
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomCrc64.Length)
|
if(result?.Length != _expectedRandomCrc64.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomCrc64[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomCrc64[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SpamSum()
|
public static void SpamSum()
|
||||||
{
|
{
|
||||||
byte[] data = new byte[1048576];
|
var data = new byte[1048576];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ public class AaruNative
|
|||||||
{
|
{
|
||||||
Native.ForceManaged = false;
|
Native.ForceManaged = false;
|
||||||
|
|
||||||
byte[] data = new byte[1048576];
|
var data = new byte[1048576];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -104,18 +104,16 @@ public class AaruNative
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomFletcher16.Length)
|
if(result?.Length != _expectedRandomFletcher16.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomFletcher16[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomFletcher16[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Fletcher32()
|
public static void Fletcher32()
|
||||||
{
|
{
|
||||||
Native.ForceManaged = false;
|
Native.ForceManaged = false;
|
||||||
|
|
||||||
byte[] data = new byte[1048576];
|
var data = new byte[1048576];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -126,18 +124,16 @@ public class AaruNative
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomFletcher32.Length)
|
if(result?.Length != _expectedRandomFletcher32.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomFletcher32[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomFletcher32[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Adler32()
|
public static void Adler32()
|
||||||
{
|
{
|
||||||
Native.ForceManaged = false;
|
Native.ForceManaged = false;
|
||||||
|
|
||||||
byte[] data = new byte[1048576];
|
var data = new byte[1048576];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -148,18 +144,16 @@ public class AaruNative
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomAdler32.Length)
|
if(result?.Length != _expectedRandomAdler32.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomAdler32[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomAdler32[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Crc16Ccitt()
|
public static void Crc16Ccitt()
|
||||||
{
|
{
|
||||||
Native.ForceManaged = false;
|
Native.ForceManaged = false;
|
||||||
|
|
||||||
byte[] data = new byte[1048576];
|
var data = new byte[1048576];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -170,18 +164,16 @@ public class AaruNative
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomCrc16Ccitt.Length)
|
if(result?.Length != _expectedRandomCrc16Ccitt.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomCrc16Ccitt[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomCrc16Ccitt[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Crc16()
|
public static void Crc16()
|
||||||
{
|
{
|
||||||
Native.ForceManaged = false;
|
Native.ForceManaged = false;
|
||||||
|
|
||||||
byte[] data = new byte[1048576];
|
var data = new byte[1048576];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -192,18 +184,16 @@ public class AaruNative
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomCrc16.Length)
|
if(result?.Length != _expectedRandomCrc16.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomCrc16[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomCrc16[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Crc32()
|
public static void Crc32()
|
||||||
{
|
{
|
||||||
Native.ForceManaged = false;
|
Native.ForceManaged = false;
|
||||||
|
|
||||||
byte[] data = new byte[1048576];
|
var data = new byte[1048576];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -214,18 +204,16 @@ public class AaruNative
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomCrc32.Length)
|
if(result?.Length != _expectedRandomCrc32.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomCrc32[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomCrc32[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Crc64()
|
public static void Crc64()
|
||||||
{
|
{
|
||||||
Native.ForceManaged = false;
|
Native.ForceManaged = false;
|
||||||
|
|
||||||
byte[] data = new byte[1048576];
|
var data = new byte[1048576];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -236,17 +224,15 @@ public class AaruNative
|
|||||||
ctx.Update(data);
|
ctx.Update(data);
|
||||||
byte[] result = ctx.Final();
|
byte[] result = ctx.Final();
|
||||||
|
|
||||||
if(result?.Length != _expectedRandomCrc64.Length)
|
if(result?.Length != _expectedRandomCrc64.Length) throw new Exception("Invalid hash length");
|
||||||
throw new Exception("Invalid hash length");
|
|
||||||
|
|
||||||
if(result.Where((t, i) => t != _expectedRandomCrc64[i]).Any())
|
if(result.Where((t, i) => t != _expectedRandomCrc64[i]).Any()) throw new Exception("Invalid hash value");
|
||||||
throw new Exception("Invalid hash value");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SpamSum()
|
public static void SpamSum()
|
||||||
{
|
{
|
||||||
byte[] data = new byte[1048576];
|
var data = new byte[1048576];
|
||||||
byte[] hash = new byte[256];
|
var hash = new byte[256];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "random"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -256,18 +242,15 @@ public class AaruNative
|
|||||||
|
|
||||||
IntPtr ctx = spamsum_init();
|
IntPtr ctx = spamsum_init();
|
||||||
|
|
||||||
if(ctx == IntPtr.Zero)
|
if(ctx == IntPtr.Zero) throw new Exception("Could not initialize digest");
|
||||||
throw new Exception("Could not initialize digest");
|
|
||||||
|
|
||||||
int ret = spamsum_update(ctx, data, (uint)data.Length);
|
int ret = spamsum_update(ctx, data, (uint)data.Length);
|
||||||
|
|
||||||
if(ret != 0)
|
if(ret != 0) throw new Exception("Could not digest block");
|
||||||
throw new Exception("Could not digest block");
|
|
||||||
|
|
||||||
ret = spamsum_final(ctx, hash);
|
ret = spamsum_final(ctx, hash);
|
||||||
|
|
||||||
if(ret != 0)
|
if(ret != 0) throw new Exception("Could not finalize block");
|
||||||
throw new Exception("Could not finalize block");
|
|
||||||
|
|
||||||
spamsum_free(ctx);
|
spamsum_free(ctx);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
|
using System.IO;
|
||||||
|
using Aaru.Compression;
|
||||||
|
using CUETools.Codecs;
|
||||||
|
using CUETools.Codecs.Flake;
|
||||||
#if NET8_0_OR_GREATER
|
#if NET8_0_OR_GREATER
|
||||||
using Aaru6.Checksums;
|
using Aaru6.Checksums;
|
||||||
#else
|
#else
|
||||||
using Aaru.Checksums;
|
using Aaru.Checksums;
|
||||||
#endif
|
#endif
|
||||||
using System.IO;
|
|
||||||
using Aaru.Compression;
|
|
||||||
using CUETools.Codecs;
|
|
||||||
using CUETools.Codecs.Flake;
|
|
||||||
|
|
||||||
// ReSharper disable ArrangeNamespaceBody
|
// ReSharper disable ArrangeNamespaceBody
|
||||||
|
|
||||||
@@ -30,13 +30,11 @@ namespace AaruBenchmark.Compression
|
|||||||
|
|
||||||
var rle = new AppleRle(new MemoryStream(input));
|
var rle = new AppleRle(new MemoryStream(input));
|
||||||
|
|
||||||
for(var i = 0; i < bufferSize; i++)
|
for(var i = 0; i < bufferSize; i++) output[i] = (byte)rle.ProduceByte();
|
||||||
output[i] = (byte)rle.ProduceByte();
|
|
||||||
|
|
||||||
string crc = Crc32Context.Data(output, out _);
|
string crc = Crc32Context.Data(output, out _);
|
||||||
|
|
||||||
if(crc != "3525ef06")
|
if(crc != "3525ef06") throw new InvalidDataException("Incorrect decompressed checksum");
|
||||||
throw new InvalidDataException("Incorrect decompressed checksum");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void TeleDiskLzh()
|
public static void TeleDiskLzh()
|
||||||
@@ -58,24 +56,20 @@ namespace AaruBenchmark.Compression
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if((rd = lzh.Decode(out byte[] obuf, bufsz)) > 0)
|
if((rd = lzh.Decode(out byte[] obuf, bufsz)) > 0) outMs.Write(obuf, 0, rd);
|
||||||
outMs.Write(obuf, 0, rd);
|
|
||||||
|
|
||||||
total_rd += rd;
|
total_rd += rd;
|
||||||
} while(rd == bufsz);
|
} while(rd == bufsz);
|
||||||
|
|
||||||
byte[] output = outMs.ToArray();
|
byte[] output = outMs.ToArray();
|
||||||
|
|
||||||
if(total_rd != 39820)
|
if(total_rd != 39820) throw new InvalidDataException("Incorrect decompressed data");
|
||||||
throw new InvalidDataException("Incorrect decompressed data");
|
|
||||||
|
|
||||||
if(output.Length != 39820)
|
if(output.Length != 39820) throw new InvalidDataException("Incorrect decompressed data");
|
||||||
throw new InvalidDataException("Incorrect decompressed data");
|
|
||||||
|
|
||||||
string crc = Crc32Context.Data(output, out _);
|
string crc = Crc32Context.Data(output, out _);
|
||||||
|
|
||||||
if(crc != "22bd5d44")
|
if(crc != "22bd5d44") throw new InvalidDataException("Incorrect decompressed checksum");
|
||||||
throw new InvalidDataException("Incorrect decompressed checksum");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Flac()
|
public static void Flac()
|
||||||
@@ -91,8 +85,7 @@ namespace AaruBenchmark.Compression
|
|||||||
|
|
||||||
string crc = Crc32Context.Data(block, out _);
|
string crc = Crc32Context.Data(block, out _);
|
||||||
|
|
||||||
if(crc != "dfbc99bb")
|
if(crc != "dfbc99bb") throw new InvalidDataException("Incorrect decompressed checksum");
|
||||||
throw new InvalidDataException("Incorrect decompressed checksum");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void CompressFlac()
|
public static void CompressFlac()
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ public class Aaru6Compressions
|
|||||||
public static void AppleRle()
|
public static void AppleRle()
|
||||||
{
|
{
|
||||||
const int bufferSize = 32768;
|
const int bufferSize = 32768;
|
||||||
byte[] input = new byte[1102];
|
var input = new byte[1102];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "apple_rle.bin"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "apple_rle.bin"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -18,24 +18,22 @@ public class Aaru6Compressions
|
|||||||
fs.Close();
|
fs.Close();
|
||||||
fs.Dispose();
|
fs.Dispose();
|
||||||
|
|
||||||
byte[] output = new byte[bufferSize];
|
var output = new byte[bufferSize];
|
||||||
|
|
||||||
int realSize = Aaru6.Compression.AppleRle.DecodeBuffer(input, output);
|
int realSize = Aaru6.Compression.AppleRle.DecodeBuffer(input, output);
|
||||||
|
|
||||||
if(realSize != 20960)
|
if(realSize != 20960) throw new InvalidDataException("Incorrect decompressed size");
|
||||||
throw new InvalidDataException("Incorrect decompressed size");
|
|
||||||
|
|
||||||
string crc = Crc32Context.Data(output, (uint)realSize, out _);
|
string crc = Crc32Context.Data(output, (uint)realSize, out _);
|
||||||
|
|
||||||
if(crc != "3525ef06")
|
if(crc != "3525ef06") throw new InvalidDataException("Incorrect decompressed checksum");
|
||||||
throw new InvalidDataException("Incorrect decompressed checksum");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void TeleDiskLzh()
|
public static void TeleDiskLzh()
|
||||||
{
|
{
|
||||||
const int bufsz = 512;
|
const int bufsz = 512;
|
||||||
|
|
||||||
byte[] input = new byte[9040];
|
var input = new byte[9040];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "teledisk_lzh.bin"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "teledisk_lzh.bin"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -44,36 +42,32 @@ public class Aaru6Compressions
|
|||||||
fs.Dispose();
|
fs.Dispose();
|
||||||
|
|
||||||
int rd;
|
int rd;
|
||||||
int total_rd = 0;
|
var total_rd = 0;
|
||||||
var lzh = new TeleDiskLzh(new MemoryStream(input));
|
var lzh = new TeleDiskLzh(new MemoryStream(input));
|
||||||
var outMs = new MemoryStream();
|
var outMs = new MemoryStream();
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if((rd = lzh.Decode(out byte[] obuf, bufsz)) > 0)
|
if((rd = lzh.Decode(out byte[] obuf, bufsz)) > 0) outMs.Write(obuf, 0, rd);
|
||||||
outMs.Write(obuf, 0, rd);
|
|
||||||
|
|
||||||
total_rd += rd;
|
total_rd += rd;
|
||||||
} while(rd == bufsz);
|
} while(rd == bufsz);
|
||||||
|
|
||||||
byte[] output = outMs.ToArray();
|
byte[] output = outMs.ToArray();
|
||||||
|
|
||||||
if(total_rd != 39820)
|
if(total_rd != 39820) throw new InvalidDataException("Incorrect decompressed data");
|
||||||
throw new InvalidDataException("Incorrect decompressed data");
|
|
||||||
|
|
||||||
if(output.Length != 39820)
|
if(output.Length != 39820) throw new InvalidDataException("Incorrect decompressed data");
|
||||||
throw new InvalidDataException("Incorrect decompressed data");
|
|
||||||
|
|
||||||
string crc = Crc32Context.Data(output, out _);
|
string crc = Crc32Context.Data(output, out _);
|
||||||
|
|
||||||
if(crc != "22bd5d44")
|
if(crc != "22bd5d44") throw new InvalidDataException("Incorrect decompressed checksum");
|
||||||
throw new InvalidDataException("Incorrect decompressed checksum");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ADC()
|
public static void ADC()
|
||||||
{
|
{
|
||||||
const int bufferSize = 262144;
|
const int bufferSize = 262144;
|
||||||
byte[] input = new byte[34367];
|
var input = new byte[34367];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "adc.bin"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "adc.bin"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -81,17 +75,15 @@ public class Aaru6Compressions
|
|||||||
fs.Close();
|
fs.Close();
|
||||||
fs.Dispose();
|
fs.Dispose();
|
||||||
|
|
||||||
byte[] output = new byte[bufferSize];
|
var output = new byte[bufferSize];
|
||||||
|
|
||||||
int realSize = Aaru6.Compression.ADC.DecodeBuffer(input, output);
|
int realSize = Aaru6.Compression.ADC.DecodeBuffer(input, output);
|
||||||
|
|
||||||
if(realSize != 262144)
|
if(realSize != 262144) throw new InvalidDataException("Incorrect decompressed size");
|
||||||
throw new InvalidDataException("Incorrect decompressed size");
|
|
||||||
|
|
||||||
string crc = Crc32Context.Data(output, (uint)realSize, out _);
|
string crc = Crc32Context.Data(output, (uint)realSize, out _);
|
||||||
|
|
||||||
if(crc != "5a5a7388")
|
if(crc != "5a5a7388") throw new InvalidDataException("Incorrect decompressed checksum");
|
||||||
throw new InvalidDataException("Incorrect decompressed checksum");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -17,31 +17,31 @@ public class AaruNative
|
|||||||
|
|
||||||
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
||||||
static extern nuint AARU_flac_decode_redbook_buffer(byte[] dst_buffer, nuint dst_size, byte[] src_buffer,
|
static extern nuint AARU_flac_decode_redbook_buffer(byte[] dst_buffer, nuint dst_size, byte[] src_buffer,
|
||||||
nuint src_size);
|
nuint src_size);
|
||||||
|
|
||||||
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
||||||
static extern nuint AARU_flac_encode_redbook_buffer(byte[] dst_buffer, nuint dst_size, byte[] src_buffer,
|
static extern nuint AARU_flac_encode_redbook_buffer(byte[] dst_buffer, nuint dst_size, byte[] src_buffer,
|
||||||
nuint src_size, uint blocksize, int do_mid_side_stereo,
|
nuint src_size, uint blocksize, int do_mid_side_stereo,
|
||||||
int loose_mid_side_stereo, string apodization,
|
int loose_mid_side_stereo, string apodization,
|
||||||
uint max_lpc_order, uint qlp_coeff_precision,
|
uint max_lpc_order, uint qlp_coeff_precision,
|
||||||
int do_qlp_coeff_prec_search, int do_exhaustive_model_search,
|
int do_qlp_coeff_prec_search, int do_exhaustive_model_search,
|
||||||
uint min_residual_partition_order,
|
uint min_residual_partition_order,
|
||||||
uint max_residual_partition_order, string application_id,
|
uint max_residual_partition_order, string application_id,
|
||||||
uint application_id_len);
|
uint application_id_len);
|
||||||
|
|
||||||
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
||||||
static extern int AARU_lzip_decode_buffer(byte[] dst_buffer, int dst_size, byte[] src_buffer, int src_size);
|
static extern int AARU_lzip_decode_buffer(byte[] dst_buffer, int dst_size, byte[] src_buffer, int src_size);
|
||||||
|
|
||||||
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
||||||
static extern int AARU_lzip_encode_buffer(byte[] dst_buffer, int dst_size, byte[] src_buffer, int src_size,
|
static extern int AARU_lzip_encode_buffer(byte[] dst_buffer, int dst_size, byte[] src_buffer, int src_size,
|
||||||
int dictionary_size, int match_len_limit);
|
int dictionary_size, int match_len_limit);
|
||||||
|
|
||||||
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
||||||
static extern int AARU_bzip2_decode_buffer(byte[] dst_buffer, ref uint dst_size, byte[] src_buffer, uint src_size);
|
static extern int AARU_bzip2_decode_buffer(byte[] dst_buffer, ref uint dst_size, byte[] src_buffer, uint src_size);
|
||||||
|
|
||||||
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
||||||
static extern int AARU_bzip2_encode_buffer(byte[] dst_buffer, ref uint dst_size, byte[] src_buffer, uint src_size,
|
static extern int AARU_bzip2_encode_buffer(byte[] dst_buffer, ref uint dst_size, byte[] src_buffer, uint src_size,
|
||||||
int blockSize100k);
|
int blockSize100k);
|
||||||
|
|
||||||
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
||||||
static extern nuint AARU_lzfse_decode_buffer(byte[] dst_buffer, nuint dst_size, byte[] src_buffer, nuint src_size,
|
static extern nuint AARU_lzfse_decode_buffer(byte[] dst_buffer, nuint dst_size, byte[] src_buffer, nuint src_size,
|
||||||
@@ -52,25 +52,25 @@ public class AaruNative
|
|||||||
byte[] scratch_buffer);
|
byte[] scratch_buffer);
|
||||||
|
|
||||||
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
||||||
static extern int AARU_lzma_decode_buffer(byte[] dst_buffer, ref nuint dst_size, byte[] src_buffer,
|
static extern int AARU_lzma_decode_buffer(byte[] dst_buffer, ref nuint dst_size, byte[] src_buffer,
|
||||||
ref nuint src_size, byte[] props, nuint propsSize);
|
ref nuint src_size, byte[] props, nuint propsSize);
|
||||||
|
|
||||||
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
||||||
static extern int AARU_lzma_encode_buffer(byte[] dst_buffer, ref nuint dst_size, byte[] src_buffer, nuint src_size,
|
static extern int AARU_lzma_encode_buffer(byte[] dst_buffer, ref nuint dst_size, byte[] src_buffer, nuint src_size,
|
||||||
byte[] outProps, ref nuint outPropsSize, int level, uint dictSize, int lc,
|
byte[] outProps, ref nuint outPropsSize, int level, uint dictSize, int lc,
|
||||||
int lp, int pb, int fb, int numThreads);
|
int lp, int pb, int fb, int numThreads);
|
||||||
|
|
||||||
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
||||||
static extern nuint AARU_zstd_decode_buffer(byte[] dst_buffer, nuint dst_size, byte[] src_buffer, nuint src_size);
|
static extern nuint AARU_zstd_decode_buffer(byte[] dst_buffer, nuint dst_size, byte[] src_buffer, nuint src_size);
|
||||||
|
|
||||||
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
[DllImport("libAaru.Compression.Native", SetLastError = true)]
|
||||||
static extern nuint AARU_zstd_encode_buffer(byte[] dst_buffer, nuint dst_size, byte[] src_buffer, nuint src_size,
|
static extern nuint AARU_zstd_encode_buffer(byte[] dst_buffer, nuint dst_size, byte[] src_buffer, nuint src_size,
|
||||||
int compressionLevel);
|
int compressionLevel);
|
||||||
|
|
||||||
public static void AppleRle()
|
public static void AppleRle()
|
||||||
{
|
{
|
||||||
const int bufferSize = 32768;
|
const int bufferSize = 32768;
|
||||||
byte[] input = new byte[1102];
|
var input = new byte[1102];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "apple_rle.bin"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "apple_rle.bin"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -78,23 +78,21 @@ public class AaruNative
|
|||||||
fs.Close();
|
fs.Close();
|
||||||
fs.Dispose();
|
fs.Dispose();
|
||||||
|
|
||||||
byte[] output = new byte[bufferSize];
|
var output = new byte[bufferSize];
|
||||||
|
|
||||||
int realSize = AARU_apple_rle_decode_buffer(output, output.Length, input, input.Length);
|
int realSize = AARU_apple_rle_decode_buffer(output, output.Length, input, input.Length);
|
||||||
|
|
||||||
if(realSize != 20960)
|
if(realSize != 20960) throw new InvalidDataException("Incorrect decompressed size");
|
||||||
throw new InvalidDataException("Incorrect decompressed size");
|
|
||||||
|
|
||||||
string crc = Crc32Context.Data(output, (uint)realSize, out _);
|
string crc = Crc32Context.Data(output, (uint)realSize, out _);
|
||||||
|
|
||||||
if(crc != "3525ef06")
|
if(crc != "3525ef06") throw new InvalidDataException("Incorrect decompressed checksum");
|
||||||
throw new InvalidDataException("Incorrect decompressed checksum");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ADC()
|
public static void ADC()
|
||||||
{
|
{
|
||||||
const int bufferSize = 327680;
|
const int bufferSize = 327680;
|
||||||
byte[] input = new byte[34367];
|
var input = new byte[34367];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "adc.bin"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "adc.bin"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -102,23 +100,21 @@ public class AaruNative
|
|||||||
fs.Close();
|
fs.Close();
|
||||||
fs.Dispose();
|
fs.Dispose();
|
||||||
|
|
||||||
byte[] output = new byte[bufferSize];
|
var output = new byte[bufferSize];
|
||||||
|
|
||||||
int realSize = AARU_adc_decode_buffer(output, output.Length, input, input.Length);
|
int realSize = AARU_adc_decode_buffer(output, output.Length, input, input.Length);
|
||||||
|
|
||||||
if(realSize != 262144)
|
if(realSize != 262144) throw new InvalidDataException("Incorrect decompressed size");
|
||||||
throw new InvalidDataException("Incorrect decompressed size");
|
|
||||||
|
|
||||||
string crc = Crc32Context.Data(output, (uint)realSize, out _);
|
string crc = Crc32Context.Data(output, (uint)realSize, out _);
|
||||||
|
|
||||||
if(crc != "5a5a7388")
|
if(crc != "5a5a7388") throw new InvalidDataException("Incorrect decompressed checksum");
|
||||||
throw new InvalidDataException("Incorrect decompressed checksum");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Bzip2()
|
public static void Bzip2()
|
||||||
{
|
{
|
||||||
const int bufferSize = 1048576;
|
const int bufferSize = 1048576;
|
||||||
byte[] input = new byte[1053934];
|
var input = new byte[1053934];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "bzip2.bz2"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "bzip2.bz2"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -126,28 +122,26 @@ public class AaruNative
|
|||||||
fs.Close();
|
fs.Close();
|
||||||
fs.Dispose();
|
fs.Dispose();
|
||||||
|
|
||||||
byte[] output = new byte[bufferSize];
|
var output = new byte[bufferSize];
|
||||||
|
|
||||||
uint realSize = (uint)output.Length;
|
var realSize = (uint)output.Length;
|
||||||
int bzError = AARU_bzip2_decode_buffer(output, ref realSize, input, (uint)input.Length);
|
int bzError = AARU_bzip2_decode_buffer(output, ref realSize, input, (uint)input.Length);
|
||||||
|
|
||||||
if(realSize != 1048576)
|
if(realSize != 1048576) throw new InvalidDataException("Incorrect decompressed size");
|
||||||
throw new InvalidDataException("Incorrect decompressed size");
|
|
||||||
|
|
||||||
string crc = Crc32Context.Data(output, realSize, out _);
|
string crc = Crc32Context.Data(output, realSize, out _);
|
||||||
|
|
||||||
if(crc != "c64059c0")
|
if(crc != "c64059c0") throw new InvalidDataException("Incorrect decompressed checksum");
|
||||||
throw new InvalidDataException("Incorrect decompressed checksum");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void CompressBzip2()
|
public static void CompressBzip2()
|
||||||
{
|
{
|
||||||
var dataStream = new FileStream(Path.Combine(Program.Folder, "data.bin"), FileMode.Open, FileAccess.Read);
|
var dataStream = new FileStream(Path.Combine(Program.Folder, "data.bin"), FileMode.Open, FileAccess.Read);
|
||||||
byte[] decompressed = new byte[8388608];
|
var decompressed = new byte[8388608];
|
||||||
dataStream.Read(decompressed, 0, decompressed.Length);
|
dataStream.Read(decompressed, 0, decompressed.Length);
|
||||||
dataStream.Close();
|
dataStream.Close();
|
||||||
byte[] backendBuffer = new byte[8388608];
|
var backendBuffer = new byte[8388608];
|
||||||
uint cmpSize = (uint)backendBuffer.Length;
|
var cmpSize = (uint)backendBuffer.Length;
|
||||||
|
|
||||||
AARU_bzip2_encode_buffer(backendBuffer, ref cmpSize, decompressed, (uint)decompressed.Length, 9);
|
AARU_bzip2_encode_buffer(backendBuffer, ref cmpSize, decompressed, (uint)decompressed.Length, 9);
|
||||||
|
|
||||||
@@ -166,7 +160,7 @@ public class AaruNative
|
|||||||
public static void Lzip()
|
public static void Lzip()
|
||||||
{
|
{
|
||||||
const int bufferSize = 1048576;
|
const int bufferSize = 1048576;
|
||||||
byte[] input = new byte[1062874];
|
var input = new byte[1062874];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "lzip.lz"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "lzip.lz"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -174,27 +168,25 @@ public class AaruNative
|
|||||||
fs.Close();
|
fs.Close();
|
||||||
fs.Dispose();
|
fs.Dispose();
|
||||||
|
|
||||||
byte[] output = new byte[bufferSize];
|
var output = new byte[bufferSize];
|
||||||
|
|
||||||
int realSize = AARU_lzip_decode_buffer(output, output.Length, input, input.Length);
|
int realSize = AARU_lzip_decode_buffer(output, output.Length, input, input.Length);
|
||||||
|
|
||||||
if(realSize != 1048576)
|
if(realSize != 1048576) throw new InvalidDataException("Incorrect decompressed size");
|
||||||
throw new InvalidDataException("Incorrect decompressed size");
|
|
||||||
|
|
||||||
string crc = Crc32Context.Data(output, (uint)realSize, out _);
|
string crc = Crc32Context.Data(output, (uint)realSize, out _);
|
||||||
|
|
||||||
if(crc != "c64059c0")
|
if(crc != "c64059c0") throw new InvalidDataException("Incorrect decompressed checksum");
|
||||||
throw new InvalidDataException("Incorrect decompressed checksum");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void CompressLzip()
|
public static void CompressLzip()
|
||||||
{
|
{
|
||||||
var dataStream = new FileStream(Path.Combine(Program.Folder, "data.bin"), FileMode.Open, FileAccess.Read);
|
var dataStream = new FileStream(Path.Combine(Program.Folder, "data.bin"), FileMode.Open, FileAccess.Read);
|
||||||
byte[] decompressed = new byte[8388608];
|
var decompressed = new byte[8388608];
|
||||||
dataStream.Read(decompressed, 0, decompressed.Length);
|
dataStream.Read(decompressed, 0, decompressed.Length);
|
||||||
dataStream.Close();
|
dataStream.Close();
|
||||||
byte[] backendBuffer = new byte[8388608];
|
var backendBuffer = new byte[8388608];
|
||||||
int cmpSize = backendBuffer.Length;
|
int cmpSize = backendBuffer.Length;
|
||||||
|
|
||||||
cmpSize = AARU_lzip_encode_buffer(backendBuffer, cmpSize, decompressed, decompressed.Length, 106496, 32);
|
cmpSize = AARU_lzip_encode_buffer(backendBuffer, cmpSize, decompressed, decompressed.Length, 106496, 32);
|
||||||
|
|
||||||
@@ -213,7 +205,7 @@ public class AaruNative
|
|||||||
public static void Lzma()
|
public static void Lzma()
|
||||||
{
|
{
|
||||||
const int bufferSize = 8388608;
|
const int bufferSize = 8388608;
|
||||||
byte[] input = new byte[1200275];
|
var input = new byte[1200275];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "lzma.bin"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "lzma.bin"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -221,41 +213,54 @@ public class AaruNative
|
|||||||
fs.Close();
|
fs.Close();
|
||||||
fs.Dispose();
|
fs.Dispose();
|
||||||
|
|
||||||
byte[] output = new byte[bufferSize];
|
var output = new byte[bufferSize];
|
||||||
|
|
||||||
nuint destLen = bufferSize;
|
nuint destLen = bufferSize;
|
||||||
nuint srcLen = 1200275;
|
nuint srcLen = 1200275;
|
||||||
|
|
||||||
int err = AARU_lzma_decode_buffer(output, ref destLen, input, ref srcLen, new byte[]
|
int err = AARU_lzma_decode_buffer(output,
|
||||||
{
|
ref destLen,
|
||||||
0x5D, 0x00, 0x00, 0x00, 0x02
|
input,
|
||||||
}, 5);
|
ref srcLen,
|
||||||
|
new byte[]
|
||||||
|
{
|
||||||
|
0x5D, 0x00, 0x00, 0x00, 0x02
|
||||||
|
},
|
||||||
|
5);
|
||||||
|
|
||||||
if(err != 0)
|
if(err != 0) throw new InvalidDataException("Error decompressing");
|
||||||
throw new InvalidDataException("Error decompressing");
|
|
||||||
|
|
||||||
if(destLen != 8388608)
|
if(destLen != 8388608) throw new InvalidDataException("Incorrect decompressed size");
|
||||||
throw new InvalidDataException("Incorrect decompressed size");
|
|
||||||
|
|
||||||
string crc = Crc32Context.Data(output, (uint)destLen, out _);
|
string crc = Crc32Context.Data(output, (uint)destLen, out _);
|
||||||
|
|
||||||
if(crc != "954bf76e")
|
if(crc != "954bf76e") throw new InvalidDataException("Incorrect decompressed checksum");
|
||||||
throw new InvalidDataException("Incorrect decompressed checksum");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void CompressLzma()
|
public static void CompressLzma()
|
||||||
{
|
{
|
||||||
byte[] props = new byte[5];
|
var props = new byte[5];
|
||||||
var dataStream = new FileStream(Path.Combine(Program.Folder, "data.bin"), FileMode.Open, FileAccess.Read);
|
var dataStream = new FileStream(Path.Combine(Program.Folder, "data.bin"), FileMode.Open, FileAccess.Read);
|
||||||
byte[] decompressed = new byte[8388608];
|
var decompressed = new byte[8388608];
|
||||||
dataStream.Read(decompressed, 0, decompressed.Length);
|
dataStream.Read(decompressed, 0, decompressed.Length);
|
||||||
dataStream.Close();
|
dataStream.Close();
|
||||||
byte[] backendBuffer = new byte[8388608];
|
var backendBuffer = new byte[8388608];
|
||||||
nuint cmpSize = (uint)backendBuffer.Length;
|
nuint cmpSize = (uint)backendBuffer.Length;
|
||||||
nuint propsSize = (uint)props.Length;
|
nuint propsSize = (uint)props.Length;
|
||||||
|
|
||||||
AARU_lzma_encode_buffer(backendBuffer, ref cmpSize, decompressed, (nuint)decompressed.Length, props,
|
AARU_lzma_encode_buffer(backendBuffer,
|
||||||
ref propsSize, 9, 1048576, 4, 0, 2, 273, 2);
|
ref cmpSize,
|
||||||
|
decompressed,
|
||||||
|
(nuint)decompressed.Length,
|
||||||
|
props,
|
||||||
|
ref propsSize,
|
||||||
|
9,
|
||||||
|
1048576,
|
||||||
|
4,
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
273,
|
||||||
|
2);
|
||||||
|
|
||||||
/* This is just to test integrity, disabled for benchmarking
|
/* This is just to test integrity, disabled for benchmarking
|
||||||
byte[] compressed = new byte[decompressed.Length];
|
byte[] compressed = new byte[decompressed.Length];
|
||||||
@@ -272,7 +277,7 @@ public class AaruNative
|
|||||||
public static void Flac()
|
public static void Flac()
|
||||||
{
|
{
|
||||||
const int bufferSize = 9633792;
|
const int bufferSize = 9633792;
|
||||||
byte[] input = new byte[6534197];
|
var input = new byte[6534197];
|
||||||
|
|
||||||
var fs = new FileStream(Path.Combine(Program.Folder, "flac.flac"), FileMode.Open, FileAccess.Read);
|
var fs = new FileStream(Path.Combine(Program.Folder, "flac.flac"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
@@ -280,30 +285,41 @@ public class AaruNative
|
|||||||
fs.Close();
|
fs.Close();
|
||||||
fs.Dispose();
|
fs.Dispose();
|
||||||
|
|
||||||
byte[] output = new byte[bufferSize];
|
var output = new byte[bufferSize];
|
||||||
|
|
||||||
ulong realSize = AARU_flac_decode_redbook_buffer(output, (nuint)output.Length, input, (nuint)input.Length);
|
ulong realSize = AARU_flac_decode_redbook_buffer(output, (nuint)output.Length, input, (nuint)input.Length);
|
||||||
|
|
||||||
if(realSize != 9633792)
|
if(realSize != 9633792) throw new InvalidDataException("Incorrect decompressed size");
|
||||||
throw new InvalidDataException("Incorrect decompressed size");
|
|
||||||
|
|
||||||
string crc = Crc32Context.Data(output, (uint)realSize, out _);
|
string crc = Crc32Context.Data(output, (uint)realSize, out _);
|
||||||
|
|
||||||
if(crc != "dfbc99bb")
|
if(crc != "dfbc99bb") throw new InvalidDataException("Incorrect decompressed checksum");
|
||||||
throw new InvalidDataException("Incorrect decompressed checksum");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void CompressFlac()
|
public static void CompressFlac()
|
||||||
{
|
{
|
||||||
var dataStream = new FileStream(Path.Combine(Program.Folder, "audio.bin"), FileMode.Open, FileAccess.Read);
|
var dataStream = new FileStream(Path.Combine(Program.Folder, "audio.bin"), FileMode.Open, FileAccess.Read);
|
||||||
byte[] decompressed = new byte[9633792];
|
var decompressed = new byte[9633792];
|
||||||
dataStream.Read(decompressed, 0, decompressed.Length);
|
dataStream.Read(decompressed, 0, decompressed.Length);
|
||||||
dataStream.Close();
|
dataStream.Close();
|
||||||
byte[] backendBuffer = new byte[9633792];
|
var backendBuffer = new byte[9633792];
|
||||||
nuint cmpSize = (uint)backendBuffer.Length;
|
nuint cmpSize = (uint)backendBuffer.Length;
|
||||||
|
|
||||||
AARU_flac_encode_redbook_buffer(backendBuffer, cmpSize, decompressed, (nuint)decompressed.Length, 4608, 1, 0,
|
AARU_flac_encode_redbook_buffer(backendBuffer,
|
||||||
"hamming", 12, 15, 1, 0, 0, 8, "Aaru.Compression.Native.Tests",
|
cmpSize,
|
||||||
|
decompressed,
|
||||||
|
(nuint)decompressed.Length,
|
||||||
|
4608,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
"hamming",
|
||||||
|
12,
|
||||||
|
15,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
8,
|
||||||
|
"Aaru.Compression.Native.Tests",
|
||||||
(uint)"Aaru.Compression.Native.Tests".Length);
|
(uint)"Aaru.Compression.Native.Tests".Length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,8 +22,7 @@ namespace AaruBenchmark.Compression
|
|||||||
|
|
||||||
if(done == 0)
|
if(done == 0)
|
||||||
{
|
{
|
||||||
if(oneZero)
|
if(oneZero) throw new IOException("Could not read the file!");
|
||||||
throw new IOException("Could not read the file!");
|
|
||||||
|
|
||||||
oneZero = true;
|
oneZero = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,8 +22,7 @@ namespace AaruBenchmark.Compression
|
|||||||
|
|
||||||
if(done == 0)
|
if(done == 0)
|
||||||
{
|
{
|
||||||
if(oneZero)
|
if(oneZero) throw new IOException("Could not read the file!");
|
||||||
throw new IOException("Could not read the file!");
|
|
||||||
|
|
||||||
oneZero = true;
|
oneZero = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
#if NET8_0_OR_GREATER
|
|
||||||
using Aaru6.Checksums;
|
|
||||||
#else
|
|
||||||
using Aaru.Checksums;
|
|
||||||
#endif
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using SharpCompress.Compressors;
|
using SharpCompress.Compressors;
|
||||||
using SharpCompress.Compressors.ADC;
|
using SharpCompress.Compressors.ADC;
|
||||||
using SharpCompress.Compressors.BZip2;
|
using SharpCompress.Compressors.BZip2;
|
||||||
using SharpCompress.Compressors.Deflate;
|
using SharpCompress.Compressors.Deflate;
|
||||||
using SharpCompress.Compressors.LZMA;
|
using SharpCompress.Compressors.LZMA;
|
||||||
|
#if NET8_0_OR_GREATER
|
||||||
|
using Aaru6.Checksums;
|
||||||
|
#else
|
||||||
|
using Aaru.Checksums;
|
||||||
|
#endif
|
||||||
|
|
||||||
// ReSharper disable ArrangeNamespaceBody
|
// ReSharper disable ArrangeNamespaceBody
|
||||||
|
|
||||||
@@ -31,8 +31,7 @@ namespace AaruBenchmark.Compression
|
|||||||
|
|
||||||
if(done == 0)
|
if(done == 0)
|
||||||
{
|
{
|
||||||
if(oneZero)
|
if(oneZero) throw new IOException("Could not read the file!");
|
||||||
throw new IOException("Could not read the file!");
|
|
||||||
|
|
||||||
oneZero = true;
|
oneZero = true;
|
||||||
}
|
}
|
||||||
@@ -53,7 +52,8 @@ namespace AaruBenchmark.Compression
|
|||||||
dataStream.Close();
|
dataStream.Close();
|
||||||
var backendBuffer = new byte[8388608];
|
var backendBuffer = new byte[8388608];
|
||||||
|
|
||||||
Stream cmpStream = new GZipStream(new MemoryStream(backendBuffer), CompressionMode.Compress,
|
Stream cmpStream = new GZipStream(new MemoryStream(backendBuffer),
|
||||||
|
CompressionMode.Compress,
|
||||||
CompressionLevel.Level9);
|
CompressionLevel.Level9);
|
||||||
|
|
||||||
cmpStream.Write(decompressed, 0, decompressed.Length);
|
cmpStream.Write(decompressed, 0, decompressed.Length);
|
||||||
@@ -104,8 +104,7 @@ namespace AaruBenchmark.Compression
|
|||||||
|
|
||||||
if(done == 0)
|
if(done == 0)
|
||||||
{
|
{
|
||||||
if(oneZero)
|
if(oneZero) throw new IOException("Could not read the file!");
|
||||||
throw new IOException("Could not read the file!");
|
|
||||||
|
|
||||||
oneZero = true;
|
oneZero = true;
|
||||||
}
|
}
|
||||||
@@ -175,8 +174,7 @@ namespace AaruBenchmark.Compression
|
|||||||
|
|
||||||
if(done == 0)
|
if(done == 0)
|
||||||
{
|
{
|
||||||
if(oneZero)
|
if(oneZero) throw new IOException("Could not read the file!");
|
||||||
throw new IOException("Could not read the file!");
|
|
||||||
|
|
||||||
oneZero = true;
|
oneZero = true;
|
||||||
}
|
}
|
||||||
@@ -190,8 +188,7 @@ namespace AaruBenchmark.Compression
|
|||||||
|
|
||||||
string crc = Crc32Context.Data(compressed, 262144, out _);
|
string crc = Crc32Context.Data(compressed, 262144, out _);
|
||||||
|
|
||||||
if(crc != "5a5a7388")
|
if(crc != "5a5a7388") throw new InvalidDataException("Incorrect decompressed checksum");
|
||||||
throw new InvalidDataException("Incorrect decompressed checksum");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Lzip()
|
public static void Lzip()
|
||||||
@@ -209,8 +206,7 @@ namespace AaruBenchmark.Compression
|
|||||||
|
|
||||||
if(done == 0)
|
if(done == 0)
|
||||||
{
|
{
|
||||||
if(oneZero)
|
if(oneZero) throw new IOException("Could not read the file!");
|
||||||
throw new IOException("Could not read the file!");
|
|
||||||
|
|
||||||
oneZero = true;
|
oneZero = true;
|
||||||
}
|
}
|
||||||
@@ -224,8 +220,7 @@ namespace AaruBenchmark.Compression
|
|||||||
|
|
||||||
string crc = Crc32Context.Data(compressed, 1048576, out _);
|
string crc = Crc32Context.Data(compressed, 1048576, out _);
|
||||||
|
|
||||||
if(crc != "c64059c0")
|
if(crc != "c64059c0") throw new InvalidDataException("Incorrect decompressed checksum");
|
||||||
throw new InvalidDataException("Incorrect decompressed checksum");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void CompressLzip()
|
public static void CompressLzip()
|
||||||
@@ -274,7 +269,11 @@ namespace AaruBenchmark.Compression
|
|||||||
{
|
{
|
||||||
var _dataStream = new FileStream(Path.Combine(Program.Folder, "lzma.bin"), FileMode.Open, FileAccess.Read);
|
var _dataStream = new FileStream(Path.Combine(Program.Folder, "lzma.bin"), FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
Stream str = new LzmaStream(new byte[] { 0x5D, 0x00, 0x00, 0x00, 0x02 }, _dataStream);
|
Stream str = new LzmaStream(new byte[]
|
||||||
|
{
|
||||||
|
0x5D, 0x00, 0x00, 0x00, 0x02
|
||||||
|
},
|
||||||
|
_dataStream);
|
||||||
|
|
||||||
var compressed = new byte[8388608];
|
var compressed = new byte[8388608];
|
||||||
var pos = 0;
|
var pos = 0;
|
||||||
@@ -287,8 +286,7 @@ namespace AaruBenchmark.Compression
|
|||||||
|
|
||||||
if(done == 0)
|
if(done == 0)
|
||||||
{
|
{
|
||||||
if(oneZero)
|
if(oneZero) throw new IOException("Could not read the file!");
|
||||||
throw new IOException("Could not read the file!");
|
|
||||||
|
|
||||||
oneZero = true;
|
oneZero = true;
|
||||||
}
|
}
|
||||||
@@ -302,8 +300,7 @@ namespace AaruBenchmark.Compression
|
|||||||
|
|
||||||
string crc = Crc32Context.Data(compressed, 8388608, out _);
|
string crc = Crc32Context.Data(compressed, 8388608, out _);
|
||||||
|
|
||||||
if(crc != "954bf76e")
|
if(crc != "954bf76e") throw new InvalidDataException("Incorrect decompressed checksum");
|
||||||
throw new InvalidDataException("Incorrect decompressed checksum");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void CompressLzma()
|
public static void CompressLzma()
|
||||||
@@ -314,7 +311,8 @@ namespace AaruBenchmark.Compression
|
|||||||
dataStream.Close();
|
dataStream.Close();
|
||||||
var backendBuffer = new byte[8388608];
|
var backendBuffer = new byte[8388608];
|
||||||
|
|
||||||
var cmpStream = new LzmaStream(new LzmaEncoderProperties(true, 1048576, 273), false,
|
var cmpStream = new LzmaStream(new LzmaEncoderProperties(true, 1048576, 273),
|
||||||
|
false,
|
||||||
new MemoryStream(backendBuffer));
|
new MemoryStream(backendBuffer));
|
||||||
|
|
||||||
var propertiesArray = new byte[cmpStream.Properties.Length];
|
var propertiesArray = new byte[cmpStream.Properties.Length];
|
||||||
|
|||||||
1
codealike.json
Normal file
1
codealike.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"projectId":"386ac6e7-ebc2-4f87-af50-0eb05c4ac15b","projectName":"AaruBenchmark"}
|
||||||
Reference in New Issue
Block a user