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 |