mirror of
https://github.com/TalAloni/SMBLibrary.git
synced 2025-05-17 17:59:32 +02:00
SPNEGO: Minor code refactoring
This commit is contained in:
parent
4ef809ea68
commit
eb92e824ac
3 changed files with 28 additions and 30 deletions
|
@ -48,7 +48,7 @@ namespace SMBLibrary.Authentication.GSSAPI
|
||||||
{
|
{
|
||||||
token.MechanismTypeList.Add(mechanism.Identifier);
|
token.MechanismTypeList.Add(mechanism.Identifier);
|
||||||
}
|
}
|
||||||
return SimpleProtectedNegotiationToken.GetTokenBytes(token);
|
return token.GetBytes(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual NTStatus AcceptSecurityContext(ref GSSContext context, byte[] inputToken, out byte[] outputToken)
|
public virtual NTStatus AcceptSecurityContext(ref GSSContext context, byte[] inputToken, out byte[] outputToken)
|
||||||
|
|
|
@ -19,6 +19,32 @@ namespace SMBLibrary.Authentication.GSSAPI
|
||||||
|
|
||||||
public abstract byte[] GetBytes();
|
public abstract byte[] GetBytes();
|
||||||
|
|
||||||
|
/// <param name="includeHeader">Prepend the generic GSSAPI header. Required for negTokenInit, optional for negTokenResp.</param>
|
||||||
|
public byte[] GetBytes(bool includeHeader)
|
||||||
|
{
|
||||||
|
byte[] tokenBytes = this.GetBytes();
|
||||||
|
if (includeHeader)
|
||||||
|
{
|
||||||
|
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 tokenBytes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// https://tools.ietf.org/html/rfc2743
|
/// https://tools.ietf.org/html/rfc2743
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -60,33 +86,5 @@ namespace SMBLibrary.Authentication.GSSAPI
|
||||||
}
|
}
|
||||||
return null;
|
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,7 +67,7 @@ namespace SMBLibrary.Client
|
||||||
outputToken.MechanismTypeList = new List<byte[]>();
|
outputToken.MechanismTypeList = new List<byte[]>();
|
||||||
outputToken.MechanismTypeList.Add(GSSProvider.NTLMSSPIdentifier);
|
outputToken.MechanismTypeList.Add(GSSProvider.NTLMSSPIdentifier);
|
||||||
outputToken.MechanismToken = negotiateMessage.GetBytes();
|
outputToken.MechanismToken = negotiateMessage.GetBytes();
|
||||||
return SimpleProtectedNegotiationToken.GetTokenBytes(outputToken);
|
return outputToken.GetBytes(true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue