statusproto

package
v0.5.2 Latest Latest
Warning

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

Go to latest
Published: Nov 18, 2019 License: MPL-2.0 Imports: 30 Imported by: 0

README

v1 statusproto package folder

This folder contains only data types mentioned in the specification and required for its implementation.

Documentation

Index

Constants

View Source
const (
	MembershipUpdateChatCreated   = "chat-created"
	MembershipUpdateNameChanged   = "name-changed"
	MembershipUpdateMembersAdded  = "members-added"
	MembershipUpdateMemberJoined  = "member-joined"
	MembershipUpdateMemberRemoved = "member-removed"
	MembershipUpdateAdminsAdded   = "admins-added"
	MembershipUpdateAdminRemoved  = "admin-removed"
)
View Source
const (
	MessageTypePublicGroup  = "public-group-user-message"
	MessageTypePrivate      = "user-message"
	MessageTypePrivateGroup = "group-user-message"
)

Message types.

View Source
const (
	// ContentTypeTextPlain means that the message contains plain text.
	ContentTypeTextPlain = "text/plain"
)

Variables

View Source
var (
	// ErrInvalidDecodedValue means that the decoded message is of wrong type.
	// This might mean that the status message serialization tag changed.
	ErrInvalidDecodedValue = errors.New("invalid decoded value type")
)

Functions

func CalcMessageClock

func CalcMessageClock(lastObservedValue int64, timeInMs TimestampInMs) int64

CalcMessageClock calculates a new clock value for Message. It is used to properly sort messages and accomodate the fact that time might be different on each device.

func EncodeMembershipUpdateMessage added in v0.3.0

func EncodeMembershipUpdateMessage(value MembershipUpdateMessage) ([]byte, error)

EncodeMembershipUpdateMessage encodes a MembershipUpdateMessage using Transit serialization.

func EncodeMessage

func EncodeMessage(value Message) ([]byte, error)

EncodeMessage encodes a Message using Transit serialization.

func EncodePairMessage

func EncodePairMessage(value PairMessage) ([]byte, error)

EncodePairMessage encodes a PairMessage using Transit serialization.

func MessageID

func MessageID(author *ecdsa.PublicKey, data []byte) statusproto.HexBytes

MessageID calculates the messageID from author's compressed public key and not encrypted but encoded payload.

func NewMessageDecoder

func NewMessageDecoder(r io.Reader) *transit.Decoder

NewMessageDecoder returns a new Transit decoder that can deserialize Message structs. More about Transit: https://github.com/cognitect/transit-format

func NewMessageEncoder

func NewMessageEncoder(w io.Writer) *transit.Encoder

NewMessageEncoder returns a new Transit encoder that can encode Message values. More about Transit: https://github.com/cognitect/transit-format

func WrapMessageV1

func WrapMessageV1(payload []byte, identity *ecdsa.PrivateKey) ([]byte, error)

WrapMessageV1 wraps a payload into a protobuf message and signs it if an identity is provided

Types

type Content

type Content struct {
	ChatID     string   `json:"chat_id"`
	Text       string   `json:"text"`
	ResponseTo string   `json:"response-to"`
	Name       string   `json:"name"` // the ENS name of the sender
	ParsedText ast.Node `json:"parsedText"`
	LineCount  int      `json:"lineCount"`
	RTL        bool     `json:"rtl"`
}

Content contains the chat ID and the actual text of a message.

func PrepareContent added in v0.5.1

func PrepareContent(content Content) Content

PrepareContent return the parsed content of the message, the line-count and whether is a right-to-left message

type Flags

type Flags uint64

Flags define various boolean properties of a message.

const (
	MessageRead Flags = 1 << iota
)

A list of Message flags. By default, a message is unread.

func (*Flags) Clear

func (f *Flags) Clear(val Flags)

func (Flags) Has

func (f Flags) Has(val Flags) bool

func (*Flags) Set

func (f *Flags) Set(val Flags)

func (*Flags) Toggle

func (f *Flags) Toggle(val Flags)

type Group added in v0.3.0

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

func NewGroup added in v0.4.0

func NewGroup(chatID string, updates []MembershipUpdateFlat) (*Group, error)

func NewGroupWithCreator added in v0.4.0

func NewGroupWithCreator(name string, creator *ecdsa.PrivateKey) (*Group, error)

func NewGroupWithMembershipUpdates added in v0.4.0

func NewGroupWithMembershipUpdates(chatID string, updates []MembershipUpdate) (*Group, error)

func (Group) Admins added in v0.3.0

func (g Group) Admins() []string

func (Group) ChatID added in v0.3.0

func (g Group) ChatID() string

func (Group) Joined added in v0.4.0

func (g Group) Joined() []string

func (Group) LastClockValue added in v0.4.0

func (g Group) LastClockValue() int64

func (Group) Members added in v0.4.0

func (g Group) Members() []string

func (Group) Name added in v0.4.0

func (g Group) Name() string

func (Group) NextClockValue added in v0.4.0

func (g Group) NextClockValue() int64

func (*Group) ProcessEvent added in v0.4.0

func (g *Group) ProcessEvent(from *ecdsa.PublicKey, event MembershipUpdateEvent) error

func (*Group) ProcessEvents added in v0.4.0

func (g *Group) ProcessEvents(from *ecdsa.PublicKey, events []MembershipUpdateEvent) error

func (Group) Updates added in v0.4.0

func (g Group) Updates() []MembershipUpdateFlat

type MembershipUpdate added in v0.3.0

type MembershipUpdate struct {
	ChatID    string                  `json:"chatId"`
	Signature string                  `json:"signature"` // hex-encoded without 0x prefix
	Events    []MembershipUpdateEvent `json:"events"`
	From      string                  `json:"from"` // hex-encoded with 0x prefix
}

func (*MembershipUpdate) Flat added in v0.4.0

func (*MembershipUpdate) Sign added in v0.3.0

func (u *MembershipUpdate) Sign(identity *ecdsa.PrivateKey) error

Sign creates a signature from MembershipUpdateEvents and updates MembershipUpdate's signature. It follows the algorithm describe in the spec: https://github.com/status-im/specs/blob/master/status-group-chats-spec.md#signature.

type MembershipUpdateEvent added in v0.3.0

type MembershipUpdateEvent struct {
	Type       string   `json:"type"`
	ClockValue int64    `json:"clockValue"`
	Member     string   `json:"member,omitempty"`  // in "member-joined", "member-removed" and "admin-removed" events
	Members    []string `json:"members,omitempty"` // in "members-added" and "admins-added" events
	Name       string   `json:"name,omitempty"`    // name of the group chat
}

MembershipUpdateEvent contains an event information. Member and Members are hex-encoded values with 0x prefix.

func NewAdminRemovedEvent added in v0.3.0

func NewAdminRemovedEvent(admin string, clock int64) MembershipUpdateEvent

func NewAdminsAddedEvent added in v0.3.0

func NewAdminsAddedEvent(admins []string, clock int64) MembershipUpdateEvent

func NewChatCreatedEvent added in v0.3.0

func NewChatCreatedEvent(name string, admin string, clock int64) MembershipUpdateEvent

func NewMemberJoinedEvent added in v0.3.0

func NewMemberJoinedEvent(member string, clock int64) MembershipUpdateEvent

func NewMemberRemovedEvent added in v0.3.0

func NewMemberRemovedEvent(member string, clock int64) MembershipUpdateEvent

func NewMembersAddedEvent added in v0.3.0

func NewMembersAddedEvent(members []string, clock int64) MembershipUpdateEvent

func NewNameChangedEvent added in v0.3.0

func NewNameChangedEvent(name string, clock int64) MembershipUpdateEvent

func (MembershipUpdateEvent) Equal added in v0.4.0

type MembershipUpdateFlat added in v0.4.0

type MembershipUpdateFlat struct {
	MembershipUpdateEvent
	ChatID    string `json:"chatId"`
	Signature string `json:"signature"`
	From      string `json:"from"`
}

func MergeFlatMembershipUpdates added in v0.4.0

func MergeFlatMembershipUpdates(dest []MembershipUpdateFlat, src []MembershipUpdateFlat) []MembershipUpdateFlat

func (MembershipUpdateFlat) Equal added in v0.4.0

type MembershipUpdateMessage added in v0.3.0

type MembershipUpdateMessage struct {
	ChatID  string             `json:"chatId"` // UUID concatenated with hex-encoded public key of the creator for the chat
	Updates []MembershipUpdate `json:"updates"`
	Message *Message           `json:"message"` // optional message
}

MembershipUpdateMessage is a message used to propagate information about group membership changes. For more information, see https://github.com/status-im/specs/blob/master/status-group-chats-spec.md.

func (*MembershipUpdateMessage) Verify added in v0.4.0

func (m *MembershipUpdateMessage) Verify() error

Verify makes sure that the received update message has a valid signature. It also extracts public key from the signature available as From field. It does not verify the updates and their events. This should be done separately using Group struct.

type Message

type Message struct {
	Text      string        `json:"text"` // TODO: why is this duplicated?
	ContentT  string        `json:"content_type"`
	MessageT  string        `json:"message_type"`
	Clock     int64         `json:"clock"` // lamport timestamp; see CalcMessageClock for more details
	Timestamp TimestampInMs `json:"timestamp"`
	Content   Content       `json:"content"`

	Flags     Flags            `json:"-"`
	ID        []byte           `json:"-"`
	SigPubKey *ecdsa.PublicKey `json:"-"`
	ChatID    string           `json:"-"` // reference to Chat.ID; not connected to Content.ChatID which is set by sender
}

Message is a chat message sent by an user.

func CreatePrivateGroupTextMessage added in v0.3.0

func CreatePrivateGroupTextMessage(data []byte, lastClock int64, chatID string) Message

CreatePrivateGroupTextMessage creates a group message.

func CreatePrivateTextMessage

func CreatePrivateTextMessage(data []byte, lastClock int64, chatID string) Message

CreatePrivateTextMessage creates a one-to-one message.

func CreatePublicTextMessage

func CreatePublicTextMessage(data []byte, lastClock int64, chatID string) Message

CreatePublicTextMessage creates a public text Message.

func (*Message) MarshalJSON

func (m *Message) MarshalJSON() ([]byte, error)

type PairMessage

type PairMessage struct {
	InstallationID string `json:"installationId"`
	// The type of the device
	DeviceType string `json:"deviceType"`
	// Name the user set name
	Name string `json:"name"`
	// The FCMToken for mobile platforms
	FCMToken string `json:"fcmToken"`

	// not protocol defined fields
	ID []byte `json:"-"`
}

PairMessage contains all message details.

func CreatePairMessage

func CreatePairMessage(installationID string, name string, deviceType string, fcmToken string) PairMessage

CreatePairMessage creates a PairMessage which is used to pair devices.

func DecodePairMessage

func DecodePairMessage(data []byte) (message PairMessage, err error)

DecodePairMessage decodes a raw payload to Message struct.

func (*PairMessage) MarshalJSON

func (m *PairMessage) MarshalJSON() ([]byte, error)

type StatusMessage

type StatusMessage struct {
	// TransportMessage is the parsed message received from the transport layer, i.e the input
	TransportMessage *whispertypes.Message
	// MessageType is the type of application message contained
	MessageType StatusMessageT
	// ParsedMessage is the parsed message by the application layer, i.e the output
	ParsedMessage interface{}

	// TransportPayload is the payload as received from the transport layer
	TransportPayload []byte
	// DecryptedPayload is the payload after having been processed by the encryption layer
	DecryptedPayload []byte

	// ID is the canonical ID of the message
	ID statusproto.HexBytes
	// Hash is the transport layer hash
	Hash []byte

	// TransportLayerSigPubKey contains the public key provided by the transport layer
	TransportLayerSigPubKey *ecdsa.PublicKey
	// ApplicationMetadataLayerPubKey contains the public key provided by the application metadata layer
	ApplicationMetadataLayerSigPubKey *ecdsa.PublicKey
}

StatusMessage is any Status Protocol message.

func (*StatusMessage) Clone

func (s *StatusMessage) Clone() (*StatusMessage, error)

func (*StatusMessage) HandleApplication

func (m *StatusMessage) HandleApplication() error

func (*StatusMessage) HandleApplicationMetadata

func (m *StatusMessage) HandleApplicationMetadata() error

func (*StatusMessage) HandleDatasync

func (m *StatusMessage) HandleDatasync(datasync *datasync.DataSync) ([]*StatusMessage, error)

HandleDatasync processes StatusMessage through data sync layer. This is optional and DataSync might be nil. In such a case, only one payload will be returned equal to DecryptedPayload.

func (*StatusMessage) HandleEncryption

func (m *StatusMessage) HandleEncryption(myKey *ecdsa.PrivateKey, senderKey *ecdsa.PublicKey, enc *encryption.Protocol) error

func (*StatusMessage) HandleTransport

func (m *StatusMessage) HandleTransport(shhMessage *whispertypes.Message) error

func (*StatusMessage) SigPubKey

func (s *StatusMessage) SigPubKey() *ecdsa.PublicKey

SigPubKey returns the most important signature, from the application layer to transport

type StatusMessageT added in v0.5.0

type StatusMessageT int
const (
	MessageT StatusMessageT = iota + 1
	MembershipUpdateMessageT
	PairMessageT
)

type StatusProtocolMessage

type StatusProtocolMessage struct {
	Signature            []byte   `protobuf:"bytes,4001,opt,name=signature,proto3" json:"signature,omitempty"`
	Payload              []byte   `protobuf:"bytes,4002,opt,name=payload,proto3" json:"payload,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*StatusProtocolMessage) Descriptor

func (*StatusProtocolMessage) Descriptor() ([]byte, []int)

func (*StatusProtocolMessage) GetPayload

func (m *StatusProtocolMessage) GetPayload() []byte

func (*StatusProtocolMessage) GetSignature

func (m *StatusProtocolMessage) GetSignature() []byte

func (*StatusProtocolMessage) ProtoMessage

func (*StatusProtocolMessage) ProtoMessage()

func (*StatusProtocolMessage) Reset

func (m *StatusProtocolMessage) Reset()

func (*StatusProtocolMessage) String

func (m *StatusProtocolMessage) String() string

func (*StatusProtocolMessage) XXX_DiscardUnknown

func (m *StatusProtocolMessage) XXX_DiscardUnknown()

func (*StatusProtocolMessage) XXX_Marshal

func (m *StatusProtocolMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*StatusProtocolMessage) XXX_Merge

func (m *StatusProtocolMessage) XXX_Merge(src proto.Message)

func (*StatusProtocolMessage) XXX_Size

func (m *StatusProtocolMessage) XXX_Size() int

func (*StatusProtocolMessage) XXX_Unmarshal

func (m *StatusProtocolMessage) XXX_Unmarshal(b []byte) error

type TimestampInMs

type TimestampInMs int64

TimestampInMs is a timestamp in milliseconds.

func TimestampInMsFromTime

func TimestampInMsFromTime(t time.Time) TimestampInMs

TimestampInMsFromTime returns a TimestampInMs from a time.Time instance.

func (TimestampInMs) Time

func (t TimestampInMs) Time() time.Time

Time returns a time.Time instance.

Jump to

Keyboard shortcuts

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