Package tlslite :: Package utils :: Module codec
[hide private]
[frames] | no frames]

Source Code for Module tlslite.utils.codec

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