67 lines
1.4 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|