Merge pull request #438 from mtury/master

Fix issue #408 : complex ASN1 fields randval()
This commit is contained in:
Guillaume Valadon 2017-02-03 16:25:26 +01:00 committed by GitHub
commit 3642cb9533
2 changed files with 27 additions and 2 deletions

View File

@ -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):
"""

View File

@ -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'