Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/scapy/asn1packet.py: 90%
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# SPDX-License-Identifier: GPL-2.0-only
2# This file is part of Scapy
3# See https://scapy.net/ for more information
4# Copyright (C) Philippe Biondi <phil@secdev.org>
6"""
7ASN.1 Packet
9Packet holding data in Abstract Syntax Notation (ASN.1).
10"""
12from scapy.base_classes import Packet_metaclass
13from scapy.packet import Packet
15from typing import (
16 Any,
17 Dict,
18 Tuple,
19 Type,
20 cast,
21 TYPE_CHECKING,
22)
24if TYPE_CHECKING:
25 from scapy.asn1fields import ASN1F_field # noqa: F401
28class ASN1Packet_metaclass(Packet_metaclass):
29 def __new__(cls,
30 name, # type: str
31 bases, # type: Tuple[type, ...]
32 dct # type: Dict[str, Any]
33 ):
34 # type: (...) -> Type[ASN1_Packet]
35 if dct["ASN1_root"] is not None:
36 dct["fields_desc"] = dct["ASN1_root"].get_fields_list()
37 return cast(
38 'Type[ASN1_Packet]',
39 super(ASN1Packet_metaclass, cls).__new__(cls, name, bases, dct),
40 )
43class ASN1_Packet(Packet, metaclass=ASN1Packet_metaclass):
44 ASN1_root = cast('ASN1F_field[Any, Any]', None)
45 ASN1_codec = None
47 def self_build(self):
48 # type: () -> bytes
49 if self.raw_packet_cache is not None:
50 return self.raw_packet_cache
51 return self.ASN1_root.build(self)
53 def do_dissect(self, x):
54 # type: (bytes) -> bytes
55 return self.ASN1_root.dissect(self, x)