Skip to content

Instantly share code, notes, and snippets.

@oxarbitrage
Last active April 29, 2021 12:50
Show Gist options
  • Save oxarbitrage/e0a00bb8b54c22403779ec2299920245 to your computer and use it in GitHub Desktop.
Save oxarbitrage/e0a00bb8b54c22403779ec2299920245 to your computer and use it in GitHub Desktop.

FROST Messages & Data Serialization

The following document describes the byte-level structure of messages sent in FROST [1]. Each message consists of a header of fixed size followed by the actual payload of the message.

Headers

All messages have the following header:

Bytes Field name Data type
1 Message type u8
1 Version u8
2 Sender ID u16
2 Receiver ID u16

The Message type and Version fields specify the payload that follows after the header. The sender is uniquely identified by the Sender ID 1 field and the receiver is uniquely identified by the Receiver ID 1 field.

Payloads

Messages in FROST are split into three general domains. The following sections describe each domain and its messages.

Key Generation with DKG

These messages are sent during the Distributed Key Generation (DKG).

Round One

Broadcast the public commitment vector and the proof of knowledge .

Header:

Message type Version
1 1

Payload:

Bytes Description Data type
2 Length t of the commitment vector u16
512 . t Individual commitments [AffinePoint; t]
256 The value R Scalar
256 The value u Scalar

Round two

Broadcast the secret shares f (l).

Header:

Message type Version
2 1

Payload:

Bytes Description Data type
256 Secret share f (l) Scalar

Key Generation with Dealer

Header:

Message type Version
3 1

Payload:

Bytes Description Data type
Scalar
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment