From ca718e343ea3e461e92486a9fb6c27ea816f21e9 Mon Sep 17 00:00:00 2001 From: Tal Aloni Date: Sat, 6 Jan 2024 15:09:13 +0200 Subject: [PATCH] GSSAPI: SimpleProtectedNegotiationTokenInit: Add GetMechanismTypeListBytes method --- .../SimpleProtectedNegotiationTokenInit.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/SMBLibrary/Authentication/GSSAPI/SPNEGO/SimpleProtectedNegotiationTokenInit.cs b/SMBLibrary/Authentication/GSSAPI/SPNEGO/SimpleProtectedNegotiationTokenInit.cs index b05b8ef..a553ad6 100644 --- a/SMBLibrary/Authentication/GSSAPI/SPNEGO/SimpleProtectedNegotiationTokenInit.cs +++ b/SMBLibrary/Authentication/GSSAPI/SPNEGO/SimpleProtectedNegotiationTokenInit.cs @@ -191,6 +191,11 @@ namespace SMBLibrary.Authentication.GSSAPI int constructionLength = 1 + sequenceLengthFieldSize + sequenceLength; ByteWriter.WriteByte(buffer, ref offset, MechanismTypeListTag); DerEncodingHelper.WriteLength(buffer, ref offset, constructionLength); + WriteMechanismTypeListSequence(buffer, ref offset, mechanismTypeList, sequenceLength); + } + + protected static void WriteMechanismTypeListSequence(byte[] buffer, ref int offset, List mechanismTypeList, int sequenceLength) + { ByteWriter.WriteByte(buffer, ref offset, (byte)DerEncodingTag.Sequence); DerEncodingHelper.WriteLength(buffer, ref offset, sequenceLength); foreach (byte[] mechanismType in mechanismTypeList) @@ -221,6 +226,17 @@ namespace SMBLibrary.Authentication.GSSAPI ByteWriter.WriteBytes(buffer, ref offset, mechanismListMIC); } + public static byte[] GetMechanismTypeListBytes(List 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 mechanismTypeList) { if (mechanismTypeList == null)