mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-02-21 02:01:31 +00:00
mutable.py: fix padding/shape-of-input-data to zfec
This commit is contained in:
parent
f34b8b251a
commit
f6451deb74
@ -892,27 +892,24 @@ class Publish:
|
||||
# now apply FEC
|
||||
self.MAX_SEGMENT_SIZE = 1024*1024
|
||||
data_length = len(crypttext)
|
||||
if len(crypttext) < 10:
|
||||
# TODO: FEC doesn't handle short (or empty) strings very well, so
|
||||
# give it something longer and we'll trim the results later. For
|
||||
# some reason I suspect the lower limit is k**2
|
||||
crypttext = crypttext + "\x00"*(10-len(crypttext))
|
||||
|
||||
segment_size = min(self.MAX_SEGMENT_SIZE, len(crypttext))
|
||||
# this must be a multiple of self.required_shares
|
||||
segment_size = mathutil.next_multiple(segment_size, required_shares)
|
||||
self.num_segments = mathutil.div_ceil(len(crypttext), segment_size)
|
||||
assert self.num_segments == 1 # SDMF restrictions
|
||||
if segment_size:
|
||||
self.num_segments = mathutil.div_ceil(len(crypttext), segment_size)
|
||||
else:
|
||||
self.num_segments = 0
|
||||
assert self.num_segments in [0, 1,] # SDMF restrictions
|
||||
fec = codec.CRSEncoder()
|
||||
fec.set_params(segment_size, required_shares, total_shares)
|
||||
piece_size = fec.get_block_size()
|
||||
crypttext_pieces = []
|
||||
for offset in range(0, len(crypttext), piece_size):
|
||||
crypttext_pieces = [None] * required_shares
|
||||
for i in range(len(crypttext_pieces)):
|
||||
offset = i * piece_size
|
||||
piece = crypttext[offset:offset+piece_size]
|
||||
if len(piece) < piece_size:
|
||||
pad_size = piece_size - len(piece)
|
||||
piece = piece + "\x00"*pad_size
|
||||
crypttext_pieces.append(piece)
|
||||
piece = piece + "\x00"*(piece_size - len(piece)) # padding
|
||||
crypttext_pieces[i] = piece
|
||||
assert len(piece) == piece_size
|
||||
|
||||
d = fec.encode(crypttext_pieces)
|
||||
|
Loading…
x
Reference in New Issue
Block a user