|
@@ -51,5 +51,33 @@ namespace SMBLibrary.Authentication
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Will append the generic GSSAPI header.
|
|
|
+ /// </summary>
|
|
|
+ public static byte[] GetTokenBytes(SimpleProtectedNegotiationToken token)
|
|
|
+ {
|
|
|
+ if (token is SimpleProtectedNegotiationTokenInit)
|
|
|
+ {
|
|
|
+ byte[] tokenBytes = token.GetBytes();
|
|
|
+ int objectIdentifierFieldSize = DerEncodingHelper.GetLengthFieldSize(SPNEGOIdentifier.Length);
|
|
|
+ int tokenLength = 1 + objectIdentifierFieldSize + SPNEGOIdentifier.Length + tokenBytes.Length;
|
|
|
+ int tokenLengthFieldSize = DerEncodingHelper.GetLengthFieldSize(tokenLength);
|
|
|
+ int headerLength = 1 + tokenLengthFieldSize + 1 + objectIdentifierFieldSize + SPNEGOIdentifier.Length;
|
|
|
+ byte[] buffer = new byte[headerLength + tokenBytes.Length];
|
|
|
+ int offset = 0;
|
|
|
+ ByteWriter.WriteByte(buffer, ref offset, ApplicationTag);
|
|
|
+ DerEncodingHelper.WriteLength(buffer, ref offset, tokenLength);
|
|
|
+ ByteWriter.WriteByte(buffer, ref offset, (byte)DerEncodingTag.ObjectIdentifier);
|
|
|
+ DerEncodingHelper.WriteLength(buffer, ref offset, SPNEGOIdentifier.Length);
|
|
|
+ ByteWriter.WriteBytes(buffer, ref offset, SPNEGOIdentifier);
|
|
|
+ ByteWriter.WriteBytes(buffer, ref offset, tokenBytes);
|
|
|
+ return buffer;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return token.GetBytes();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|