XXX Rework this with proper ASN.1 parsing.
| 1130 | |
| 1131 | |
| 1132 | class _CertAuthoritiesField(StrLenField): |
| 1133 | """ |
| 1134 | XXX Rework this with proper ASN.1 parsing. |
| 1135 | """ |
| 1136 | islist = 1 |
| 1137 | |
| 1138 | def getfield(self, pkt, s): |
| 1139 | tmp_len = self.length_from(pkt) |
| 1140 | return s[tmp_len:], self.m2i(pkt, s[:tmp_len]) |
| 1141 | |
| 1142 | def m2i(self, pkt, m): |
| 1143 | res = [] |
| 1144 | while len(m) > 1: |
| 1145 | tmp_len = struct.unpack("!H", m[:2])[0] |
| 1146 | if len(m) < tmp_len + 2: |
| 1147 | res.append((tmp_len, m[2:])) |
| 1148 | break |
| 1149 | dn = m[2:2 + tmp_len] |
| 1150 | res.append((tmp_len, dn)) |
| 1151 | m = m[2 + tmp_len:] |
| 1152 | return res |
| 1153 | |
| 1154 | def i2m(self, pkt, i): |
| 1155 | return b"".join(map(lambda x_y: struct.pack("!H", x_y[0]) + x_y[1], i)) |
| 1156 | |
| 1157 | def addfield(self, pkt, s, val): |
| 1158 | return s + self.i2m(pkt, val) |
| 1159 | |
| 1160 | def i2len(self, pkt, val): |
| 1161 | if val is None: |
| 1162 | return 0 |
| 1163 | else: |
| 1164 | return len(self.i2m(pkt, val)) |
| 1165 | |
| 1166 | |
| 1167 | class TLSCertificateRequest(_TLSHandshake): |
no outgoing calls
no test coverage detected
searching dependent graphs…