From 09572095fae3bcba0a6c0969f3901d21a2e4dbc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Sim=C3=B5es?= Date: Fri, 27 Oct 2023 20:56:12 +0100 Subject: [PATCH] Initial version --- .github/workflows/pr-checks.yml | 18 ++++ .github/workflows/update-dependencies.yml | 21 ++++ .github_changelog_generator | 13 +++ .runsettings | 17 +++ CHANGELOG.md | 0 LICENSE.md | 21 ++++ NuGet.Config | 7 ++ README.md | 40 +++++++ System.IO.Hashing/Crc32.cs | 100 ++++++++++++++++++ System.IO.Hashing/Properties/AssemblyInfo.cs | 22 ++++ System.IO.Hashing/System.IO.Hashing.nfproj | 72 +++++++++++++ System.IO.Hashing/packages.config | 5 + System.IO.Hashing/packages.lock.json | 19 ++++ Tests/System.IO.HashingTests/Crc32Tests.cs | 74 +++++++++++++ .../Properties/AssemblyInfo.cs | 31 ++++++ .../System.IO.HashingTests.nfproj | 54 ++++++++++ Tests/System.IO.HashingTests/packages.config | 6 ++ .../System.IO.HashingTests/packages.lock.json | 25 +++++ assets/nf-logo.png | Bin 0 -> 9200 bytes assets/readme.txt | 21 ++++ azure-pipelines.yml | 64 ++++++++--- config/SignClient.json | 14 +++ config/filelist.txt | 1 + key.snk | Bin 0 -> 596 bytes nanoFramework.System.IO.Hashing.nuspec | 37 +++++++ nanoFramework.System.IO.Hashing.sln | 47 ++++++++ version.json | 24 +++++ 27 files changed, 741 insertions(+), 12 deletions(-) create mode 100644 .github/workflows/pr-checks.yml create mode 100644 .github/workflows/update-dependencies.yml create mode 100644 .github_changelog_generator create mode 100644 .runsettings create mode 100644 CHANGELOG.md create mode 100644 LICENSE.md create mode 100644 NuGet.Config create mode 100644 README.md create mode 100644 System.IO.Hashing/Crc32.cs create mode 100644 System.IO.Hashing/Properties/AssemblyInfo.cs create mode 100644 System.IO.Hashing/System.IO.Hashing.nfproj create mode 100644 System.IO.Hashing/packages.config create mode 100644 System.IO.Hashing/packages.lock.json create mode 100644 Tests/System.IO.HashingTests/Crc32Tests.cs create mode 100644 Tests/System.IO.HashingTests/Properties/AssemblyInfo.cs create mode 100644 Tests/System.IO.HashingTests/System.IO.HashingTests.nfproj create mode 100644 Tests/System.IO.HashingTests/packages.config create mode 100644 Tests/System.IO.HashingTests/packages.lock.json create mode 100644 assets/nf-logo.png create mode 100644 assets/readme.txt create mode 100644 config/SignClient.json create mode 100644 config/filelist.txt create mode 100644 key.snk create mode 100644 nanoFramework.System.IO.Hashing.nuspec create mode 100644 nanoFramework.System.IO.Hashing.sln create mode 100644 version.json diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/pr-checks.yml new file mode 100644 index 0000000..a530836 --- /dev/null +++ b/.github/workflows/pr-checks.yml @@ -0,0 +1,18 @@ +# Copyright (c) .NET Foundation and Contributors +# See LICENSE file in the project root for full license information. + +name: PR Checks + +on: + pull_request: + +jobs: + check_package_lock: + name: nanoFramework + uses: nanoframework/nf-tools/.github/workflows/check-package-lock.yml@main + check_nuget_latest: + name: nanoFramework + uses: nanoframework/nf-tools/.github/workflows/check-packages-updated.yml@main + secrets: inherit + with: + solution: 'nanoFramework.System.IO.Hashing.sln' diff --git a/.github/workflows/update-dependencies.yml b/.github/workflows/update-dependencies.yml new file mode 100644 index 0000000..a799a8f --- /dev/null +++ b/.github/workflows/update-dependencies.yml @@ -0,0 +1,21 @@ +# Copyright (c) .NET Foundation and Contributors +# See LICENSE file in the project root for full license information. + +# This workflow will periodically check .NET nanoFramework dependencies and updates them in the repository it's running. + +name: Daily update dependencies + +on: + schedule: + # At 00:10 UTC. + - cron: '00 10 * * Mon,Thu' + repository_dispatch: + types: update-dependencies + +jobs: + update-dependencies: + name: nanoFramework + uses: nanoframework/nf-tools/.github/workflows/update-dependencies.yml@main + secrets: inherit + with: + solutionsToCheck: 'nanoFramework.System.IO.Hashing.sln' diff --git a/.github_changelog_generator b/.github_changelog_generator new file mode 100644 index 0000000..f3844e6 --- /dev/null +++ b/.github_changelog_generator @@ -0,0 +1,13 @@ +user=nanoframework +project=nanoFramework.System.IO.Hashing +issues=true +add_issues_wo_labels=false +add_pr_wo_labels=false +add_issues_wo_labels=false +filter_issues_by_milestone=false +exclude_labels=Area: Config-and-Build,Area: Infrastructure-and-Organization,reverted +enhancement_labels=Type: enhancement +bug_labels=Type: bug +merge_prefix=**Documentation and other chores:** +unreleased_label=**Changes available only in 'Preview' NuGet packages:** +author=false diff --git a/.runsettings b/.runsettings new file mode 100644 index 0000000..75f9622 --- /dev/null +++ b/.runsettings @@ -0,0 +1,17 @@ + + + + + .\TestResults + 120000 + net48 + x64 + + + None + True + COM15 + + + + \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..e69de29 diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..94286c9 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) .NET Foundation and Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/NuGet.Config b/NuGet.Config new file mode 100644 index 0000000..ef0bacf --- /dev/null +++ b/NuGet.Config @@ -0,0 +1,7 @@ + + + + + + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..6435162 --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=nanoframework_System.IO.Hashing&metric=alert_status)](https://sonarcloud.io/dashboard?id=nanoframework_System.IO.Hashing) [![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=nanoframework_System.IO.Hashing&metric=reliability_rating)](https://sonarcloud.io/dashboard?id=nanoframework_System.IO.Hashing) [![NuGet](https://img.shields.io/nuget/dt/nanoFramework.System.IO.Hashing.svg?label=NuGet&style=flat&logo=nuget)](https://www.nuget.org/packages/nanoFramework.System.IO.Hashing/) [![#yourfirstpr](https://img.shields.io/badge/first--timers--only-friendly-blue.svg)](https://github.com/nanoframework/Home/blob/main/CONTRIBUTING.md) [![Discord](https://img.shields.io/discord/478725473862549535.svg?logo=discord&logoColor=white&label=Discord&color=7289DA)](https://discord.gg/gCyBu8T) + +![nanoFramework logo](https://raw.githubusercontent.com/nanoframework/Home/main/resources/logo/nanoFramework-repo-logo.png) + +----- + +### Welcome to the .NET **nanoFramework** System.IO.Hashing Library repository + +This repository contains the nanoFramework System.IO.Hashing class library. + +## Build status + +| Component | Build Status | NuGet Package | +|:-|---|---| +| System.IO.Hashing | [![Build Status](https://dev.azure.com/nanoframework/System.IO.Hashing/_apis/build/status%2Fnanoframework.System.IO.Hashing?branchName=main)](https://dev.azure.com/nanoframework/System.IO.Hashing/_build/latest?definitionId=102&branchName=main) | [![NuGet](https://img.shields.io/nuget/v/nanoFramework.System.IO.Hashing.svg?label=NuGet&style=flat&logo=nuget)](https://www.nuget.org/packages/nanoFramework.System.IO.Hashing/) | + +## System.IO.Hashing usage + +## Feedback and documentation + +For documentation, providing feedback, issues and finding out how to contribute please refer to the [Home repo](https://github.com/nanoframework/Home). + +Join our Discord community [here](https://discord.gg/gCyBu8T). + +## Credits + +The list of contributors to this project can be found at [CONTRIBUTORS](https://github.com/nanoframework/Home/blob/main/CONTRIBUTORS.md). + +## License + +The **nanoFramework** Class Libraries are licensed under the [MIT license](LICENSE.md). + +## Code of Conduct + +This project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behaviour in our community. +For more information see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct). + +### .NET Foundation + +This project is supported by the [.NET Foundation](https://dotnetfoundation.org). diff --git a/System.IO.Hashing/Crc32.cs b/System.IO.Hashing/Crc32.cs new file mode 100644 index 0000000..f1879a1 --- /dev/null +++ b/System.IO.Hashing/Crc32.cs @@ -0,0 +1,100 @@ +// +// Copyright (c) .NET Foundation and Contributors +// Portions Copyright (c) Microsoft Corporation. All rights reserved. +// See LICENSE file in the project root for full license information. +// + +using System.Runtime.CompilerServices; + +namespace System.IO.Hashing +{ + /// + /// Provides an implementation of the CRC-32 algorithm, as used in + /// ITU-T V.42 and IEEE 802.3. + /// + /// + /// + /// If the platform or target doesn't support Hardware Crc32 computation it will offer a software implementation. + /// + /// + /// For methods that return byte arrays or that write into spans of bytes, this implementation + /// emits the answer in the Little Endian byte order so that the CRC residue relationship + /// (CRC(message concat CRC(message))) is a fixed value) holds. + /// For CRC-32 this stable output is the byte sequence { 0x1C, 0xDF, 0x44, 0x21 }, + /// the Little Endian representation of 0x2144DF1C. + /// + /// + /// There are multiple, incompatible, definitions of a 32-bit cyclic redundancy + /// check (CRC) algorithm. When interoperating with another system, ensure that you + /// are using the same definition. The definition used by this implementation is not + /// compatible with the cyclic redundancy check described in ITU-T I.363.5. + /// + /// + public class Crc32 + { + private const uint InitialState = 0xFFFF_FFFF; + private uint _crc = InitialState; + + /// + /// Initializes a new instance of the class. + /// + public Crc32() + { + } + + /// + /// Appends the contents of to the data already processed for the current hash computation. + /// + /// The data to process. + public void Append(SpanByte source) + { + _crc = ComputeHash( + _crc, + source); + } + + /// + /// Appends the contents of to the data already processed for the current hash computation. + /// + /// The data to process. + public void Append(byte[] source) + { + _crc = ComputeHash( + _crc, + new SpanByte(source)); + } + + /// + /// Appends to the data already processed for the current hash computation. + /// + /// The to process. + public void Append(byte value) + { + _crc = ComputeHash( + _crc, + new byte[] { value }); + } + + /// + /// Resets the hash computation to the initial state. + /// + public void Reset() + { + _crc = InitialState; + } + + /// Gets the current computed hash value without modifying accumulated state. + /// The hash value for the data already provided. + public uint GetCurrentHashAsUInt32() => _crc ^ InitialState; + + /// Computes the CRC-32 hash of the provided data. + /// The data to hash. + /// The computed CRC-32 hash. + public static uint HashToUInt32(SpanByte source) => ComputeHash(InitialState, source) ^ InitialState; + + [MethodImpl(MethodImplOptions.InternalCall)] + extern private static uint ComputeHash( + uint crc, + SpanByte source); + } +} diff --git a/System.IO.Hashing/Properties/AssemblyInfo.cs b/System.IO.Hashing/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..175fbaa --- /dev/null +++ b/System.IO.Hashing/Properties/AssemblyInfo.cs @@ -0,0 +1,22 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("nanoFramework.System.IO.Hashing")] +[assembly: AssemblyCompany("nanoFramework Contributors")] +[assembly: AssemblyProduct("nanoFramework.System.IO.Hashing")] +[assembly: AssemblyCopyright("Copyright (c) .NET Foundation and Contributors")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +///////////////////////////////////////////////////////////////// +// This attribute is mandatory when building Interop libraries // +// update this whenever the native assembly signature changes // +[assembly: AssemblyNativeVersion("100.0.0.1")] +///////////////////////////////////////////////////////////////// diff --git a/System.IO.Hashing/System.IO.Hashing.nfproj b/System.IO.Hashing/System.IO.Hashing.nfproj new file mode 100644 index 0000000..0122bd4 --- /dev/null +++ b/System.IO.Hashing/System.IO.Hashing.nfproj @@ -0,0 +1,72 @@ + + + + + $(MSBuildExtensionsPath)\nanoFramework\v1.0\ + + + + Debug + AnyCPU + {11A8DD76-328B-46DF-9F39-F559912D0360};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + a05ef804-3fb8-42d1-8e0a-4d0002502755 + Library + Properties + 512 + System.IO.Hashing + nanoFramework.System.IO.Hashing + v1.0 + True + bin\$(Configuration)\nanoFramework.System.IO.Hashing.xml + true + true + + + true + + + ..\key.snk + + + false + + + + bin\$(Configuration)\Stubs + nf_sys_io_hashing + nanoFramework.System.IO.Hashing + + + + false + + + + + + + + + + ..\packages\nanoFramework.CoreLibrary.1.14.2\lib\mscorlib.dll + + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105.The missing file is {0}. + + + + + + \ No newline at end of file diff --git a/System.IO.Hashing/packages.config b/System.IO.Hashing/packages.config new file mode 100644 index 0000000..75b7f06 --- /dev/null +++ b/System.IO.Hashing/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/System.IO.Hashing/packages.lock.json b/System.IO.Hashing/packages.lock.json new file mode 100644 index 0000000..b80edcb --- /dev/null +++ b/System.IO.Hashing/packages.lock.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "dependencies": { + ".NETnanoFramework,Version=v1.0": { + "nanoFramework.CoreLibrary": { + "type": "Direct", + "requested": "[1.14.2, 1.14.2]", + "resolved": "1.14.2", + "contentHash": "j1mrz4mitl5LItvmHMsw1aHzCAfvTTgIkRxA0mhs5mSpctJ/BBcuNwua5j3MspfRNKreCQPy/qZy/D9ADLL/PA==" + }, + "Nerdbank.GitVersioning": { + "type": "Direct", + "requested": "[3.6.133, 3.6.133]", + "resolved": "3.6.133", + "contentHash": "VZWMd5YAeDxpjWjAP/X6bAxnRMiEf6tES/ITN0X5CHJgkWLLeHGmEALivmTAfYM6P+P/3Szy6VCITUAkqjcHVw==" + } + } + } +} \ No newline at end of file diff --git a/Tests/System.IO.HashingTests/Crc32Tests.cs b/Tests/System.IO.HashingTests/Crc32Tests.cs new file mode 100644 index 0000000..a711446 --- /dev/null +++ b/Tests/System.IO.HashingTests/Crc32Tests.cs @@ -0,0 +1,74 @@ +// +// Copyright (c) .NET Foundation and Contributors +// Portions Copyright (c) Microsoft Corporation. All rights reserved. +// See LICENSE file in the project root for full license information. +// + +using nanoFramework.TestFramework; +using System.Collections; +using System.IO.Hashing; +using System.Text; + +namespace Crc32Tests +{ + [TestClass] + public class Crc32Tests + { + static ArrayList _testData = new() + { + new byte[] { }, + new byte[] { 0x01 }, + new byte[] { 0x00, 0x00, 0x00, 0x00 }, + new byte[] { 0xFF, 0xFF, 0xFF, 0xFF }, + new byte[] { 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x26, 0x39, 0xF4, 0xCB }, + new byte[] { 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0xD9, 0xC6, 0x0B, 0x34 }, + Encoding.UTF8.GetBytes("a"), + Encoding.UTF8.GetBytes("abc"), + Encoding.UTF8.GetBytes("The quick brown fox jumps over the lazy dog") + }; + + [DataRow("Empty", 0, 0u)] + [DataRow("One", 1, 0xA505DF1Bu)] + [DataRow("Zero-Residue", 2, 0x2144DF1Cu)] + [DataRow("Zero-InverseResidue", 3, 0xFFFFFFFFu)] + [DataRow("Self-test residue", 4, 0x2144DF1Cu)] + [DataRow("Self-test inverse residue", 5, 0xFFFFFFFFu)] + [DataRow("String a", 6, 0xE8B7BE43u)] + [DataRow("String abc", 7, 0x352441C2u)] + [DataRow("String message digest", 8, 0x414FA339u)] + [TestMethod] + public void TestByteArrayHashing_00( + string testName, + int dataIndex, + uint hash) + { + OutputHelper.WriteLine($"Test: {testName}"); + + var crc32 = new Crc32(); + + crc32.Append((byte[])_testData[dataIndex]); + Assert.AreEqual(hash, crc32.GetCurrentHashAsUInt32()); + } + + [DataRow("Empty", 0, 0u)] + [DataRow("One", 1, 0xA505DF1Bu)] + [DataRow("Zero-Residue", 2, 0x2144DF1Cu)] + [DataRow("Zero-InverseResidue", 3, 0xFFFFFFFFu)] + [DataRow("Self-test residue", 4, 0x2144DF1Cu)] + [DataRow("Self-test inverse residue", 5, 0xFFFFFFFFu)] + [DataRow("String a", 6, 0xE8B7BE43u)] + [DataRow("String abc", 7, 0x352441C2u)] + [DataRow("String message digest", 8, 0x414FA339u)] + [TestMethod] + public void TestByteArrayHashing_01( + string testName, + int dataIndex, + uint hash) + { + OutputHelper.WriteLine($"Test: {testName}"); + + var computedHash = Crc32.HashToUInt32((byte[])_testData[dataIndex]); + Assert.AreEqual(hash, computedHash); + } + } +} diff --git a/Tests/System.IO.HashingTests/Properties/AssemblyInfo.cs b/Tests/System.IO.HashingTests/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..a3735af --- /dev/null +++ b/Tests/System.IO.HashingTests/Properties/AssemblyInfo.cs @@ -0,0 +1,31 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyCopyright("Copyright (c) 2021 nanoFramework contributors")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Tests/System.IO.HashingTests/System.IO.HashingTests.nfproj b/Tests/System.IO.HashingTests/System.IO.HashingTests.nfproj new file mode 100644 index 0000000..27ca2f4 --- /dev/null +++ b/Tests/System.IO.HashingTests/System.IO.HashingTests.nfproj @@ -0,0 +1,54 @@ + + + + $(MSBuildExtensionsPath)\nanoFramework\v1.0\ + + + + + + + Debug + AnyCPU + {11A8DD76-328B-46DF-9F39-F559912D0360};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 164e2d6c-8e81-47c7-93f2-98898e36b0cd + Library + Properties + 512 + Crc32Tests + NFUnitTest + False + true + UnitTest + v1.0 + + + + $(SolutionDir)\.runsettings + + + + + + + + ..\..\packages\nanoFramework.CoreLibrary.1.14.2\lib\mscorlib.dll + + + ..\..\packages\nanoFramework.System.Text.1.2.37\lib\nanoFramework.System.Text.dll + + + ..\..\packages\nanoFramework.TestFramework.2.1.85\lib\nanoFramework.TestFramework.dll + + + ..\..\packages\nanoFramework.TestFramework.2.1.85\lib\nanoFramework.UnitTestLauncher.exe + + + + + + + + + + \ No newline at end of file diff --git a/Tests/System.IO.HashingTests/packages.config b/Tests/System.IO.HashingTests/packages.config new file mode 100644 index 0000000..f45895e --- /dev/null +++ b/Tests/System.IO.HashingTests/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Tests/System.IO.HashingTests/packages.lock.json b/Tests/System.IO.HashingTests/packages.lock.json new file mode 100644 index 0000000..d5213a1 --- /dev/null +++ b/Tests/System.IO.HashingTests/packages.lock.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "dependencies": { + ".NETnanoFramework,Version=v1.0": { + "nanoFramework.CoreLibrary": { + "type": "Direct", + "requested": "[1.14.2, 1.14.2]", + "resolved": "1.14.2", + "contentHash": "j1mrz4mitl5LItvmHMsw1aHzCAfvTTgIkRxA0mhs5mSpctJ/BBcuNwua5j3MspfRNKreCQPy/qZy/D9ADLL/PA==" + }, + "nanoFramework.System.Text": { + "type": "Direct", + "requested": "[1.2.37, 1.2.37]", + "resolved": "1.2.37", + "contentHash": "ORgRq0HSynSBhlXRTHdhzZiOdq/nRhdnX+DeIGw56y9OSc8dvqUz6elm97Jz+4WQ6ikpvs5PFGINAa35kBebwQ==" + }, + "nanoFramework.TestFramework": { + "type": "Direct", + "requested": "[2.1.85, 2.1.85]", + "resolved": "2.1.85", + "contentHash": "UAydT9MgZfufPcLpn5KbFZkR3ul6zSt9ERYDPDen7IWxeT+fGpRTes8QTWfhgMsxF3E27b3wI6K6wwWQkeGuFQ==" + } + } + } +} \ No newline at end of file diff --git a/assets/nf-logo.png b/assets/nf-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..572c4ff374c386db1a9c1e670f4c880ed4ccec63 GIT binary patch literal 9200 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 literal 0 HcmV?d00001 diff --git a/nanoFramework.System.IO.Hashing.nuspec b/nanoFramework.System.IO.Hashing.nuspec new file mode 100644 index 0000000..ddf4fa3 --- /dev/null +++ b/nanoFramework.System.IO.Hashing.nuspec @@ -0,0 +1,37 @@ + + + + nanoFramework.System.IO.Hashing + $version$ + nanoFramework.System.IO.Hashing + nanoframework + false + LICENSE.md + + + docs\README.md + false + https://github.com/nanoframework/System.IO.Hashing + images\nf-logo.png + + Copyright (c) .NET Foundation and Contributors + This package includes the nanoFramework System.IO.Hashing assembly for .NET nanoFramework C# projects. +This package requires a target with nanoFramework.System.IO.Hashing v$nativeVersion$ (checksum $checksum$). + nanoFramework C# csharp netmf netnf + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/nanoFramework.System.IO.Hashing.sln b/nanoFramework.System.IO.Hashing.sln new file mode 100644 index 0000000..6152426 --- /dev/null +++ b/nanoFramework.System.IO.Hashing.sln @@ -0,0 +1,47 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.7.34024.191 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{7B20F2BC-2DD3-42C3-AE9B-01F5F558ADFE}" +EndProject +Project("{11A8DD76-328B-46DF-9F39-F559912D0360}") = "System.IO.HashingTests", "Tests\System.IO.HashingTests\System.IO.HashingTests.nfproj", "{164E2D6C-8E81-47C7-93F2-98898E36B0CD}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{49C02042-2EA7-4EC8-B341-473EC5CBE2BE}" + ProjectSection(SolutionItems) = preProject + .runsettings = .runsettings + NuGet.Config = NuGet.Config + version.json = version.json + EndProjectSection +EndProject +Project("{11A8DD76-328B-46DF-9F39-F559912D0360}") = "System.IO.Hashing", "System.IO.Hashing\System.IO.Hashing.nfproj", "{A05EF804-3FB8-42D1-8E0A-4D0002502755}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {164E2D6C-8E81-47C7-93F2-98898E36B0CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {164E2D6C-8E81-47C7-93F2-98898E36B0CD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {164E2D6C-8E81-47C7-93F2-98898E36B0CD}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {164E2D6C-8E81-47C7-93F2-98898E36B0CD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {164E2D6C-8E81-47C7-93F2-98898E36B0CD}.Release|Any CPU.Build.0 = Release|Any CPU + {164E2D6C-8E81-47C7-93F2-98898E36B0CD}.Release|Any CPU.Deploy.0 = Release|Any CPU + {A05EF804-3FB8-42D1-8E0A-4D0002502755}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A05EF804-3FB8-42D1-8E0A-4D0002502755}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A05EF804-3FB8-42D1-8E0A-4D0002502755}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {A05EF804-3FB8-42D1-8E0A-4D0002502755}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A05EF804-3FB8-42D1-8E0A-4D0002502755}.Release|Any CPU.Build.0 = Release|Any CPU + {A05EF804-3FB8-42D1-8E0A-4D0002502755}.Release|Any CPU.Deploy.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {164E2D6C-8E81-47C7-93F2-98898E36B0CD} = {7B20F2BC-2DD3-42C3-AE9B-01F5F558ADFE} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {FBF8F1F8-8AB4-4305-8E5D-E8E20849D22B} + EndGlobalSection +EndGlobal diff --git a/version.json b/version.json new file mode 100644 index 0000000..fdf769d --- /dev/null +++ b/version.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", + "version": "1.0", + "assemblyVersion": { + "precision": "build" + }, + "semVer1NumericIdentifierPadding": 3, + "nuGetPackageVersion": { + "semVer": 2.0 + }, + "publicReleaseRefSpec": [ + "^refs/heads/develop$", + "^refs/heads/main$", + "^refs/heads/v\\d+(?:\\.\\d+)?$" + ], + "cloudBuild": { + "setAllVariables": true + }, + "release": { + "branchName": "release-v{version}", + "versionIncrement": "build", + "firstUnstableTag": "preview" + } +}