| File: System\Security\Cryptography\Cose\HashToBeSignedBuilder.cs | Web Access |
| Project: src\runtime\src\libraries\System.Security.Cryptography.Cose\src\System.Security.Cryptography.Cose.csproj (System.Security.Cryptography.Cose) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Text; namespace System.Security.Cryptography.Cose { internal sealed class HashToBeSignedBuilder : ToBeSignedBuilder { private IncrementalHash _incrementalHash; internal HashToBeSignedBuilder(HashAlgorithmName hashAlgorithmName) { _incrementalHash = IncrementalHash.CreateHash(hashAlgorithmName); } internal override void AppendToBeSigned(ReadOnlySpan<byte> data) { _incrementalHash.AppendData(data); } internal override void AppendToBeSigned(byte[] data, int offset, int length) { _incrementalHash.AppendData(data, offset, length); } internal override void WithDataAndResetAfterOperation(Span<byte> arg, ToBeSignedOperation operation) { #if NETSTANDARD2_0 || NETFRAMEWORK operation(arg, _incrementalHash.GetHashAndReset()); #else Debug.Assert(_incrementalHash.HashLengthInBytes <= 512 / 8); // largest hash we can get (SHA512). Span<byte> hash = stackalloc byte[_incrementalHash.HashLengthInBytes]; _incrementalHash.GetHashAndReset(hash); operation(arg, hash); #endif } protected override void Dispose(bool disposing) { if (disposing) { _incrementalHash.Dispose(); _incrementalHash = null!; } base.Dispose(disposing); } } }