berty

module
v2.50.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 17, 2020 License: Apache-2.0, MIT

README ΒΆ

Berty

🀝 Anti-censorship and anti-surveillance communication protocol

Build Status CodeFactor GitHub version

berty.tech β€’ Twitter β€’ Matrix β€’ Discord β€’ GitHub


Introduction

Berty is an anonymous, secure, peer-to-peer protocol that doesn't need an internet connection to function.

There is a protocol that uses advanced cryptography and a messenger app that is built on top of the protocol.

  • No phone number or email required to create an account
  • End-to-end encryption used to encrypt all conversations
  • Focus on leaking as little metadata as possible
  • Decentralized, distributed, serverless
  • No concensus, no blockchain
  • No internet connection required (uses the BLE technology and mDNS)
  • Free forever, no data stored, transparent code, open-source

Berty is currently developed by Berty Technologies, a French non-profit organization.

Usages:

  • When you need to share sensitive information.
  • If you want to communicate with good anonymity.
  • If you don't want to use servers, because you want full control of your data.
  • In countries that have censorship and restrict network access and usage.
  • In areas with weak or no connection or cell reception.
  • When you travel and you want to communicate safely through insecure public connections.

Note: the project is made by a small team of humans who are not experts and who make mistakes. Please, do not hesitate to point out if you notice a bug or something missing. See the contribute section below.

We cannot promise to give you the best app, but we can commit to doing our best in that direction.

Development Status

Berty is still under active development and should not be used to exchange important data.

The current Berty Chat implementation is not using the Berty Protocol yet, but OrbitDB directly. Which means the encryption is not safe, but the good news is that the current Berty Chat app is already a P2P one!

The current Berty Protocol is partially implemented. The API will certainly change in a near future, so be prepared to have breaking changes if you start using it right now.

We will open betas for the different packages and apps soon, so anyone will be able to give it a try even without the coding skills. Subscribe to our newsletter if you want to be notified.

Note: this is an ongoing work. The repos are being opened progressively, and there will be more changes and updates.

Under the hood

TODO: add a high-level schema of how things are connected together

Berty Protocol

go.dev reference Code coverage

A generic SDK that allows developers to write P2P applications. It contains everything needed (encryption, identities, network routing, group management, account management, device management, application lifecycle) so you can just focus on the high-level features of your app.

The main concept of the Berty Protocol is the "group", a virtual place where multiple devices can share messages and metadata using OrbitDB, which itself relies on IPFS.

TODO: add usage examples

Get it: go get -u berty.tech/berty/v2

Berty Chat

A chat application written in React Native, that uses the Berty Protocol using gomobile-ipfs, which, in its turn, is using gomobile.

Main items in the repo

  • ./go: Where all the Golang code belongs.
    • ./go/pkg/bertyprotocol: Berty Protocol Golang SDK to create secure and autonomous groups using IPFS.
    • ./go/framework/bertybridge: gomobile entrypoint.
    • ./go/cmd/berty: Main Berty CLI, containing:
      • berty daemon: Runs the whole Berty Protocol instance.
      • berty demo: Development/debugging subcommand which aims to show the internal features more easily.
      • berty mini: Simple CLI chat app using Berty Protocol.
    • ./go/cmd/rdvp: A Rendez-Vous Point server.
  • ./js: Where all the Javascript/Typescript code belongs, containing:
    • The Berty Chat application, written in React Native.
  • ./docs: Mostly auto-generated documentation.

Philosophy

We want to contribute to the world of free, secure communication without fear of censorship and surveillance.

Open source is more secure, since anyone can examine the code, improve it and maintain it. Our ultimate goal is to completely lose control of Berty and have it evolve as a global community project.

TODO: add info about Berty community

Contributing

Please do!

Use it, fork it, fix it - it's free.

If you like to code in Go, Typescript, Java, Swift, have a look at one of our repos.

If you code in any other language you can also help us by adding tooling, SDKs, bridges.

If you like to translate, draw, make videos or have ideas for the content, you can contribute on our repos, we have a dedicated assets repo for our medias.

TODO: add info about beta testing

We are currently setting up a goodies store and a donation page so you can help us with money if you don't have time.

And finally, you can help us by spreading the word about us to your peers.


Thank you, and feel free to contact us or open the GitHub issues if you want more details.

Read our contribute page on berty.tech.

Other resources

Contact

TODO: add community contact info

See all our available contact methods on the contact page of our website.

Licensing

Β© 2018-2020 Berty Technologies h0

Licensed under the Apache License, Version 2.0 (LICENSE-APACHE) or the MIT license (LICENSE-MIT), at your option. See the COPYRIGHT file for more details.

Directories ΒΆ

Path Synopsis
go
cmd/berty
Berty is the main CLI entrypoint to manage the Berty ecosystem (client, server, relay, dev)
Berty is the main CLI entrypoint to manage the Berty ecosystem (client, server, relay, dev)
cmd/berty/mini
Package mini contains main helpers to start a term-based Berty mini client
Package mini contains main helpers to start a term-based Berty mini client
cmd/rdvp
rdvp is a service to hold Berty's rendezvous point for faster peer discovery
rdvp is a service to hold Berty's rendezvous point for faster peer discovery
framework/bertybridge
Package bertybridge is the main gomobile entrypoint, used to generate iOS and Android frameworks
Package bertybridge is the main gomobile entrypoint, used to generate iOS and Android frameworks
internal/cryptoutil
Package cryptoutil contains generic & stateless crypto helpers
Package cryptoutil contains generic & stateless crypto helpers
internal/gomodhack
Package gomodhack ensures that `go mod` detect some required dependencies This package should not be imported directly
Package gomodhack ensures that `go mod` detect some required dependencies This package should not be imported directly
internal/grpcutil
Package grpcutil contains gRPC lazy codecs, messages and a pipe-based listener
Package grpcutil contains gRPC lazy codecs, messages and a pipe-based listener
internal/handshake
Package handshake implements a capability-based handshake Handshake Sequence Diagram: --------------------------- Handshake vastely inspired by Scuttlebutt's Capability-based Handshake https://scuttlebot.io/more/protocols/shs.pdf - a, b are ephemeral key pairs generated by respectively Requester and Responder.
Package handshake implements a capability-based handshake Handshake Sequence Diagram: --------------------------- Handshake vastely inspired by Scuttlebutt's Capability-based Handshake https://scuttlebot.io/more/protocols/shs.pdf - a, b are ephemeral key pairs generated by respectively Requester and Responder.
internal/ipfsutil
Package ipfsutil contains helpers around IPFS (logging, datastore, networking, core API, ...)
Package ipfsutil contains helpers around IPFS (logging, datastore, networking, core API, ...)
internal/testutil
Package testutil contains testing helpers (logging, slow skipping)
Package testutil contains testing helpers (logging, slow skipping)
internal/tinder
Package tinder is a multi-driver service backed by a cache β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Tinder β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”Œβ”€β”€β”€β”€β–Άβ”‚ Driver DHT Ipfs β”‚ β”‚ Advertise │▢┼───┐ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ Backoff Cache β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”œβ”€β”€β”€β”€β–Άβ”‚ Discover │──┐ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”œβ”€β”€β”€β”€β–Άβ”‚ Driver DHT Berty β”‚ β”‚ FindPeers β”‚β–Άβ”Όβ”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚Driver Manager β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β–Άβ”‚ (MultiDriver) │─┼─── β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”œβ”€β”€β”€β”€β–Άβ”‚Driver RendezVousPoint β”‚ β”‚ Unregister β”‚β–Άβ”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ └────▢│Driver Local (ble/mdns)β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Package tinder is a multi-driver service backed by a cache β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Tinder β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”Œβ”€β”€β”€β”€β–Άβ”‚ Driver DHT Ipfs β”‚ β”‚ Advertise │▢┼───┐ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ Backoff Cache β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”œβ”€β”€β”€β”€β–Άβ”‚ Discover │──┐ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”œβ”€β”€β”€β”€β–Άβ”‚ Driver DHT Berty β”‚ β”‚ FindPeers β”‚β–Άβ”Όβ”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚Driver Manager β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β–Άβ”‚ (MultiDriver) │─┼─── β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”œβ”€β”€β”€β”€β–Άβ”‚Driver RendezVousPoint β”‚ β”‚ Unregister β”‚β–Άβ”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ └────▢│Driver Local (ble/mdns)β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
pkg/banner
Package banner generates ASCII picture of the Berty logo with a message /\ /\ / /\ ______ Lorem ipsum dolor sit amet, consectetur / /\/ / \/ | \ adipiscing elit, sed do eiusmod tempor | | \/ | ()| | incididunt ut labore et dolore magna aliqua.
Package banner generates ASCII picture of the Berty logo with a message /\ /\ / /\ ______ Lorem ipsum dolor sit amet, consectetur / /\/ / \/ | \ adipiscing elit, sed do eiusmod tempor | | \/ | ()| | incididunt ut labore et dolore magna aliqua.
pkg/bertydemo
Package bertydemo contains experimental code that may be used to test/show some high-level or low-level Berty related code in a CLI or a mobile app There are very few chances that you need to import it.
Package bertydemo contains experimental code that may be used to test/show some high-level or low-level Berty related code in a CLI or a mobile app There are very few chances that you need to import it.
pkg/bertyprotocol
Package bertyprotocol contains code for integrating the Berty protocol in your project See https://berty.tech/protocol for more information.
Package bertyprotocol contains code for integrating the Berty protocol in your project See https://berty.tech/protocol for more information.
pkg/bertytypes
This package is generated with Protobuf.
This package is generated with Protobuf.
pkg/errcode
Package errcode contains the list of Berty error codes
Package errcode contains the list of Berty error codes

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL