| 2491 | |
| 2492 | |
| 2493 | class KRB_InnerToken(Packet): |
| 2494 | name = "Kerberos v5 InnerToken" |
| 2495 | fields_desc = [ |
| 2496 | StrFixedLenEnumField("TOK_ID", b"\x01\x00", _TOK_IDS, length=2), |
| 2497 | PacketField( |
| 2498 | "root", |
| 2499 | KRB_AP_REQ(), |
| 2500 | lambda x, _parent: _InitialContextTokens[_parent.TOK_ID](x), |
| 2501 | ), |
| 2502 | ] |
| 2503 | |
| 2504 | def mysummary(self): |
| 2505 | return self.sprintf( |
| 2506 | "Kerberos %s" % _TOK_IDS.get(self.TOK_ID, repr(self.TOK_ID)) |
| 2507 | ) |
| 2508 | |
| 2509 | def guess_payload_class(self, payload): |
| 2510 | if self.TOK_ID in [b"\x01\x01", b"\x02\x01", b"\x04\x04", b"\x05\x04"]: |
| 2511 | return conf.padding_layer |
| 2512 | return Kerberos |
| 2513 | |
| 2514 | @classmethod |
| 2515 | def dispatch_hook(cls, _pkt=None, *args, **kargs): |
| 2516 | if _pkt and len(_pkt) >= 13: |
| 2517 | # Older RFC1964 variants of the token have KRB_GSSAPI_Token wrapper |
| 2518 | if _pkt[2:13] == b"\x06\t*\x86H\x86\xf7\x12\x01\x02\x02": |
| 2519 | return KRB_GSSAPI_Token |
| 2520 | return cls |
| 2521 | |
| 2522 | |
| 2523 | # RFC 4121 - sect 4.1 |
no test coverage detected