Skip to content
Snippets Groups Projects
Commit 9888e6c4 authored by mtu's avatar mtu
Browse files

Fix complex ASN1 fields randval()

parent b2884fde
No related branches found
No related tags found
No related merge requests found
......@@ -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'
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment