Package dpkt :: Module ssl
[hide private]
[frames] | no frames]

Source Code for Module dpkt.ssl

 1  # $Id$ 
 2   
 3  """Secure Sockets Layer / Transport Layer Security.""" 
 4   
 5  import dpkt 
 6   
7 -class SSL2(dpkt.Packet):
8 __hdr__ = ( 9 ('len', 'H', 0), 10 ('msg', 's', ''), 11 ('pad', 's', ''), 12 )
13 - def unpack(self, buf):
14 dpkt.Packet.unpack(self, buf) 15 if self.len & 0x8000: 16 n = self.len = self.len & 0x7FFF 17 self.msg, self.data = self.data[:n], self.data[n:] 18 else: 19 n = self.len = self.len & 0x3FFF 20 padlen = ord(self.data[0]) 21 self.msg = self.data[1:1+n] 22 self.pad = self.data[1+n:1+n+pad] 23 self.data = self.data[1+n+pad:]
24 25 # SSLv3/TLS version 26 SSL3_VERSION = 0x0300 27 TLS1_VERSION = 0x0301 28 29 # Record type 30 SSL3_RT_CHANGE_CIPHER_SPEC = 20 31 SSL3_RT_ALERT = 21 32 SSL3_RT_HANDSHAKE = 22 33 SSL3_RT_APPLICATION_DATA = 23 34 35 # Handshake message type 36 SSL3_MT_HELLO_REQUEST = 0 37 SSL3_MT_CLIENT_HELLO = 1 38 SSL3_MT_SERVER_HELLO = 2 39 SSL3_MT_CERTIFICATE = 11 40 SSL3_MT_SERVER_KEY_EXCHANGE = 12 41 SSL3_MT_CERTIFICATE_REQUEST = 13 42 SSL3_MT_SERVER_DONE = 14 43 SSL3_MT_CERTIFICATE_VERIFY = 15 44 SSL3_MT_CLIENT_KEY_EXCHANGE = 16 45 SSL3_MT_FINISHED = 20 46
47 -class SSL3(dpkt.Packet):
48 __hdr__ = ( 49 ('type', 'B', 0), 50 ('version', 'H', 0), 51 ('len', 'H', 0), 52 )
53 - def unpack(self, buf):
54 dpkt.Packet.unpack(self, buf) 55 if self.len <= len(self.data): 56 self.msg, self.data = self.data[:self.len], self.data[self.len:]
57 58 """ 59 Byte 0 = SSL record type = 22 (SSL3_RT_HANDSHAKE) 60 Bytes 1-2 = SSL version (major/minor) 61 Bytes 3-4 = Length of data in the record (excluding the header itself). 62 Byte 5 = Handshake type 63 Bytes 6-8 = Length of data to follow in this record 64 Bytes 9-n = Command-specific data 65 """ 66 67
68 -class SSLFactory(object):
69 - def __new__(cls, buf):
70 v = buf[1:3] 71 if v == '\x03\x01' or v == '\x03\x00': 72 return SSL3(buf) 73 return SSL2(buf)
74