]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/blob - src/allmydata/uri.py
change uri-packer-unpacker to deal with dictionaries, not fragile tuples
[tahoe-lafs/tahoe-lafs.git] / src / allmydata / uri.py
1
2 from allmydata.util import idlib
3
4 # the URI shall be an ascii representation of the file. It shall contain
5 # enough information to retrieve and validate the contents. It shall be
6 # expressed in a limited character set (namely [TODO]).
7
8 def pack_uri(codec_name, codec_params, tail_codec_params,
9              verifierid, fileid, key,
10              roothash, needed_shares, total_shares, size, segment_size):
11     # applications should pass keyword parameters into this
12     assert isinstance(codec_name, str)
13     assert len(codec_name) < 10
14     assert ":" not in codec_name
15     assert isinstance(codec_params, str)
16     assert ":" not in codec_params
17     assert isinstance(tail_codec_params, str)
18     assert ":" not in tail_codec_params
19     assert isinstance(verifierid, str)
20     assert len(verifierid) == 20 # sha1 hash
21     assert isinstance(fileid, str)
22     assert len(fileid) == 20 # sha1 hash
23     assert isinstance(key, str)
24     assert len(key) == 16 # AES-128
25     return "URI:%s:%s:%s:%s:%s:%s:%s:%s:%s:%s:%s" % (codec_name, codec_params, tail_codec_params, idlib.b2a(verifierid), idlib.b2a(fileid), idlib.b2a(key), idlib.b2a(roothash), needed_shares, total_shares, size, segment_size)
26
27
28 def unpack_uri(uri):
29     assert uri.startswith("URI:")
30     d = {}
31     header, d['codec_name'], d['codec_params'], d['tail_codec_params'], verifierid_s, fileid_s, key_s, roothash_s, needed_shares_s, total_shares_s, size_s, segment_size_s = uri.split(":")
32     assert header == "URI"
33     d['verifierid'] = idlib.a2b(verifierid_s)
34     d['fileid'] = idlib.a2b(fileid_s)
35     d['key'] = idlib.a2b(key_s)
36     d['roothash'] = idlib.a2b(roothash_s)
37     d['needed_shares'] = int(needed_shares_s)
38     d['total_shares'] = int(total_shares_s)
39     d['size'] = int(size_s)
40     d['segment_size'] = int(segment_size_s)
41     return d
42
43