bertyprotocol

package
v2.320.5 Latest Latest
Warning

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

Go to latest
Published: Nov 19, 2021 License: Apache-2.0, MIT Imports: 98 Imported by: 0

README

Berty go/pkg/bertyprotocol

go.dev reference

Please, read the main README.md file first.

Usage

import "berty.tech/berty/v2/go/pkg/bertyprotocol"

Get the code

git clone https://github.com/berty/berty
cd berty/go/pkg/bertyprotocol

<!--
## Examples

_TODO: add links to internal examples + links to external repos using the protocol_
-->

Documentation

Overview

Package bertyprotocol contains code for integrating the Berty protocol in your project.

See https://berty.tech/protocol for more information.

Index

Examples

Constants

View Source
const (
	NamespaceDeviceKeystore   = "device_keystore"
	NamespaceOrbitDBDatastore = "orbitdb_datastore"
	NamespaceOrbitDBDirectory = "orbitdb"
	NamespaceIPFSDatastore    = "ipfs_datastore"
)
View Source
const (
	TyberEventTinderPeerFound  = "Tinder peer found"
	TyberEventTinderPeerJoined = "Tinder peer joined"
	TyberEventTinderPeerLeft   = "Tinder peer left"
)
View Source
const ClientBufferSize = 4 * 1024 * 1024
View Source
const CurrentGroupVersion = 1

Variables

View Source
var InMemoryDirectory = cacheleveldown.InMemoryDirectory

Functions

func ActivateGroupContext

func ActivateGroupContext(ctx context.Context, gc *GroupContext, contact crypto.PubKey) error

func ConnectAll added in v2.39.0

func ConnectAll(t *testing.T, m libp2p_mocknet.Mocknet)

ConnectAll peers between themselves

func ConnectInLine added in v2.39.0

func ConnectInLine(t *testing.T, m libp2p_mocknet.Mocknet)

func CreatePeersWithGroupTest added in v2.308.0

func CreatePeersWithGroupTest(ctx context.Context, t testing.TB, pathBase string, memberCount int, deviceCount int) ([]*mockedPeer, crypto.PrivKey, func())

func DefaultOrbitDBOptions added in v2.32.1

func DefaultOrbitDBOptions(g *protocoltypes.Group, options *orbitdb.CreateDBOptions, keystore *BertySignedKeyStore, storeType string, groupOpenMode GroupOpenMode) (*orbitdb.CreateDBOptions, error)

func FillMessageKeysHolderUsingNewData

func FillMessageKeysHolderUsingNewData(ctx context.Context, gc *GroupContext) <-chan crypto.PubKey

func FillMessageKeysHolderUsingPreviousData

func FillMessageKeysHolderUsingPreviousData(ctx context.Context, gc *GroupContext) <-chan crypto.PubKey

func FilterGroupForReplication added in v2.318.0

func FilterGroupForReplication(m *protocoltypes.Group) (*protocoltypes.Group, error)

func MetadataStoreAddDeviceToGroup added in v2.308.0

func MetadataStoreAddDeviceToGroup(ctx context.Context, m *MetadataStore, g *protocoltypes.Group, md *cryptoutil.OwnMemberDevice) (operation.Operation, error)

func MetadataStoreSendSecret added in v2.308.0

func NewDeviceSecret

func NewDeviceSecret() (*protocoltypes.DeviceSecret, error)

func NewGroupMultiMember

func NewGroupMultiMember() (*protocoltypes.Group, crypto.PrivKey, error)

NewGroupMultiMember creates a new Group object and an invitation to be used by the first member of the group

func NewOrbitDatastoreCache added in v2.32.1

func NewOrbitDatastoreCache(ds datastore.Batching) cache.Interface

func NewSimpleAccessController added in v2.32.1

NewSimpleAccessController Returns a non configurable access controller

func PushSealTokenForServer added in v2.308.0

func RestoreAccountExport added in v2.189.0

func RestoreAccountExport(ctx context.Context, reader io.Reader, coreAPI ipfs_interface.CoreAPI, odb *BertyOrbitDB, logger *zap.Logger, handlers ...RestoreAccountHandler) error

func SealOutOfStoreMessageEnvelope added in v2.311.2

func SealOutOfStoreMessageEnvelope(id cid.Cid, env *protocoltypes.MessageEnvelope, headers *protocoltypes.MessageHeaders, g *protocoltypes.Group) (*pushtypes.OutOfStoreMessageEnvelope, error)

func SendSecretsToExistingMembers

func SendSecretsToExistingMembers(ctx context.Context, gctx *GroupContext, contact crypto.PubKey) <-chan crypto.PubKey

func TagGroupContextPeers added in v2.184.0

func TagGroupContextPeers(ctx context.Context, gc *GroupContext, ipfsCoreAPI ipfsutil.ExtendedCoreAPI, weight int)

func TestHelperIPFSSetUp added in v2.311.2

func WatchNewMembersAndSendSecrets

func WatchNewMembersAndSendSecrets(ctx context.Context, logger *zap.Logger, gctx *GroupContext) <-chan crypto.PubKey

Types

type AccountContact added in v2.308.0

type AccountContact struct {
	// contains filtered or unexported fields
}

type AccountKeys

type AccountKeys interface {
	AccountPrivKey() (crypto.PrivKey, error)
	AccountProofPrivKey() (crypto.PrivKey, error)
	DevicePrivKey() (crypto.PrivKey, error)
	ContactGroupPrivKey(pk crypto.PubKey) (crypto.PrivKey, error)
	MemberDeviceForGroup(g *protocoltypes.Group) (*cryptoutil.OwnMemberDevice, error)
}

type BertyOrbitDB

type BertyOrbitDB struct {
	baseorbitdb.BaseOrbitDB
	// contains filtered or unexported fields
}

func NewBertyOrbitDB added in v2.141.0

func NewBertyOrbitDB(ctx context.Context, ipfs coreapi.CoreAPI, options *NewOrbitDBOptions) (*BertyOrbitDB, error)

func NewTestOrbitDB added in v2.311.2

func NewTestOrbitDB(ctx context.Context, t *testing.T, logger *zap.Logger, node ipfsutil.CoreAPIMock, baseDS datastore.Batching) *BertyOrbitDB

func (*BertyOrbitDB) IsGroupLoaded added in v2.311.2

func (s *BertyOrbitDB) IsGroupLoaded(groupID string) bool

func (*BertyOrbitDB) OpenGroup

func (*BertyOrbitDB) OpenGroupReplication added in v2.311.2

func (s *BertyOrbitDB) OpenGroupReplication(ctx context.Context, g *protocoltypes.Group, options *orbitdb.CreateDBOptions) (iface.Store, iface.Store, error)

func (*BertyOrbitDB) SetGroupSigPubKey added in v2.141.0

func (s *BertyOrbitDB) SetGroupSigPubKey(groupID string, pubKey crypto.PubKey) error

SetGroupSigPubKey registers a new group signature pubkey, mainly used to replicate a store data without needing to access to its content

type BertySignedKeyStore added in v2.32.1

type BertySignedKeyStore struct {
	sync.Map
}

func (*BertySignedKeyStore) CreateKey added in v2.32.1

func (s *BertySignedKeyStore) CreateKey(id string) (crypto.PrivKey, error)

func (*BertySignedKeyStore) GetKey added in v2.32.1

func (s *BertySignedKeyStore) GetKey(id string) (crypto.PrivKey, error)

func (*BertySignedKeyStore) HasKey added in v2.32.1

func (s *BertySignedKeyStore) HasKey(id string) (bool, error)

func (*BertySignedKeyStore) SetKey added in v2.32.1

func (s *BertySignedKeyStore) SetKey(pk crypto.PrivKey) error

func (*BertySignedKeyStore) Sign added in v2.32.1

func (s *BertySignedKeyStore) Sign(privKey crypto.PrivKey, bytes []byte) ([]byte, error)

func (*BertySignedKeyStore) Verify added in v2.32.1

func (s *BertySignedKeyStore) Verify(signature []byte, publicKey crypto.PubKey, data []byte) error

type Client

type Client interface {
	protocoltypes.ProtocolServiceClient

	Close() error
}

func NewClient added in v2.39.0

func NewClient(ctx context.Context, svc Service, clientOpts []grpc.DialOption, serverOpts []grpc.ServerOption) (Client, error)

func NewClientFromServer added in v2.39.0

func NewClientFromServer(ctx context.Context, s *grpc.Server, svc Service, opts ...grpc.DialOption) (Client, error)

func TestingClient

func TestingClient(ctx context.Context, t *testing.T, svc Service, clientOpts []grpc.DialOption, serverOpts []grpc.ServerOption) (client Client, cleanup func())

func TestingClientFromServer added in v2.39.0

func TestingClientFromServer(ctx context.Context, t *testing.T, s *grpc.Server, svc Service, dialOpts ...grpc.DialOption) (client Client, cleanup func())

type ConnectTestingProtocolFunc added in v2.266.2

type ConnectTestingProtocolFunc func(*testing.T, libp2p_mocknet.Mocknet)

Connect Peers Helper

type EventMetadataReceived added in v2.66.1

type EventMetadataReceived struct {
	MetaEvent *protocoltypes.GroupMetadataEvent
	Event     proto.Message
}

type GroupContext added in v2.308.0

type GroupContext struct {
	// contains filtered or unexported fields
}

func NewContextGroup added in v2.308.0

func NewContextGroup(group *protocoltypes.Group, metadataStore *MetadataStore, messageStore *MessageStore, messageKeystore *cryptoutil.MessageKeystore, memberDevice *cryptoutil.OwnMemberDevice, logger *zap.Logger) *GroupContext

func (*GroupContext) Close added in v2.308.0

func (gc *GroupContext) Close() error

func (*GroupContext) DevicePubKey added in v2.308.0

func (gc *GroupContext) DevicePubKey() crypto.PubKey

func (*GroupContext) Group added in v2.308.0

func (gc *GroupContext) Group() *protocoltypes.Group

func (*GroupContext) MemberPubKey added in v2.308.0

func (gc *GroupContext) MemberPubKey() crypto.PubKey

func (*GroupContext) MessageKeystore added in v2.308.0

func (gc *GroupContext) MessageKeystore() *cryptoutil.MessageKeystore

func (*GroupContext) MessageStore added in v2.308.0

func (gc *GroupContext) MessageStore() *MessageStore

func (*GroupContext) MetadataStore added in v2.308.0

func (gc *GroupContext) MetadataStore() *MetadataStore

type GroupOpenMode added in v2.146.0

type GroupOpenMode uint64
const (
	GroupOpenModeUndefined GroupOpenMode = iota
	GroupOpenModeReplicate
	GroupOpenModeWrite
)

type MemberDevice

type MemberDevice struct {
	Member crypto.PubKey
	Device crypto.PubKey
	Secret *protocoltypes.DeviceSecret
}

MemberDevice is a remote device part of a group

type MessageStore

type MessageStore struct {
	basestore.BaseStore
	// contains filtered or unexported fields
}

FIXME: replace cache by a circular buffer to avoid an attack by RAM saturation

func (*MessageStore) AddMessage

func (m *MessageStore) AddMessage(ctx context.Context, payload []byte, attachmentsCIDs [][]byte) (operation.Operation, error)

func (*MessageStore) GetMessageByCID added in v2.308.0

func (m *MessageStore) GetMessageByCID(c cid.Cid) (*protocoltypes.MessageEnvelope, *protocoltypes.MessageHeaders, error)

func (*MessageStore) GetOutOfStoreMessageEnvelope added in v2.308.0

func (m *MessageStore) GetOutOfStoreMessageEnvelope(ctx context.Context, c cid.Cid) (*pushtypes.OutOfStoreMessageEnvelope, error)

func (*MessageStore) ListEvents added in v2.308.0

func (m *MessageStore) ListEvents(ctx context.Context, since, until []byte, reverse bool) (<-chan *protocoltypes.GroupMessageEvent, error)

FIXME: use iterator instead to reduce resource usage (require go-ipfs-log improvements)

type MetadataStore

type MetadataStore struct {
	basestore.BaseStore
	// contains filtered or unexported fields
}

func (*MetadataStore) AddDeviceToGroup

func (m *MetadataStore) AddDeviceToGroup(ctx context.Context) (operation.Operation, error)

func (*MetadataStore) ClaimGroupOwnership

func (m *MetadataStore) ClaimGroupOwnership(ctx context.Context, groupSK crypto.PrivKey) (operation.Operation, error)

func (*MetadataStore) ContactBlock

func (m *MetadataStore) ContactBlock(ctx context.Context, pk crypto.PubKey) (operation.Operation, error)

ContactBlock indicates the payload includes that the deviceKeystore has blocked a contact

func (*MetadataStore) ContactRequestDisable

func (m *MetadataStore) ContactRequestDisable(ctx context.Context) (operation.Operation, error)

ContactRequestDisable indicates the payload includes that the deviceKeystore has disabled incoming contact requests

func (*MetadataStore) ContactRequestEnable

func (m *MetadataStore) ContactRequestEnable(ctx context.Context) (operation.Operation, error)

ContactRequestEnable indicates the payload includes that the deviceKeystore has enabled incoming contact requests

func (*MetadataStore) ContactRequestIncomingAccept

func (m *MetadataStore) ContactRequestIncomingAccept(ctx context.Context, pk crypto.PubKey) (operation.Operation, error)

ContactRequestIncomingAccept indicates the payload includes that the deviceKeystore has accepted a contact request

func (*MetadataStore) ContactRequestIncomingDiscard

func (m *MetadataStore) ContactRequestIncomingDiscard(ctx context.Context, pk crypto.PubKey) (operation.Operation, error)

ContactRequestIncomingDiscard indicates the payload includes that the deviceKeystore has ignored a contact request

func (*MetadataStore) ContactRequestIncomingReceived

func (m *MetadataStore) ContactRequestIncomingReceived(ctx context.Context, contact *protocoltypes.ShareableContact) (operation.Operation, error)

ContactRequestIncomingReceived indicates the payload includes that the deviceKeystore has received a contact request

func (*MetadataStore) ContactRequestOutgoingEnqueue

func (m *MetadataStore) ContactRequestOutgoingEnqueue(ctx context.Context, contact *protocoltypes.ShareableContact, ownMetadata []byte) (operation.Operation, error)

ContactRequestOutgoingEnqueue indicates the payload includes that the deviceKeystore will attempt to send a new contact request

func (*MetadataStore) ContactRequestOutgoingSent

func (m *MetadataStore) ContactRequestOutgoingSent(ctx context.Context, pk crypto.PubKey) (operation.Operation, error)

ContactRequestOutgoingSent indicates the payload includes that the deviceKeystore has sent a contact request

func (*MetadataStore) ContactRequestReferenceReset

func (m *MetadataStore) ContactRequestReferenceReset(ctx context.Context) (operation.Operation, error)

ContactRequestReferenceReset indicates the payload includes that the deviceKeystore has a new contact request reference

func (*MetadataStore) ContactSendAliasKey

func (m *MetadataStore) ContactSendAliasKey(ctx context.Context) (operation.Operation, error)

func (*MetadataStore) ContactUnblock

func (m *MetadataStore) ContactUnblock(ctx context.Context, pk crypto.PubKey) (operation.Operation, error)

ContactUnblock indicates the payload includes that the deviceKeystore has unblocked a contact

func (*MetadataStore) DevicePK added in v2.311.2

func (m *MetadataStore) DevicePK() (crypto.PubKey, error)

func (*MetadataStore) GetContactFromGroupPK added in v2.308.0

func (m *MetadataStore) GetContactFromGroupPK(groupPK []byte) *protocoltypes.ShareableContact

func (*MetadataStore) GetDevicesForMember

func (m *MetadataStore) GetDevicesForMember(pk crypto.PubKey) ([]crypto.PubKey, error)

func (*MetadataStore) GetIncomingContactRequestsStatus

func (m *MetadataStore) GetIncomingContactRequestsStatus() (bool, *protocoltypes.ShareableContact)

func (*MetadataStore) GetMemberByDevice

func (m *MetadataStore) GetMemberByDevice(pk crypto.PubKey) (crypto.PubKey, error)

func (*MetadataStore) GetPushTokenForDevice added in v2.311.2

func (m *MetadataStore) GetPushTokenForDevice(d crypto.PubKey) (*protocoltypes.PushMemberTokenUpdate, error)

func (*MetadataStore) GetRequestOwnMetadataForContact added in v2.308.0

func (m *MetadataStore) GetRequestOwnMetadataForContact(pk []byte) ([]byte, error)

func (*MetadataStore) Group added in v2.311.2

func (m *MetadataStore) Group() *protocoltypes.Group

func (*MetadataStore) GroupJoin

GroupJoin indicates the payload includes that the deviceKeystore has joined a group

func (*MetadataStore) GroupLeave

func (m *MetadataStore) GroupLeave(ctx context.Context, pk crypto.PubKey) (operation.Operation, error)

GroupLeave indicates the payload includes that the deviceKeystore has left a group

func (*MetadataStore) ListAdmins

func (m *MetadataStore) ListAdmins() []crypto.PubKey

func (*MetadataStore) ListContacts added in v2.308.0

func (m *MetadataStore) ListContacts() map[string]*AccountContact

func (*MetadataStore) ListContactsByStatus

func (m *MetadataStore) ListContactsByStatus(states ...protocoltypes.ContactState) []*protocoltypes.ShareableContact

func (*MetadataStore) ListDevices

func (m *MetadataStore) ListDevices() []crypto.PubKey

func (*MetadataStore) ListEvents

func (m *MetadataStore) ListEvents(ctx context.Context, since, until []byte, reverse bool) (<-chan *protocoltypes.GroupMetadataEvent, error)

FIXME: use iterator instead to reduce resource usage (require go-ipfs-log improvements)

func (*MetadataStore) ListMembers

func (m *MetadataStore) ListMembers() []crypto.PubKey

func (*MetadataStore) ListMultiMemberGroups

func (m *MetadataStore) ListMultiMemberGroups() []*protocoltypes.Group

func (*MetadataStore) ListOtherMembersDevices added in v2.308.0

func (m *MetadataStore) ListOtherMembersDevices() []crypto.PubKey

func (*MetadataStore) MemberPK added in v2.311.2

func (m *MetadataStore) MemberPK() (crypto.PubKey, error)

func (*MetadataStore) RegisterDevicePushServer added in v2.308.0

func (m *MetadataStore) RegisterDevicePushServer(ctx context.Context, server *protocoltypes.PushServer) (operation.Operation, error)

func (*MetadataStore) RegisterDevicePushToken added in v2.308.0

func (m *MetadataStore) RegisterDevicePushToken(ctx context.Context, token *protocoltypes.PushServiceReceiver) (operation.Operation, error)

func (*MetadataStore) SendAccountServiceTokenAdded added in v2.308.0

func (m *MetadataStore) SendAccountServiceTokenAdded(ctx context.Context, token *protocoltypes.ServiceToken) (operation.Operation, error)

func (*MetadataStore) SendAccountServiceTokenRemoved added in v2.308.0

func (m *MetadataStore) SendAccountServiceTokenRemoved(ctx context.Context, tokenID string) (operation.Operation, error)

func (*MetadataStore) SendAliasProof

func (m *MetadataStore) SendAliasProof(ctx context.Context) (operation.Operation, error)

func (*MetadataStore) SendAppMetadata

func (m *MetadataStore) SendAppMetadata(ctx context.Context, message []byte, attachmentsCIDs [][]byte) (operation.Operation, error)

func (*MetadataStore) SendGroupReplicating added in v2.308.0

func (m *MetadataStore) SendGroupReplicating(ctx context.Context, t *protocoltypes.ServiceToken, endpoint string) (operation.Operation, error)

func (*MetadataStore) SendPushToken added in v2.308.0

func (*MetadataStore) SendSecret

func (m *MetadataStore) SendSecret(ctx context.Context, memberPK crypto.PubKey) (operation.Operation, error)

type NewOrbitDBOptions added in v2.141.0

type NewOrbitDBOptions struct {
	baseorbitdb.NewOrbitDBOptions
	Datastore       datastore.Batching
	MessageKeystore *cryptoutil.MessageKeystore
	DeviceKeystore  cryptoutil.DeviceKeystore
}

type Opts

type Opts struct {
	Logger                 *zap.Logger
	IpfsCoreAPI            ipfsutil.ExtendedCoreAPI
	DeviceKeystore         cryptoutil.DeviceKeystore
	DatastoreDir           string
	RootDatastore          ds.Batching
	GroupDatastore         *cryptoutil.GroupDatastore
	AccountCache           ds.Batching
	MessageKeystore        *cryptoutil.MessageKeystore
	OrbitDB                *BertyOrbitDB
	TinderDriver           tinder.UnregisterDiscovery
	RendezvousRotationBase time.Duration
	Host                   host.Host
	PubSub                 *pubsub.PubSub
	GRPCInsecureMode       bool
	LocalOnly              bool

	PushKey *[cryptoutil.KeySize]byte
	// contains filtered or unexported fields
}

Opts contains optional configuration flags for building a new Client

type RestoreAccountHandler added in v2.200.0

type RestoreAccountHandler struct {
	Handler     func(header *tar.Header, reader *tar.Reader) (bool, error)
	PostProcess func() error
}

type Service added in v2.35.0

type Service interface {
	protocoltypes.ProtocolServiceServer

	Close() error
	Status() Status
	IpfsCoreAPI() ipfs_interface.CoreAPI
}

Service is the main Berty Protocol interface

func New

func New(ctx context.Context, opts Opts) (_ Service, err error)

New initializes a new Service

Example (Basic)
package main

import (
	"context"
	"fmt"

	"berty.tech/berty/v2/go/pkg/bertyprotocol"
	"berty.tech/berty/v2/go/pkg/protocoltypes"
)

func main() {
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()

	client, err := bertyprotocol.New(ctx, bertyprotocol.Opts{})
	if err != nil {
		panic(err)
	}

	ret, err := client.InstanceGetConfiguration(ctx, &protocoltypes.InstanceGetConfiguration_Request{})
	if err != nil {
		panic(err)
	}

	for _, listener := range ret.Listeners {
		if listener == "/p2p-circuit" {
			fmt.Println(listener)
		}
	}

}
Output:

/p2p-circuit

func TestingService added in v2.39.0

func TestingService(ctx context.Context, t *testing.T, opts Opts) (Service, func())

TestingService returns a configured Client struct with in-memory contexts.

type Status

type Status struct {
	DB       error
	Protocol error
}

Status contains results of status checks

type Swiper added in v2.109.0

type Swiper struct {
	// contains filtered or unexported fields
}

func NewSwiper added in v2.109.0

func NewSwiper(logger *zap.Logger, ps *pubsub.PubSub, interval time.Duration) *Swiper

func (*Swiper) Announce added in v2.109.0

func (s *Swiper) Announce(ctx context.Context, topic, seed []byte)

watch looks for peers providing a resource

func (*Swiper) WatchTopic added in v2.109.0

func (s *Swiper) WatchTopic(ctx context.Context, topic, seed []byte, out chan<- peer.AddrInfo, done func())

WatchTopic looks for peers providing a resource. 'done' is used to alert parent when everything is done, to avoid data races.

type TestingOpts added in v2.39.0

type TestingOpts struct {
	Logger         *zap.Logger
	Mocknet        libp2p_mocknet.Mocknet
	RDVPeer        peer.AddrInfo
	DeviceKeystore cryptoutil.DeviceKeystore
	CoreAPIMock    ipfsutil.CoreAPIMock
	OrbitDB        *BertyOrbitDB
	ConnectFunc    ConnectTestingProtocolFunc
	PushSK         *[32]byte
}

type TestingProtocol added in v2.39.0

type TestingProtocol struct {
	Opts *Opts

	Service Service
	Client  Client

	RootDatastore  datastore.Batching
	DeviceKeystore cryptoutil.DeviceKeystore
	IpfsCoreAPI    ipfsutil.ExtendedCoreAPI
	OrbitDB        *BertyOrbitDB
	GroupDatastore *cryptoutil.GroupDatastore
}

func NewTestingProtocol added in v2.39.0

func NewTestingProtocol(ctx context.Context, t *testing.T, opts *TestingOpts, ds datastore.Batching) (*TestingProtocol, func())

func NewTestingProtocolWithMockedPeers added in v2.122.0

func NewTestingProtocolWithMockedPeers(ctx context.Context, t *testing.T, opts *TestingOpts, ds datastore.Batching, amount int) ([]*TestingProtocol, func())

Jump to

Keyboard shortcuts

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