All Projects → bnewbold → geniza

bnewbold / geniza

Licence: GPL-3.0 license
hobby implementation of dat in rust

Programming Languages

rust
11053 projects
python
139335 projects - #7 most used programming language

Labels

Projects that are alternatives of or similar to geniza

Random Access Http
Continuous reading from a http(s) url using random offsets and lengths for peers in a distributed system
Stars: ✭ 39 (+21.88%)
Mutual labels:  dat
Dat Keyserver
a distributed PGP keyserver project based on the dat protocol
Stars: ✭ 89 (+178.13%)
Mutual labels:  dat
Hashbase
A Dat-hosting service for multiple users
Stars: ✭ 226 (+606.25%)
Mutual labels:  dat
Datr
R package to interface with the decentralized dat network.
Stars: ✭ 56 (+75%)
Mutual labels:  dat
Datradio
p2p music player for {old} beaker and dat
Stars: ✭ 77 (+140.63%)
Mutual labels:  dat
Mdfreader
Read Measurement Data Format (MDF) versions 3.x and 4.x file formats in python
Stars: ✭ 131 (+309.38%)
Mutual labels:  dat
Dat Desktop
Peer to peer data syncronization
Stars: ✭ 627 (+1859.38%)
Mutual labels:  dat
fixsleep
A page helping people to sleep better
Stars: ✭ 33 (+3.13%)
Mutual labels:  sleep
Blockchain Parser
The simpliest script for parsing Bitcoin blockchain. It made convertion of blk*****.dat files to the simple text.
Stars: ✭ 84 (+162.5%)
Mutual labels:  dat
Enoki
ultralight tools for creating p2p sites
Stars: ✭ 222 (+593.75%)
Mutual labels:  dat
Dat
💾 peer-to-peer sharing & live syncronization of files via command line
Stars: ✭ 8,259 (+25709.38%)
Mutual labels:  dat
Hypertweet
concept tweet -> hypercore thingy
Stars: ✭ 69 (+115.63%)
Mutual labels:  dat
How Dat Works
Protocol documentation for Dat
Stars: ✭ 164 (+412.5%)
Mutual labels:  dat
Hyperdb Examples
a small introduction to getting started with hyperdb
Stars: ✭ 53 (+65.63%)
Mutual labels:  dat
Datbase
[DEPRECATED] Open data sharing powered by Dat
Stars: ✭ 251 (+684.38%)
Mutual labels:  dat
Dat React Native
Browse through the web with the Dat protocol in your device!
Stars: ✭ 25 (-21.87%)
Mutual labels:  dat
Hypercloud
A hosting server for Dat. [ARCHIVED - Use Hashbase instead!]
Stars: ✭ 96 (+200%)
Mutual labels:  dat
dat-storage
Dat specific storage provider for Hyperdrive [ DEPRECATED - More info on active projects and modules at https://dat-ecosystem.org/ ]
Stars: ✭ 36 (+12.5%)
Mutual labels:  dat
dat-wot
[WIP] A decentralized public key network with encryption utilities for data collaboration
Stars: ✭ 52 (+62.5%)
Mutual labels:  dat
Sdk
Write your own dat app!
Stars: ✭ 215 (+571.88%)
Mutual labels:  dat
                  _          
  __ _  ___ _ __ (_)______ _ 
 / _` |/ _ \ '_ \| |_  / _` |
| (_| |  __/ | | | |/ / (_| |
 \__, |\___|_| |_|_/___\__,_|
 |___/                       

this is a poor / partial / non-compliant dat implementation in rust.

it will eat-your-data!

Status

Build Status

  • SLEEP v2 files and registers
    • read/write file headers
    • read/write file chunks as raw bytes
    • pread/pwrite file chunks without seeking
    • read data entries by index
    • append data entries
    • verify entire register (signatures and merkel tree)
    • receive and insert data out of order
    • bitfields
  • Drive metadata and files
    • read full history ("log")
    • read file tree ("ls")
    • import file to register
    • export file from register
    • import/export directories recursively
  • Protocol
    • send/receive encrypted messages to a known host
    • bitfields
  • Discovery
    • centralized DNS
    • mDNS (local DNS)
    • DHT (distributed hash table)
  • Peer Synchronization
    • receive entire register from a known host
    • share (upload) register to a known host
  • Wrapper commands
    • clone
    • share
    • log
    • status
    • add

Differences from dat

Significant simplifications were made compared to the regular dat client:

  • Content data is always stored in the SLEEP directory (content.data), instead of just having the latest data in files in the working directory. This results in data duplication.
  • Sparse registers aren't implemented: full history needs to be present for both metadata and content.
  • Tracking of remote node state (bitfields) is minimized as much as possible.
  • Almost everything is synchronous and single-threaded, so only a single remote node connection at a time is allowed.

Dependencies

Notable Rust Libraries:

  • rust-crypto for hashing (BLAKE2b)
  • sodiumoxide signing (Ed25519) and network stream encryption (XSalsa20)
  • integer-encoding for simple "varints"
  • rust-protobuf for protobuf messages

Requires the libsodium library installed system-wide to run, and header files (libsodium-dev) for now, due to dynamic linking and the simple build configuration. It should be possible to statically link a free-standing executable, and to auto-build the libsodium C library during compilation if it isn't found system-wide.

protobuf encode/decode methods are auto-generated ahead of time using rust-protobuf, so if you're just compiling or installing geniza you don't need any special tools. However, if you change or extend the .proto schema files, you do, along with the protoc tool (sudo apt install protobuf-compiler) and rust plugin protoc-gen-rust (cargo install protobuf). The command to regenerate a single file is:

protoc --rust_out . network_msgs.proto
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].