def __init__(self, key, default_value, length=None, encoder=ENC_STR_DEFAULT, fuzzable=False, name=None): ''' :type key: str :param key: key for the data in the session_data dictionary :type default_value: str :param default_value: default value of the field :param length: length of the field in bytes. must be set if fuzzable=True (default: None) :type encoder: :class:`~kitty.model.low_levele.encoder.StrEncoder` :param encoder: encoder for the field (default: ENC_STR_DEFAULT) :param fuzzable: is field fuzzable (default: False) :param name: name of the object (default: None) :examples: :: Dynamic(key='session id', default_value='\x01\x02\x03\x04') Dynamic(key='session id', default_value='\x01\x02\x03\x04', length=4, fuzzable=True) ''' self._key = key super(Dynamic, self).__init__(value=default_value, encoder=encoder, fuzzable=fuzzable, name=name) self._length = length if self._fuzzable: kassert.is_int(self._length) self._num_mutations = self._length * 8 self._last_value = default_value
def __init__(self, key, default_value, length=None, encoder=ENC_STR_DEFAULT, fuzzable=False, name=None): ''' :type key: str :param key: key for the data in the session_data dictionary :type default_value: str :param default_value: default value of the field :param length: length of the field in bytes. must be set if fuzzable=True (default: None) :type encoder: :class:`~kitty.model.low_level.encoder.StrEncoder` :param encoder: encoder for the field (default: ENC_STR_DEFAULT) :param fuzzable: is field fuzzable (default: False) :param name: name of the object (default: None) :examples: :: Dynamic(key='session id', default_value='\x01\x02\x03\x04') Dynamic(key='session id', default_value='\x01\x02\x03\x04', length=4, fuzzable=True) ''' self._key = key super(Dynamic, self).__init__(value=default_value, encoder=encoder, fuzzable=fuzzable, name=name) self._length = length if self._fuzzable: kassert.is_int(self._length) self._num_mutations = self._length * 8 self._last_value = default_value
def _validate_lengths(self, min_length, max_length): kassert.is_int(min_length) kassert.is_int(max_length) if min_length > max_length: raise KittyException('min_length(%d) > max_length(%d)' % (min_length, max_length)) elif min_length < 0: raise KittyException('min_length(%d) < 0' % (min_length)) elif max_length <= 0: raise KittyException('max_length(%d) < 0' % (max_length))
def _check_times(self, min_times, max_times, step): ''' Make sure that the arguments are valid :raises: KittyException if not valid ''' kassert.is_int(min_times) kassert.is_int(max_times) kassert.is_int(step) if not((min_times >= 0) and (max_times > 0) and (max_times >= min_times) and (step > 0)): raise KittyException('one of the checks failed: min_times(%d)>=0, max_times(%d)>0, max_times>=min_times, step > 0' % (min_times, max_times))