From 7aeecc3f13934d3eda06874e4e0d409ee7a56701 Mon Sep 17 00:00:00 2001 From: Phil <phil@secdev.org> Date: Thu, 27 Aug 2009 18:34:33 +0200 Subject: [PATCH] Added some ASN1 types (ENUMERATED, GAUGE, GENERALIZED TIME) and their BER/ASN1F couterparts --- scapy/asn1/asn1.py | 16 ++++++++++++++++ scapy/asn1/ber.py | 12 ++++++++++++ scapy/asn1fields.py | 9 +++++++++ 3 files changed, 37 insertions(+) diff --git a/scapy/asn1/asn1.py b/scapy/asn1/asn1.py index c8c42f72..5e1866da 100644 --- a/scapy/asn1/asn1.py +++ b/scapy/asn1/asn1.py @@ -161,7 +161,9 @@ class ASN1_Class_UNIVERSAL(ASN1_Class): BMP_STRING = 30 IPADDRESS = 0x40 COUNTER32 = 0x41 + GAUGE32 = 0x42 TIME_TICKS = 0x43 + SEP = 0x80 class ASN1_Object_metaclass(type): def __new__(cls, name, bases, dct): @@ -246,15 +248,27 @@ class ASN1_IPADDRESS(ASN1_STRING): class ASN1_UTC_TIME(ASN1_STRING): tag = ASN1_Class_UNIVERSAL.UTC_TIME +class ASN1_GENERALIZED_TIME(ASN1_STRING): + tag = ASN1_Class_UNIVERSAL.GENERALIZED_TIME + class ASN1_TIME_TICKS(ASN1_INTEGER): tag = ASN1_Class_UNIVERSAL.TIME_TICKS class ASN1_BOOLEAN(ASN1_INTEGER): tag = ASN1_Class_UNIVERSAL.BOOLEAN + +class ASN1_ENUMERATED(ASN1_INTEGER): + tag = ASN1_Class_UNIVERSAL.ENUMERATED class ASN1_NULL(ASN1_INTEGER): tag = ASN1_Class_UNIVERSAL.NULL +class ASN1_SEP(ASN1_NULL): + tag = ASN1_Class_UNIVERSAL.SEP + +class ASN1_GAUGE32(ASN1_INTEGER): + tag = ASN1_Class_UNIVERSAL.GAUGE32 + class ASN1_COUNTER32(ASN1_INTEGER): tag = ASN1_Class_UNIVERSAL.COUNTER32 @@ -276,6 +290,8 @@ class ASN1_OID(ASN1_Object): ASN1_Object.__init__(self, val) def __repr__(self): return "<%s[%r]>" % (self.__dict__.get("name", self.__class__.__name__), conf.mib._oidname(self.val)) + def __oidname__(self): + return '%s'%conf.mib._oidname(self.val) diff --git a/scapy/asn1/ber.py b/scapy/asn1/ber.py index 25c913dd..371274bf 100644 --- a/scapy/asn1/ber.py +++ b/scapy/asn1/ber.py @@ -223,6 +223,9 @@ class BERcodec_INTEGER(BERcodec_Object): class BERcodec_BOOLEAN(BERcodec_INTEGER): tag = ASN1_Class_UNIVERSAL.BOOLEAN +class BERcodec_ENUMERATED(BERcodec_INTEGER): + tag = ASN1_Class_UNIVERSAL.ENUMERATED + class BERcodec_NULL(BERcodec_INTEGER): tag = ASN1_Class_UNIVERSAL.NULL @classmethod @@ -232,6 +235,9 @@ class BERcodec_NULL(BERcodec_INTEGER): else: return super(cls,cls).enc(i) +class BERcodec_SEP(BERcodec_NULL): + tag = ASN1_Class_UNIVERSAL.SEP + class BERcodec_STRING(BERcodec_Object): tag = ASN1_Class_UNIVERSAL.STRING @classmethod @@ -277,9 +283,15 @@ class BERcodec_IPADDRESS(BERcodec_STRING): class BERcodec_UTC_TIME(BERcodec_STRING): tag = ASN1_Class_UNIVERSAL.UTC_TIME +class BERcodec_GENERALIZED_TIME(BERcodec_STRING): + tag = ASN1_Class_UNIVERSAL.GENERALIZED_TIME + class BERcodec_TIME_TICKS(BERcodec_INTEGER): tag = ASN1_Class_UNIVERSAL.TIME_TICKS +class BERcodec_GAUGE32(BERcodec_INTEGER): + tag = ASN1_Class_UNIVERSAL.GAUGE32 + class BERcodec_COUNTER32(BERcodec_INTEGER): tag = ASN1_Class_UNIVERSAL.COUNTER32 diff --git a/scapy/asn1fields.py b/scapy/asn1fields.py index 83722125..c32fbe31 100644 --- a/scapy/asn1fields.py +++ b/scapy/asn1fields.py @@ -123,6 +123,9 @@ class ASN1F_BOOLEAN(ASN1F_field): class ASN1F_NULL(ASN1F_INTEGER): ASN1_tag= ASN1_Class_UNIVERSAL.NULL +class ASN1F_SEP(ASN1F_NULL): + ASN1_tag= ASN1_Class_UNIVERSAL.SEP + class ASN1F_enum_INTEGER(ASN1F_INTEGER): def __init__(self, name, default, enum): ASN1F_INTEGER.__init__(self, name, default) @@ -155,6 +158,9 @@ class ASN1F_enum_INTEGER(ASN1F_INTEGER): else: return self.i2repr_one(pkt,x) +class ASN1F_ENUMERATED(ASN1F_enum_INTEGER): + ASN1_tag = ASN1_Class_UNIVERSAL.ENUMERATED + class ASN1F_STRING(ASN1F_field): ASN1_tag = ASN1_Class_UNIVERSAL.STRING def randval(self): @@ -175,6 +181,9 @@ class ASN1F_TIME_TICKS(ASN1F_INTEGER): class ASN1F_UTC_TIME(ASN1F_STRING): ASN1_tag = ASN1_Class_UNIVERSAL.UTC_TIME +class ASN1F_GENERALIZED_TIME(ASN1F_STRING): + ASN1_tag = ASN1_Class_UNIVERSAL.GENERALIZED_TIME + class ASN1F_OID(ASN1F_field): ASN1_tag = ASN1_Class_UNIVERSAL.OID def randval(self): -- GitLab