| OLD | NEW |
| 1 # Author: Trevor Perrin |
| 2 # See the LICENSE file for legal information regarding use of this file. |
| 3 |
| 1 """Classes for reading/writing binary data (such as TLS records).""" | 4 """Classes for reading/writing binary data (such as TLS records).""" |
| 2 | 5 |
| 3 from compat import * | 6 from .compat import * |
| 4 | 7 |
| 5 class Writer: | 8 class Writer(object): |
| 6 def __init__(self, length=0): | 9 def __init__(self): |
| 7 #If length is zero, then this is just a "trial run" to determine length | 10 self.bytes = bytearray(0) |
| 8 self.index = 0 | |
| 9 self.bytes = createByteArrayZeros(length) | |
| 10 | 11 |
| 11 def add(self, x, length): | 12 def add(self, x, length): |
| 12 if self.bytes: | 13 self.bytes += bytearray(length) |
| 13 newIndex = self.index+length-1 | 14 newIndex = len(self.bytes) - 1 |
| 14 while newIndex >= self.index: | 15 for count in range(length): |
| 15 self.bytes[newIndex] = x & 0xFF | 16 self.bytes[newIndex] = x & 0xFF |
| 16 x >>= 8 | 17 x >>= 8 |
| 17 newIndex -= 1 | 18 newIndex -= 1 |
| 18 self.index += length | |
| 19 | 19 |
| 20 def addFixSeq(self, seq, length): | 20 def addFixSeq(self, seq, length): |
| 21 if self.bytes: | 21 for e in seq: |
| 22 for e in seq: | 22 self.add(e, length) |
| 23 self.add(e, length) | |
| 24 else: | |
| 25 self.index += len(seq)*length | |
| 26 | 23 |
| 27 def addVarSeq(self, seq, length, lengthLength): | 24 def addVarSeq(self, seq, length, lengthLength): |
| 28 if self.bytes: | 25 self.add(len(seq)*length, lengthLength) |
| 29 self.add(len(seq)*length, lengthLength) | 26 for e in seq: |
| 30 for e in seq: | 27 self.add(e, length) |
| 31 self.add(e, length) | |
| 32 else: | |
| 33 self.index += lengthLength + (len(seq)*length) | |
| 34 | 28 |
| 35 | 29 class Parser(object): |
| 36 class Parser: | |
| 37 def __init__(self, bytes): | 30 def __init__(self, bytes): |
| 38 self.bytes = bytes | 31 self.bytes = bytes |
| 39 self.index = 0 | 32 self.index = 0 |
| 40 | 33 |
| 41 def get(self, length): | 34 def get(self, length): |
| 42 if self.index + length > len(self.bytes): | 35 if self.index + length > len(self.bytes): |
| 43 raise SyntaxError() | 36 raise SyntaxError() |
| 44 x = 0 | 37 x = 0 |
| 45 for count in range(length): | 38 for count in range(length): |
| 46 x <<= 8 | 39 x <<= 8 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 60 def getFixList(self, length, lengthList): | 53 def getFixList(self, length, lengthList): |
| 61 l = [0] * lengthList | 54 l = [0] * lengthList |
| 62 for x in range(lengthList): | 55 for x in range(lengthList): |
| 63 l[x] = self.get(length) | 56 l[x] = self.get(length) |
| 64 return l | 57 return l |
| 65 | 58 |
| 66 def getVarList(self, length, lengthLength): | 59 def getVarList(self, length, lengthLength): |
| 67 lengthList = self.get(lengthLength) | 60 lengthList = self.get(lengthLength) |
| 68 if lengthList % length != 0: | 61 if lengthList % length != 0: |
| 69 raise SyntaxError() | 62 raise SyntaxError() |
| 70 lengthList = int(lengthList/length) | 63 lengthList = lengthList // length |
| 71 l = [0] * lengthList | 64 l = [0] * lengthList |
| 72 for x in range(lengthList): | 65 for x in range(lengthList): |
| 73 l[x] = self.get(length) | 66 l[x] = self.get(length) |
| 74 return l | 67 return l |
| 75 | 68 |
| 76 def startLengthCheck(self, lengthLength): | 69 def startLengthCheck(self, lengthLength): |
| 77 self.lengthCheck = self.get(lengthLength) | 70 self.lengthCheck = self.get(lengthLength) |
| 78 self.indexCheck = self.index | 71 self.indexCheck = self.index |
| 79 | 72 |
| 80 def setLengthCheck(self, length): | 73 def setLengthCheck(self, length): |
| 81 self.lengthCheck = length | 74 self.lengthCheck = length |
| 82 self.indexCheck = self.index | 75 self.indexCheck = self.index |
| 83 | 76 |
| 84 def stopLengthCheck(self): | 77 def stopLengthCheck(self): |
| 85 if (self.index - self.indexCheck) != self.lengthCheck: | 78 if (self.index - self.indexCheck) != self.lengthCheck: |
| 86 raise SyntaxError() | 79 raise SyntaxError() |
| 87 | 80 |
| 88 def atLengthCheck(self): | 81 def atLengthCheck(self): |
| 89 if (self.index - self.indexCheck) < self.lengthCheck: | 82 if (self.index - self.indexCheck) < self.lengthCheck: |
| 90 return False | 83 return False |
| 91 elif (self.index - self.indexCheck) == self.lengthCheck: | 84 elif (self.index - self.indexCheck) == self.lengthCheck: |
| 92 return True | 85 return True |
| 93 else: | 86 else: |
| 94 raise SyntaxError() | 87 raise SyntaxError() |
| OLD | NEW |