automata modification for NLA

This commit is contained in:
citronneur
2015-02-21 14:29:17 +01:00
parent 3fe16130d8
commit e9a93d117b
3 changed files with 28 additions and 8 deletions

View File

@@ -200,7 +200,7 @@ class RawLayer(protocol.Protocol, LayerAutomata, IStreamSender):
#add in buffer
self._buffer += data
#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
expectedData = Stream(self._buffer[0:self._expectedLen])
#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 callback: callback call when expected length bytes is received
"""
self.dataReceived = lambda data:self.__class__.dataReceived(self, data)
self._expectedLen = expectedLen
#default callback is recv from LayerAutomata
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):
"""

View File

@@ -97,7 +97,7 @@ class TSSmartCardCreds(univ.Sequence):
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
@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("negoTokens", negoData)
return encoder.encode(request)
def decodeDERTRequest():
pass

View File

@@ -185,17 +185,17 @@ class TPKT(RawLayer, IFastPathSender):
@summary: Fast path data
@param data: {Stream} from twisted layer
"""
self._fastPathListener.recvFastPath(self._secFlag, data)
self.expect(2, self.readHeader)
self._fastPathListener.recvFastPath(self._secFlag, data)
def readData(self, data):
"""
@summary: Read classic TPKT packet, last state in tpkt automata
@param data: {Stream} with correct size
"""
self.expect(2, self.readHeader)
#next state is pass to
self._presentation.recv(data)
self.expect(2, self.readHeader)
def send(self, message):
"""
@@ -224,11 +224,11 @@ class TPKT(RawLayer, IFastPathSender):
must be called after startTLS function
"""
#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):
"""
@summary: server NTLM challenge
"""
print "toto"