Add project

Basic formatting applied. Unnecessary comments have been removed. Suspicious code is covered by TODO.
This commit is contained in:
2025-08-12 11:21:10 +09:00
parent bbcbe841a7
commit 33ab055b43
546 changed files with 176950 additions and 0 deletions

View File

@ -0,0 +1,89 @@
using System.Security;
using GostCryptography.Base;
using GostCryptography.Native;
namespace GostCryptography.Gost_R3411
{
/// <summary>
/// Базовый класс для всех реализаций алгоритма хэширования ГОСТ Р 34.11
/// </summary>
public abstract class Gost_R3411_HashAlgorithm : GostHashAlgorithm, ISafeHandleProvider<SafeHashHandleImpl>
{
/// <inheritdoc />
[SecuritySafeCritical]
protected Gost_R3411_HashAlgorithm(int hashSize) : base(hashSize)
{
_hashHandle = CreateHashHandle();
}
/// <inheritdoc />
[SecuritySafeCritical]
protected Gost_R3411_HashAlgorithm(ProviderType providerType, int hashSize) : base(providerType, hashSize)
{
_hashHandle = CreateHashHandle();
}
[SecurityCritical]
internal Gost_R3411_HashAlgorithm(ProviderType providerType, SafeProvHandleImpl providerHandle, int hashSize) : base(providerType, hashSize)
{
_hashHandle = CreateHashHandle(providerHandle);
}
/// <summary>
/// Создает дескриптор функции хэширования криптографического провайдера
/// </summary>
[SecurityCritical]
protected SafeHashHandleImpl CreateHashHandle()
{
return CreateHashHandle(CryptoApiHelper.GetProviderHandle(ProviderType));
}
/// <summary>
/// Создает дескриптор функции хэширования криптографического провайдера
/// </summary>
[SecurityCritical]
protected abstract SafeHashHandleImpl CreateHashHandle(SafeProvHandleImpl providerHandle);
[SecurityCritical]
private SafeHashHandleImpl _hashHandle;
/// <inheritdoc />
SafeHashHandleImpl ISafeHandleProvider<SafeHashHandleImpl>.SafeHandle
{
[SecurityCritical]
get => _hashHandle;
}
/// <inheritdoc />
[SecuritySafeCritical]
public override void Initialize()
{
_hashHandle.TryDispose();
_hashHandle = CreateHashHandle();
}
/// <inheritdoc />
[SecuritySafeCritical]
protected override void HashCore(byte[] data, int dataOffset, int dataLength)
{
CryptoApiHelper.HashData(_hashHandle, data, dataOffset, dataLength);
}
/// <inheritdoc />
[SecuritySafeCritical]
protected override byte[] HashFinal()
{
return CryptoApiHelper.EndHashData(_hashHandle);
}
/// <inheritdoc />
[SecuritySafeCritical]
protected override void Dispose(bool disposing)
{
_hashHandle.TryDispose();
base.Dispose(disposing);
}
}
}