mirror of
https://github.com/wismna/ModernKeePass.git
synced 2025-10-03 15:40:18 -04:00
51 lines
1.6 KiB
C#
51 lines
1.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Runtime.InteropServices.WindowsRuntime;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Windows.Security.Cryptography.Core;
|
|
|
|
namespace ModernKeePassLib.Cryptography
|
|
{
|
|
public static class CryptographicHashExtensions
|
|
{
|
|
public static int TransformBlock(this CryptographicHash hash, byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset)
|
|
{
|
|
byte[] buffer;
|
|
if (inputCount < inputBuffer.Length)
|
|
{
|
|
buffer = new byte[inputCount];
|
|
Array.Copy(inputBuffer, inputOffset, buffer, 0, inputCount);
|
|
}
|
|
else
|
|
{
|
|
buffer = inputBuffer;
|
|
}
|
|
|
|
hash.Append(buffer.AsBuffer());
|
|
if (outputBuffer != null)
|
|
{
|
|
Array.Copy(inputBuffer, inputOffset, outputBuffer, outputOffset, inputCount);
|
|
}
|
|
|
|
return inputCount;
|
|
}
|
|
|
|
public static byte[] TransformFinalBlock(this CryptographicHash hash, byte[] inputBuffer, int inputOffset, int inputCount)
|
|
{
|
|
hash.TransformBlock(inputBuffer, inputOffset, inputCount, null, 0);
|
|
if (inputCount == inputBuffer.Length)
|
|
{
|
|
return inputBuffer;
|
|
}
|
|
else
|
|
{
|
|
var buffer = new byte[inputCount];
|
|
Array.Copy(inputBuffer, inputOffset, buffer, 0, inputCount);
|
|
return buffer;
|
|
}
|
|
}
|
|
}
|
|
}
|