automata modification for NLA
This commit is contained in:
@@ -200,7 +200,7 @@ class RawLayer(protocol.Protocol, LayerAutomata, IStreamSender):
|
|||||||
#add in buffer
|
#add in buffer
|
||||||
self._buffer += data
|
self._buffer += data
|
||||||
#while buffer have expected size call local callback
|
#while buffer have expected size call local callback
|
||||||
while len(self._buffer) >= self._expectedLen:
|
while self._expectedLen > 0 and len(self._buffer) >= self._expectedLen:
|
||||||
#expected data is first expected bytes
|
#expected data is first expected bytes
|
||||||
expectedData = Stream(self._buffer[0:self._expectedLen])
|
expectedData = Stream(self._buffer[0:self._expectedLen])
|
||||||
#rest is for next event of automata
|
#rest is for next event of automata
|
||||||
@@ -238,9 +238,27 @@ class RawLayer(protocol.Protocol, LayerAutomata, IStreamSender):
|
|||||||
@param expectedLen: in bytes length use to call next state
|
@param expectedLen: in bytes length use to call next state
|
||||||
@param callback: callback call when expected length bytes is received
|
@param callback: callback call when expected length bytes is received
|
||||||
"""
|
"""
|
||||||
|
self.dataReceived = lambda data:self.__class__.dataReceived(self, data)
|
||||||
self._expectedLen = expectedLen
|
self._expectedLen = expectedLen
|
||||||
#default callback is recv from LayerAutomata
|
#default callback is recv from LayerAutomata
|
||||||
self.setNextState(callback)
|
self.setNextState(callback)
|
||||||
|
|
||||||
|
def byPassDataReceived(self, data):
|
||||||
|
"""
|
||||||
|
@summary: by pass automata received
|
||||||
|
@warning: ignore rest in buffer
|
||||||
|
@param data: {str} received from twisted
|
||||||
|
"""
|
||||||
|
self.recv(Stream(data))
|
||||||
|
|
||||||
|
def expectImmediately(self, callback = None):
|
||||||
|
"""
|
||||||
|
@summary: call immediately when available data is received
|
||||||
|
@param callback: {func} callback called
|
||||||
|
"""
|
||||||
|
self.dataReceived = lambda data:self.__class__.byPassDataReceived(self, data)
|
||||||
|
self._expectedLen = 0
|
||||||
|
self.setNextState(callback)
|
||||||
|
|
||||||
def send(self, message):
|
def send(self, message):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ class TSSmartCardCreds(univ.Sequence):
|
|||||||
namedtype.OptionalNamedType('domainHint', univ.OctetString().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3)))
|
namedtype.OptionalNamedType('domainHint', univ.OctetString().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3)))
|
||||||
)
|
)
|
||||||
|
|
||||||
def createDERRequest(negoTypes):
|
def encodeDERTRequest(negoTypes):
|
||||||
"""
|
"""
|
||||||
@summary: create TSRequest from list of Type
|
@summary: create TSRequest from list of Type
|
||||||
@param negoTypes: {list(Type)}
|
@param negoTypes: {list(Type)}
|
||||||
@@ -119,4 +119,6 @@ def createDERRequest(negoTypes):
|
|||||||
request.setComponentByName("version", univ.Integer(2).subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0)))
|
request.setComponentByName("version", univ.Integer(2).subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0)))
|
||||||
request.setComponentByName("negoTokens", negoData)
|
request.setComponentByName("negoTokens", negoData)
|
||||||
return encoder.encode(request)
|
return encoder.encode(request)
|
||||||
|
|
||||||
|
def decodeDERTRequest():
|
||||||
|
pass
|
||||||
@@ -185,17 +185,17 @@ class TPKT(RawLayer, IFastPathSender):
|
|||||||
@summary: Fast path data
|
@summary: Fast path data
|
||||||
@param data: {Stream} from twisted layer
|
@param data: {Stream} from twisted layer
|
||||||
"""
|
"""
|
||||||
self._fastPathListener.recvFastPath(self._secFlag, data)
|
|
||||||
self.expect(2, self.readHeader)
|
self.expect(2, self.readHeader)
|
||||||
|
self._fastPathListener.recvFastPath(self._secFlag, data)
|
||||||
|
|
||||||
def readData(self, data):
|
def readData(self, data):
|
||||||
"""
|
"""
|
||||||
@summary: Read classic TPKT packet, last state in tpkt automata
|
@summary: Read classic TPKT packet, last state in tpkt automata
|
||||||
@param data: {Stream} with correct size
|
@param data: {Stream} with correct size
|
||||||
"""
|
"""
|
||||||
|
self.expect(2, self.readHeader)
|
||||||
#next state is pass to
|
#next state is pass to
|
||||||
self._presentation.recv(data)
|
self._presentation.recv(data)
|
||||||
self.expect(2, self.readHeader)
|
|
||||||
|
|
||||||
def send(self, message):
|
def send(self, message):
|
||||||
"""
|
"""
|
||||||
@@ -224,11 +224,11 @@ class TPKT(RawLayer, IFastPathSender):
|
|||||||
must be called after startTLS function
|
must be called after startTLS function
|
||||||
"""
|
"""
|
||||||
#send NTLM negotiate message packet
|
#send NTLM negotiate message packet
|
||||||
self.transport.write(cssp.createDERRequest( [ ntlm.NegotiateMessage() ] ))
|
self.transport.write(cssp.encodeDERTRequest( [ ntlm.NegotiateMessage() ] ))
|
||||||
|
self.expectImmediately(self.readNTLMChallenge)
|
||||||
|
|
||||||
def readNTLMChallenge(self, data):
|
def readNTLMChallenge(self, data):
|
||||||
"""
|
"""
|
||||||
@summary: server NTLM challenge
|
@summary: server NTLM challenge
|
||||||
"""
|
"""
|
||||||
|
print "toto"
|
||||||
Reference in New Issue
Block a user