Skip to content
Snippets Groups Projects
Commit 3642cb95 authored by Guillaume Valadon's avatar Guillaume Valadon Committed by GitHub
Browse files

Merge pull request #438 from mtury/master

Fix issue #408 : complex ASN1 fields randval()
parents afec3130 9888e6c4
No related branches found
No related tags found
No related merge requests found
...@@ -367,7 +367,7 @@ class ASN1F_SEQUENCE_OF(ASN1F_field): ...@@ -367,7 +367,7 @@ class ASN1F_SEQUENCE_OF(ASN1F_field):
return self.i2m(pkt, s) return self.i2m(pkt, s)
def randval(self): def randval(self):
return packet.fuzz(self.asn1pkt()) return packet.fuzz(self.cls())
def __repr__(self): def __repr__(self):
return "<%s %s>" % (self.__class__.__name__, self.name) return "<%s %s>" % (self.__class__.__name__, self.name)
...@@ -488,7 +488,16 @@ class ASN1F_CHOICE(ASN1F_field): ...@@ -488,7 +488,16 @@ class ASN1F_CHOICE(ASN1F_field):
explicit_tag=exp) explicit_tag=exp)
return BER_tagging_enc(s, explicit_tag=self.explicit_tag) return BER_tagging_enc(s, explicit_tag=self.explicit_tag)
def randval(self): 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): class ASN1F_PACKET(ASN1F_field):
holds_packets = 1 holds_packets = 1
...@@ -520,6 +529,8 @@ class ASN1F_PACKET(ASN1F_field): ...@@ -520,6 +529,8 @@ class ASN1F_PACKET(ASN1F_field):
s = str(x) s = str(x)
return BER_tagging_enc(s, implicit_tag=self.implicit_tag, return BER_tagging_enc(s, implicit_tag=self.implicit_tag,
explicit_tag=self.explicit_tag) explicit_tag=self.explicit_tag)
def randval(self):
return packet.fuzz(self.cls())
class ASN1F_BIT_STRING_ENCAPS(ASN1F_BIT_STRING): class ASN1F_BIT_STRING_ENCAPS(ASN1F_BIT_STRING):
""" """
......
...@@ -190,3 +190,17 @@ s = str(X509_CRL()) ...@@ -190,3 +190,17 @@ s = str(X509_CRL())
str(X509_CRL(s)) == s 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