GSSAPI: SimpleProtectedNegotiationTokenInit: Add GetMechanismTypeListBytes method

This commit is contained in:
Tal Aloni 2024-01-06 15:09:13 +02:00
parent 2667b5439e
commit ca718e343e

View file

@ -191,6 +191,11 @@ namespace SMBLibrary.Authentication.GSSAPI
int constructionLength = 1 + sequenceLengthFieldSize + sequenceLength; int constructionLength = 1 + sequenceLengthFieldSize + sequenceLength;
ByteWriter.WriteByte(buffer, ref offset, MechanismTypeListTag); ByteWriter.WriteByte(buffer, ref offset, MechanismTypeListTag);
DerEncodingHelper.WriteLength(buffer, ref offset, constructionLength); DerEncodingHelper.WriteLength(buffer, ref offset, constructionLength);
WriteMechanismTypeListSequence(buffer, ref offset, mechanismTypeList, sequenceLength);
}
protected static void WriteMechanismTypeListSequence(byte[] buffer, ref int offset, List<byte[]> mechanismTypeList, int sequenceLength)
{
ByteWriter.WriteByte(buffer, ref offset, (byte)DerEncodingTag.Sequence); ByteWriter.WriteByte(buffer, ref offset, (byte)DerEncodingTag.Sequence);
DerEncodingHelper.WriteLength(buffer, ref offset, sequenceLength); DerEncodingHelper.WriteLength(buffer, ref offset, sequenceLength);
foreach (byte[] mechanismType in mechanismTypeList) foreach (byte[] mechanismType in mechanismTypeList)
@ -221,6 +226,17 @@ namespace SMBLibrary.Authentication.GSSAPI
ByteWriter.WriteBytes(buffer, ref offset, mechanismListMIC); ByteWriter.WriteBytes(buffer, ref offset, mechanismListMIC);
} }
public static byte[] GetMechanismTypeListBytes(List<byte[]> mechanismTypeList)
{
int sequenceLength = GetMechanismTypeListSequenceLength(mechanismTypeList);
int sequenceLengthFieldSize = DerEncodingHelper.GetLengthFieldSize(sequenceLength);
int constructionLength = 1 + sequenceLengthFieldSize + sequenceLength;
byte[] buffer = new byte[constructionLength];
int offset = 0;
WriteMechanismTypeListSequence(buffer, ref offset, mechanismTypeList, sequenceLength);
return buffer;
}
private static int GetEncodedMechanismTypeListLength(List<byte[]> mechanismTypeList) private static int GetEncodedMechanismTypeListLength(List<byte[]> mechanismTypeList)
{ {
if (mechanismTypeList == null) if (mechanismTypeList == null)