aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
blob: c304f23bc53bf6e0391f1fc3287b2e1dd8340839 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

                      _          
      __ _  ___ _ __ (_)______ _ 
     / _` |/ _ \ '_ \| |_  / _` |
    | (_| |  __/ | | | |/ / (_| |
     \__, |\___|_| |_|_/___\__,_|
     |___/                       

this is a very poor / partial / non-compliant dat implementation in rust.
it will eat-your-data.

### Progress

- [ ] SLEEP v2 Files
    - [x] read/write file headers
    - [x] read/write file chunks as raw bytes
    - [ ] pread/pwrite file chunks without seeking
    - [x] read data entries by index
    - [ ] append data entries
    - [ ] verify entire register (signatures and merkel tree)
    - [ ] bitfields
- [ ] Drive metadata and files
    - [ ] add file to register
    - [ ] checkout file from register
    - [ ] print file tree ("ls")
    - [ ] add directory recursively
    - [ ] checkout directory recursively
- [ ] Networking
    - [ ] send/receive encrypted messages to a known host
    - [ ] pull register from a known host
    - [ ] sync register to a known host
    - [ ] lookup hosts in DHT swarm by discovery key
- [ ] Wrapper command
    - [ ] clone
    - [ ] share
    - [ ] log
    - [ ] status
    - [ ] add

### Dependencies

While (temporarily?) using Cargo's `[patch]` feature to patch sodiumoxide,
builds require Rust 1.21 (stable circa Oct 2017).

Requires libsodium-dev system-wide (for now).

Notable Rust Libraries:
- rust-crypto for blake2b 
- sodiumoxide Ed25519 (signing) and XSalsa20 (stream)
- integer-encoding for simple varints (network protocol)
- rust-protobuf for protobuf (network protocol)
- ??? for Kademlia Mainline DHT

protobuf code generated with `rust-protobuf`; the `protoc` tool (`sudo apt
install protobuf-compiler`) and rust plugin `protoc-gen-rust` (`cargo install
protobuf`) are only needed when changing .proto files, eg:

    protoc --rust_out . network_proto.proto