62 lines
1.4 KiB
C#
62 lines
1.4 KiB
C#
using System;
|
|
|
|
using Google.Protobuf;
|
|
|
|
namespace FrostFS.SDK.Cryptography;
|
|
|
|
public static class FrostFsExtensions
|
|
{
|
|
public static ByteString Sha256(this IMessage data)
|
|
{
|
|
return ByteString.CopyFrom(data.ToByteArray().Sha256());
|
|
}
|
|
|
|
public static Guid ToUuid(this ByteString id)
|
|
{
|
|
if (id == null)
|
|
throw new ArgumentNullException(nameof(id));
|
|
|
|
var orderedBytes = GetGuidBytesDirectOrder(id.Span);
|
|
|
|
return new Guid(orderedBytes);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Serializes Guid to binary representation in direct order bytes format
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
public static byte[] ToBytes(this Guid id)
|
|
{
|
|
var bytes = id.ToByteArray();
|
|
|
|
var orderedBytes = GetGuidBytesDirectOrder(bytes);
|
|
|
|
return orderedBytes;
|
|
}
|
|
|
|
private static byte[] GetGuidBytesDirectOrder(ReadOnlySpan<byte> source)
|
|
{
|
|
if (source.Length != 16)
|
|
throw new ArgumentException("Wrong uuid binary format");
|
|
|
|
return [
|
|
source[3],
|
|
source[2],
|
|
source[1],
|
|
source[0],
|
|
source[5],
|
|
source[4],
|
|
source[7],
|
|
source[6],
|
|
source[8],
|
|
source[9],
|
|
source[10],
|
|
source[11],
|
|
source[12],
|
|
source[13],
|
|
source[14],
|
|
source[15]
|
|
];
|
|
}
|
|
}
|