1 # Author: Trevor Perrin
2 # See the LICENSE file for legal information regarding use of this file.
4 """Classes for reading/writing binary data (such as TLS records)."""
10 self.bytes = bytearray(0)
12 def add(self, x, length):
13 self.bytes += bytearray(length)
14 newIndex = len(self.bytes) - 1
15 for count in range(length):
16 self.bytes[newIndex] = x & 0xFF
20 def addFixSeq(self, seq, length):
24 def addVarSeq(self, seq, length, lengthLength):
25 self.add(len(seq)*length, lengthLength)
30 def __init__(self, bytes):
34 def get(self, length):
35 if self.index + length > len(self.bytes):
38 for count in range(length):
40 x |= self.bytes[self.index]
44 def getFixBytes(self, lengthBytes):
45 bytes = self.bytes[self.index : self.index+lengthBytes]
46 self.index += lengthBytes
49 def getVarBytes(self, lengthLength):
50 lengthBytes = self.get(lengthLength)
51 return self.getFixBytes(lengthBytes)
53 def getFixList(self, length, lengthList):
55 for x in range(lengthList):
56 l[x] = self.get(length)
59 def getVarList(self, length, lengthLength):
60 lengthList = self.get(lengthLength)
61 if lengthList % length != 0:
63 lengthList = lengthList // length
65 for x in range(lengthList):
66 l[x] = self.get(length)
69 def startLengthCheck(self, lengthLength):
70 self.lengthCheck = self.get(lengthLength)
71 self.indexCheck = self.index
73 def setLengthCheck(self, length):
74 self.lengthCheck = length
75 self.indexCheck = self.index
77 def stopLengthCheck(self):
78 if (self.index - self.indexCheck) != self.lengthCheck:
81 def atLengthCheck(self):
82 if (self.index - self.indexCheck) < self.lengthCheck:
84 elif (self.index - self.indexCheck) == self.lengthCheck: