def slices(): ret = [] for case in seeks(): size = case["input_len"] offsets = case["seek_offsets"] b = input_bytes(size) encoded = bao.bao_encode(b) slices = [] for offset in offsets: slice_bytes = io.BytesIO() slice_len = 2 * CHUNK_SIZE bao.bao_slice(io.BytesIO(encoded), slice_bytes, offset, slice_len) slice_hash = blake2b_hash(slice_bytes.getbuffer()) fields = [ ("start", offset), ("len", slice_len), ("output_len", len(slice_bytes.getbuffer())), ("output_blake2b", slice_hash), ("corruptions", slice_corruption_points(size, offset, slice_len)), ] slices.append(OrderedDict(fields)) fields = [ ("input_len", size), ("bao_hash", bao.bao_hash(io.BytesIO(b)).hex()), ("slices", slices), ] ret.append(OrderedDict(fields)) return ret
def bao_slice_outboard(content, outboard, slice_start, slice_len): output = io.BytesIO() bao.bao_slice(io.BytesIO(content), output, slice_start, slice_len, outboard_stream=io.BytesIO(outboard)) return output.getvalue()
def bao_slice(encoded, slice_start, slice_len): output = io.BytesIO() bao.bao_slice(io.BytesIO(encoded), output, slice_start, slice_len) return output.getvalue()