Documentation
¶
Index ¶
- Constants
- Variables
- func DoubleRatchetPayloadLength(geo *geo.Geometry, scheme nike.Scheme) int
- func LoadStateWriter(log *logging.Logger, stateFile string, passphrase []byte) (*StateWriter, *State, error)
- func NewContactExchangeBytes(spoolWriteDescriptor *memspoolClient.SpoolWriteDescriptor, keyExchange []byte) ([]byte, error)
- type CBORState
- type Client
- func (c *Client) AddBlob(id string, blob []byte) error
- func (c *Client) ChangeExpiration(name string, expiration time.Duration) error
- func (c *Client) CreateRemoteSpool() error
- func (c *Client) CreateRemoteSpoolOn(provider string) error
- func (c *Client) DeleteBlob(id string) error
- func (c *Client) DoubleRatchetPayloadLength() int
- func (c *Client) GetBlob(id string) ([]byte, error)
- func (c *Client) GetContacts() map[string]*Contact
- func (c *Client) GetExpiration(name string) (time.Duration, error)
- func (c *Client) GetPKIDocument() (*pki.Document, error)
- func (c *Client) GetSortedConversation(nickname string) Messages
- func (c *Client) GetSpoolProviders() ([]string, error)
- func (c *Client) NewContact(nickname string, sharedSecret []byte)
- func (c *Client) Offline() error
- func (c *Client) Online(ctx context.Context) error
- func (c *Client) RemoveContact(nickname string) error
- func (c *Client) RenameContact(oldname, newname string) error
- func (c *Client) SendMessage(nickname string, message []byte) MessageID
- func (c *Client) Shutdown()
- func (c *Client) SpoolWriteDescriptor() *memspoolclient.SpoolWriteDescriptor
- func (c *Client) Start()
- func (c *Client) WipeConversation(nickname string) error
- type Contact
- type KeyExchangeCompletedEvent
- type Message
- type MessageDeliveredEvent
- type MessageID
- type MessageNotDeliveredEvent
- type MessageNotSentEvent
- type MessageReceivedEvent
- type MessageSentEvent
- type Messages
- type Queue
- type ReadMessageDescriptor
- type SentMessageDescriptor
- type State
- type StateWriter
Constants ¶
const ( // MessageExpirationDuration is the duration of time after which messages will be removed. MessageExpirationDuration = 168 * time.Hour // MessageIDLen is the length of our message IDs which are used the keys in a map // to reference individual messages of a conversation. MessageIDLen = 4 // GarbageCollectionInterval is the time interval between garbage collecting // old messages. GarbageCollectionInterval = 120 * time.Minute // CBORMessageOverhead is the serialized CBOR overhead added by our Message type which our ratchet payload is encapsulated within. TO understand how we arrived at this 54 hardcoded value, please see doubleratchet test Test_DoSendMessageOverhead. CBORMessageOverhead = 54 )
const EventChannelSize = 1000
const MaxQueueSize = 20
const ReadInboxLambdaPDivisor = 8
ReadInboxLambdaPDivisor is used to divide our LambdaP parameter to determine our new lambda parameter for our poisson process which is used in selecting time intervals between attempting to retreive messages from our remote Provider.
Variables ¶
var ( ErrTrialDecryptionFailed = errors.New("Trial Decryption Failed") ErrInvalidPlaintextLength = errors.New("Plaintext has invalid payload length") ErrContactNotFound = errors.New("Contact not found") ErrPendingKeyExchange = errors.New("Cannot send to contact pending key exchange") ErrProviderNotFound = errors.New("Cannot find provider") ErrBlobNotFound = errors.New("Blob not found in store") ErrNoSpool = errors.New("No Spool Found") ErrNotOnline = errors.New("Client is not online") ErrNoCurrentDocument = errors.New("No current document") ErrAlreadyHaveKeyExchange = errors.New("Already created KeyExchange with contact") ErrHalted = errors.New("Halted") )
var (
DecryptStateFailed = errors.New("failed to decrypted statefile")
)
var ErrQueueEmpty = errors.New("queue is empty")
ErrQueueEmpty is the error issued when the queue is empty.
var ErrQueueFull = errors.New("queue is full")
ErrQueueFull is the error issued when the queue is full.
Functions ¶
func LoadStateWriter ¶
func LoadStateWriter(log *logging.Logger, stateFile string, passphrase []byte) (*StateWriter, *State, error)
LoadStateWriter decrypts the given stateFile and returns the State as well as a new StateWriter.
func NewContactExchangeBytes ¶
func NewContactExchangeBytes(spoolWriteDescriptor *memspoolClient.SpoolWriteDescriptor, keyExchange []byte) ([]byte, error)
NewContactExchangeBytes returns serialized contact exchange information.
Types ¶
type CBORState ¶ added in v0.0.31
type CBORState struct { SpoolReadDescriptor *client.CBORSpoolReadDescriptor Contacts []*Contact Providers []*pki.MixDescriptor Conversations map[string]map[MessageID]*Message Blob map[string][]byte }
type Client ¶
type Client struct { worker.Worker EventSink chan interface{} // contains filtered or unexported fields }
Client is the mixnet client which interacts with other clients and services on the network.
func New ¶
func New(logBackend *log.Backend, mixnetClient *client.Client, stateWorker *StateWriter, state *State) (*Client, error)
New creates a new Client instance given a mixnetClient, stateWorker and state. This constructor is used to load the previously saved state of a Client.
func NewClientAndRemoteSpool ¶
func NewClientAndRemoteSpool(ctx context.Context, logBackend *log.Backend, mixnetClient *client.Client, stateWorker *StateWriter) (*Client, error)
NewClientAndRemoteSpool creates and connects a new Client and creates a new remote spool for collecting messages destined to this Client. The Client is associated with this remote spool and this state is preserved in the encrypted statefile, of course. This constructor of Client is used when creating a new Client as opposed to loading the previously saved state for an existing Client.
func (*Client) ChangeExpiration ¶
ChangeExpiration changes the message history expiration of a contact.
func (*Client) CreateRemoteSpool ¶
CreateRemoteSpool creates a remote spool for collecting messages destined to this Client. This method blocks until the reply from the remote spool service is received or the round trip timeout is reached.
func (*Client) CreateRemoteSpoolOn ¶
CreateRemoteSpoolOn creates a remote spool for collecting messages destined to this Client. This method blocks until the reply from the remote spool service is received or the round trip timeout is reached.
func (*Client) DeleteBlob ¶
DeleteBlob removes the blob identified by id string or error
func (*Client) DoubleRatchetPayloadLength ¶
func (*Client) GetContacts ¶
GetContacts returns the contacts map.
func (*Client) GetExpiration ¶
GetExpiration returns the message expiration of a contact.
func (*Client) GetPKIDocument ¶
GetPKIDocument() returns the current pki.Document or error
func (*Client) GetSortedConversation ¶
GetSortedConversation returns Messages (a slice of *Message, sorted by Timestamp)
func (*Client) GetSpoolProviders ¶
GetSpoolProviders() returns the set of current spool providers in the pki.Document
func (*Client) NewContact ¶
NewContact adds a new contact to the Client's state. This starts the PANDA protocol instance for this contact where intermediate states will be preserved in the encrypted statefile such that progress on the PANDA key exchange can be continued at a later time after program shutdown or restart.
func (*Client) Offline ¶
Offline() tells the client to disconnect from network services and blocks until the client has disconnected.
func (*Client) RemoveContact ¶
RemoveContact removes a contact from the Client's state.
func (*Client) RenameContact ¶
RenameContact changes the name of a contact.
func (*Client) SendMessage ¶
SendMessage sends a message to the Client contact with the given nickname.
func (*Client) SpoolWriteDescriptor ¶
func (c *Client) SpoolWriteDescriptor() *memspoolclient.SpoolWriteDescriptor
SpoolWriteDescriptor() returns the SpoolWriteDescriptor for this client or nil
func (*Client) Start ¶
func (c *Client) Start()
Start starts the client worker goroutine and the read-inbox worker goroutine.
func (*Client) WipeConversation ¶
WipeConversation removes all messages between a contact
type Contact ¶
type Contact struct { // Nickname is also unique locally. Nickname string // IsPending is true if the key exchange has not been completed. IsPending bool LastMessage *Message // contains filtered or unexported fields }
Contact is a communications contact that we have bidirectional communication with.
func NewContact ¶
NewContact creates a new Contact or returns an error.
func (*Contact) MarshalBinary ¶
MarshalBinary does what you expect and returns a serialized Contact.
func (*Contact) UnmarshalBinary ¶
UnmarshalBinary does what you expect and initializes the given Contact with deserialized Contact fields from the given binary blob.
type KeyExchangeCompletedEvent ¶
type KeyExchangeCompletedEvent struct { // Nickname is the nickname of the contact with whom our key // exchange has been completed. Nickname string // Err is a key exchange error or is set to nil on success. Err error }
KeyExchangeCompletedEvent is an event signaling the completion of a key exchange or failure if Err is non-nil.
type MessageDeliveredEvent ¶
type MessageDeliveredEvent struct { // Nickname is the nickname of the recipient of our delivered message. Nickname string // MessageID is the key in the conversation map referencing a specific message. MessageID MessageID }
MessageDeliveredEvent is an event signaling that the message has been delivered to the remote spool.
type MessageID ¶
type MessageID [MessageIDLen]byte
type MessageNotDeliveredEvent ¶
type MessageNotDeliveredEvent struct { // Nickname is the nickname of the recipient of our delivered message. Nickname string // MessageID is the key in the conversation map referencing a specific message. MessageID MessageID // Err is an error with reason for failure Err error }
MessageNotDeliveredEvent is an event signaling that the message has NOT been delivered to the remote spool, with Err.
type MessageNotSentEvent ¶
type MessageNotSentEvent struct { // Nickname is the nickname of the recipient of our delivered message. Nickname string // MessageID is the key in the conversation map referencing a specific message. MessageID MessageID // Err is an error with reason for failure Err error }
MessageNotSentEvent is an event signalling that the message was not sent.
type MessageReceivedEvent ¶
type MessageReceivedEvent struct { // Nickname is the nickname from whom we received a message. Nickname string // Message is the message content which was received. Message []byte // Timestamp is the time the message was received. Timestamp time.Time }
MessageReceivedEvent is the event signaling that a message was received.
type MessageSentEvent ¶
type MessageSentEvent struct { // Nickname is the nickname of the recipient of our delivered message. Nickname string // MessageID is the key in the conversation map referencing a specific message. MessageID MessageID }
MessageSentEvent is an event signaling that the message was sent.
type Queue ¶
Queue is our in-memory queue implementation used as our egress FIFO queue for messages sent by the client.
func (*Queue) MarshalBinary ¶
func (*Queue) Pop ¶
Pop pops the next message ref off the queue and returns nil upon success, otherwise an error is returned.
func (*Queue) Push ¶
Push pushes the given message ref onto the queue and returns nil on success, otherwise an error is returned.
func (*Queue) UnmarshalBinary ¶
type ReadMessageDescriptor ¶
type ReadMessageDescriptor struct { // MessageID is the key in the conversation map referencing a specific message. MessageID MessageID }
ReadMessageDescriptor is used to track Spool Read Responses
type SentMessageDescriptor ¶
type SentMessageDescriptor struct { // Nickname is the contact nickname to whom a message was sent. Nickname string // MessageID is the key in the conversation map referencing a specific message. MessageID MessageID }
SentMessageDescriptor is used to track Spool Write Responses
type State ¶
type State struct { SpoolReadDescriptor *client.SpoolReadDescriptor Contacts []*Contact Providers []*pki.MixDescriptor Conversations map[string]map[MessageID]*Message Blob map[string][]byte }
State is the struct type representing the Client's state which is encrypted and persisted to disk.
type StateWriter ¶
StateWriter takes ownership of the Client's encrypted statefile and has a worker goroutine which writes updates to disk.
func NewStateWriter ¶
func NewStateWriter(log *logging.Logger, stateFile string, passphrase []byte) (*StateWriter, error)
NewStateWriter is a constructor for StateWriter which is to be used when creating the statefile for the first time.
func (*StateWriter) Start ¶
func (w *StateWriter) Start()
Start starts the StateWriter's worker goroutine.