Source code for boofuzz.blocks.aligned

from ..fuzzable_block import FuzzableBlock


[docs] class Aligned(FuzzableBlock): """FuzzableBlock that aligns its contents to a certain number of bytes :type name: str, optional :param name: Name, for referencing later. Names should always be provided, but if not, a default name will be given, defaults to None :type modulus: int, optional :param modulus: Pad length of child content to this many bytes, defaults to 1 :type request: boofuzz.Request, optional :param request: Request this block belongs to :type pattern: bytes, optional :param pattern: Pad using these byte(s) :type fuzzable: bool, optional :param fuzzable: Enable/disable fuzzing of this block, defaults to true """ def __init__(self, name=None, modulus=1, request=None, pattern=b"\x00", *args, **kwargs): super(Aligned, self).__init__(name=name, default_value=None, request=request, *args, **kwargs) self._modulus = modulus self._pattern = pattern def encode(self, value, mutation_context): child_data = self.get_child_data(mutation_context=mutation_context) padding_length = self._modulus - (len(child_data) % self._modulus) a, b = divmod(padding_length, len(self._pattern)) return child_data + self._pattern * a + self._pattern[:b]