Commit Graph

32 Commits

Author SHA1 Message Date
Brian Warner
fae4e8f9a3 download.py: refactor get-thingA-from-somebody to reuse the logic for other things 2007-06-06 23:50:02 -07:00
Brian Warner
3dfd26970b move validation data to thingA, URI has storage_index plus thingA hash
This (compatibility-breaking) change moves much of the validation data and
encoding parameters out of the URI and into the so-called "thingA" block
(which will get a better name as soon as we find one we're comfortable with).
The URI retains the "storage_index" (a generalized term for the role that
we're currently using the verifierid for, the unique index for each file
that gets used by storage servers to decide which shares to return), the
decryption key, the needed_shares/total_shares counts (since they affect
peer selection), and the hash of the thingA block.

This shortens the URI and lets us add more kinds of validation data without
growing the URI (like plaintext merkle trees, to enable strong incremental
plaintext validation), at the cost of maybe 150 bytes of alacrity. Each
storage server holds an identical copy of the thingA block.

This is an incompatible change: new messages have been added to the storage
server interface, and the URI format has changed drastically.
2007-06-01 18:48:01 -07:00
Brian Warner
7124f94461 download.py: refactor bucket_failed() a bit, add some docs 2007-05-31 18:31:36 -07:00
Brian Warner
05163ec8e1 change uri-packer-unpacker to deal with dictionaries, not fragile tuples 2007-05-23 11:18:49 -07:00
Brian Warner
4b2298937b use real encryption, generate/store/verify verifierid and fileid 2007-04-25 17:53:10 -07:00
Brian Warner
80cf789817 download: remove unused import 2007-04-17 21:11:20 -07:00
Brian Warner
b76aa1ce17 download: oops, NotEnoughHashesError comes from hashtree, not hashutil 2007-04-17 20:37:51 -07:00
Brian Warner
e7ec4ff4e5 factor out the tagged hash function used for subshares/blocks 2007-04-17 20:27:56 -07:00
Brian Warner
76e28b3484 comment out some verbose log messages, add commented-out new ones 2007-04-17 20:25:52 -07:00
Brian Warner
c3268ca394 download.py: don't truncate tail segments that are the same size as all the others 2007-04-17 13:39:35 -07:00
Brian Warner
6bdabd2cea download: remove some leftover (and not very useful) debug logging 2007-04-16 17:17:57 -07:00
Brian Warner
42179e5ae2 download: verify that bad blocks or hashes are caught by the download process 2007-04-16 16:30:21 -07:00
Brian Warner
2fef5dac1f download: log more information when hashtree checks fail 2007-04-16 13:08:19 -07:00
Brian Warner
7dabb68a51 download: improve test coverage on our IDownloadTarget classes, make FileHandle return the filehandle when its done so that it is easier to close 2007-04-16 13:07:36 -07:00
Brian Warner
30133a7cdf hash trees: further cleanup, to make sure we're validating the right thing
hashtree.py: improve the methods available for finding out which hash nodes
 are needed. Change set_hashes() to require that every hash provided can
 be validated up to the root.
download.py: validate from the top down, including the URI-derived roothash
 in the share hash tree, and stashing the thus-validated share hash for use
 in the block hash tree.
2007-04-12 19:41:48 -07:00
Brian Warner
d351cd7674 download: always validate the blockhash, and don't let the bucket trick us into not validating hashes 2007-04-12 15:18:46 -07:00
Brian Warner
d8215e0c6f rename chunk.py to hashtree.py 2007-04-12 13:13:25 -07:00
Brian Warner
8f58b30db9 verify hash chains on incoming blocks
Implement enough of chunk.IncompleteHashTree to be usable.
Rearrange download: all block/hash requests now go through
a ValidatedBucket instance, which is responsible for retrieving
and verifying hashes before providing validated data. Download
was changed to use ValidatedBuckets everywhere instead of
unwrapped RIBucketReader references.
2007-04-12 13:07:40 -07:00
Brian Warner
d8b71b85f8 download: retrieve share hashes when downloading. We don't really do much validation with them yet, though. 2007-04-06 22:51:19 -07:00
Zooko O'Whielacronx
077eb7507c assert that only dicts get passed to _got_response() 2007-03-30 18:00:40 -07:00
Brian Warner
7cd9ef3bbf finish making the new encoder/decoder/upload/download work 2007-03-30 16:50:50 -07:00
Brian Warner
234b2f354e add new test for doing an encode/decode round trip, and make it almost work 2007-03-30 13:20:01 -07:00
Zooko O'Whielacronx
f4a718c5b6 finish storage server and write new download 2007-03-30 10:52:19 -07:00
Zooko O'Whielacronx
17299fc96e new upload and storage server 2007-03-29 20:19:52 -07:00
Zooko O'Whielacronx
c427b880d2 update the use of the encoder API in download.py 2007-02-01 16:30:13 -07:00
Brian Warner
ef73ebaf0a download: update all users to match Zooko's change to ICodecDecoder.decode (as it now returns a list instead of a single string) 2007-01-24 17:23:22 -07:00
Brian Warner
430b3a03fc move upload/download interfaces to allmydata.interfaces, let SubTreeMaker assert IDownloader-ness of its 'downloader' argument 2007-01-21 15:01:34 -07:00
Brian Warner
ca3fda3e22 download.py: fix IDownloader to take a URI 2007-01-19 02:17:48 -07:00
Brian Warner
4101bcf218 update URI format, include codec name 2007-01-16 21:29:59 -07:00
Brian Warner
3209fd5e09 rearrange encode/upload, add URIs, switch to ReplicatingEncoder
Added metadata to the bucket store, which is used to hold the share number
(but the bucket doesn't know that, it just gets a string).

Modified the codec interfaces a bit.

Try to pass around URIs to/from download/upload instead of verifierids.
URI format is still in flux.

Change the current (primitive) file encoder to use a ReplicatingEncoder
because it provides ICodecEncoder. We will be moving to the (less primitive)
file encoder (currently in allmydata.encode_new) eventually, but for now
this change lets us test out PyRS or zooko's upcoming C-based RS codec in
something larger than a single unit test. This primitive file encoder only
uses a single segment, and has no merkle trees.

Also added allmydata.util.deferredutil for a DeferredList wrapper that
errbacks (but only when all component Deferreds have fired) if there were
any errors, which unfortunately is not a behavior available from the standard
DeferredList.
2007-01-15 21:22:22 -07:00
Brian Warner
417c17755b use the word 'codec' for erasure coding, for now. 'encode' is used for file-level segmentation/hashing 2007-01-11 20:51:27 -07:00
Brian Warner
3490378551 move all packages into src/, fix allmydata.Crypto build. Now you must perform a 'setup.py build' before using anything, and you must add the build directory (build/lib.linux-i686-2.4) to your PYTHONPATH before doing anything 2006-12-14 03:39:50 -07:00