mirror of https://github.com/secdev/scapy.git
Merge pull request #438 from mtury/master
Fix issue #408 : complex ASN1 fields randval()
This commit is contained in:
commit
3642cb9533
|
@ -367,7 +367,7 @@ class ASN1F_SEQUENCE_OF(ASN1F_field):
|
|||
return self.i2m(pkt, s)
|
||||
|
||||
def randval(self):
|
||||
return packet.fuzz(self.asn1pkt())
|
||||
return packet.fuzz(self.cls())
|
||||
def __repr__(self):
|
||||
return "<%s %s>" % (self.__class__.__name__, self.name)
|
||||
|
||||
|
@ -488,7 +488,16 @@ class ASN1F_CHOICE(ASN1F_field):
|
|||
explicit_tag=exp)
|
||||
return BER_tagging_enc(s, explicit_tag=self.explicit_tag)
|
||||
def randval(self):
|
||||
return RandChoice(*(packet.fuzz(x()) for x in self.choices.itervalues()))
|
||||
randchoices = []
|
||||
for p in self.choices.itervalues():
|
||||
if hasattr(p, "ASN1_root"): # should be ASN1_Packet class
|
||||
randchoices.append(packet.fuzz(p()))
|
||||
elif hasattr(p, "ASN1_tag"):
|
||||
if type(p) is type: # should be (basic) ASN1F_field class
|
||||
randchoices.append(p("dummy", None).randval())
|
||||
else: # should be ASN1F_PACKET instance
|
||||
randchoices.append(p.randval())
|
||||
return RandChoice(*randchoices)
|
||||
|
||||
class ASN1F_PACKET(ASN1F_field):
|
||||
holds_packets = 1
|
||||
|
@ -520,6 +529,8 @@ class ASN1F_PACKET(ASN1F_field):
|
|||
s = str(x)
|
||||
return BER_tagging_enc(s, implicit_tag=self.implicit_tag,
|
||||
explicit_tag=self.explicit_tag)
|
||||
def randval(self):
|
||||
return packet.fuzz(self.cls())
|
||||
|
||||
class ASN1F_BIT_STRING_ENCAPS(ASN1F_BIT_STRING):
|
||||
"""
|
||||
|
|
|
@ -190,3 +190,17 @@ s = str(X509_CRL())
|
|||
str(X509_CRL(s)) == s
|
||||
|
||||
|
||||
############ Randval tests ###############################################
|
||||
|
||||
= Randval tests : ASN1F_SEQUENCE_OF
|
||||
random.seed(42)
|
||||
r = ASN1F_SEQUENCE_OF("test", [], ASN1P_INTEGER).randval().number
|
||||
assert(isinstance(r, RandNum))
|
||||
int(r) == -16393048219351680611L
|
||||
|
||||
= Randval tests : ASN1F_PACKET
|
||||
random.seed(0xcafecafe)
|
||||
r = ASN1F_PACKET("otherName", None, X509_OtherName).randval()
|
||||
assert(isinstance(r, X509_OtherName))
|
||||
str(r.type_id) == '171.184.10.271'
|
||||
|
||||
|
|
Loading…
Reference in New Issue