Documentation
¶
Index ¶
- func NewStateFromWelcome(suite CipherSuite, epochSecret []byte, welcome Welcome) (*State, LeafIndex, []byte, error)
- type AddProposal
- type ApplicationData
- type BasicCredential
- type Bytes1
- type CipherSuite
- type Commit
- type CommitData
- type Confirmation
- type ContentType
- type Credential
- func (c Credential) Equals(o Credential) bool
- func (c Credential) Identity() []byte
- func (c Credential) MarshalTLS() ([]byte, error)
- func (c Credential) PublicKey() *SignaturePublicKey
- func (c Credential) Scheme() SignatureScheme
- func (c Credential) Type() CredentialType
- func (c *Credential) UnmarshalTLS(data []byte) (int, error)
- type CredentialType
- type DirectPath
- type DirectPathNode
- type EncryptedGroupSecrets
- type Epoch
- type Extension
- type ExtensionBody
- type ExtensionList
- type ExtensionType
- type GroupContext
- type GroupInfo
- type GroupSecrets
- type HPKECiphertext
- type HPKEInstance
- func (h HPKEInstance) Decrypt(priv HPKEPrivateKey, aad []byte, ct HPKECiphertext) ([]byte, error)
- func (h HPKEInstance) Derive(seed []byte) (HPKEPrivateKey, error)
- func (h HPKEInstance) Encrypt(pub HPKEPublicKey, aad, pt []byte) (HPKECiphertext, error)
- func (h HPKEInstance) Generate() (HPKEPrivateKey, error)
- type HPKEPrivateKey
- type HPKEPublicKey
- type KeyPackage
- type KeyPackageOpts
- type LeafCount
- type LeafIndex
- type LeafNodeHashInput
- type LifetimeExtension
- type MLSCiphertext
- type MLSPlaintext
- type MLSPlaintextContent
- type Node
- type NodeIndex
- type NodeType
- type OptionalNode
- type ParentHashExtension
- type ParentNode
- type ParentNodeHashInput
- type PathSecret
- type Proposal
- type ProposalID
- type ProposalRef
- type ProposalType
- type ProtocolVersion
- type RemoveProposal
- type Sender
- type SenderType
- type Signature
- type SignaturePrivateKey
- type SignaturePublicKey
- type SignatureScheme
- func (ss SignatureScheme) Derive(preSeed []byte) (SignaturePrivateKey, error)
- func (ss SignatureScheme) Generate() (SignaturePrivateKey, error)
- func (ss SignatureScheme) Sign(priv *SignaturePrivateKey, message []byte) ([]byte, error)
- func (ss SignatureScheme) String() string
- func (ss SignatureScheme) Verify(pub *SignaturePublicKey, message, signature []byte) bool
- type State
- func NewEmptyState(groupID []byte, leafSecret []byte, sigPriv SignaturePrivateKey, kp KeyPackage) (*State, error)
- func NewEmptyStateWithExtensions(groupID []byte, leafSecret []byte, sigPriv SignaturePrivateKey, kp KeyPackage, ...) (*State, error)
- func NewJoinedState(initSecret []byte, sigPrivs []SignaturePrivateKey, kps []KeyPackage, ...) (*State, error)
- func NewStateFromWelcomeAndSecrets(welcome Welcome, ss StateSecrets) (*State, error)
- func (s State) Add(kp KeyPackage) (*MLSPlaintext, error)
- func (s State) Clone() *State
- func (s *State) Commit(leafSecret []byte) (*MLSPlaintext, *Welcome, *State, error)
- func (s State) Equals(o State) bool
- func (s State) GetSecrets() StateSecrets
- func (s *State) Handle(pt *MLSPlaintext) (*State, error)
- func (s *State) Protect(data []byte) (*MLSCiphertext, error)
- func (s *State) Remove(removed LeafIndex) (*MLSPlaintext, error)
- func (s *State) SetSecrets(ss StateSecrets)
- func (s *State) Unprotect(ct *MLSCiphertext) ([]byte, error)
- func (s State) Update(secret []byte, sigPriv *SignaturePrivateKey, kp KeyPackage) (*MLSPlaintext, error)
- type StateSecrets
- type SupportedCipherSuitesExtension
- type SupportedVersionsExtension
- type TreeKEMPrivateKey
- func (priv TreeKEMPrivateKey) Clone() TreeKEMPrivateKey
- func (priv TreeKEMPrivateKey) Consistent(other TreeKEMPrivateKey) bool
- func (priv TreeKEMPrivateKey) ConsistentPub(pub TreeKEMPublicKey) bool
- func (priv *TreeKEMPrivateKey) Decap(from LeafIndex, pub TreeKEMPublicKey, context []byte, path DirectPath) error
- func (priv *TreeKEMPrivateKey) SetLeafSecret(secret []byte)
- func (priv TreeKEMPrivateKey) SharedPathSecret(to LeafIndex) (NodeIndex, []byte, bool)
- type TreeKEMPublicKey
- func (pub *TreeKEMPublicKey) AddLeaf(keyPkg KeyPackage) LeafIndex
- func (pub *TreeKEMPublicKey) BlankPath(index LeafIndex)
- func (pub TreeKEMPublicKey) Clone() TreeKEMPublicKey
- func (pub TreeKEMPublicKey) Encap(from LeafIndex, context, leafSecret []byte, leafSigPriv SignaturePrivateKey, ...) (*TreeKEMPrivateKey, *DirectPath, error)
- func (pub TreeKEMPublicKey) Equals(o TreeKEMPublicKey) bool
- func (pub TreeKEMPublicKey) Find(kp KeyPackage) (LeafIndex, bool)
- func (pub TreeKEMPublicKey) KeyPackage(index LeafIndex) (KeyPackage, bool)
- func (pub *TreeKEMPublicKey) Merge(from LeafIndex, path DirectPath) error
- func (pub TreeKEMPublicKey) RootHash() []byte
- func (pub *TreeKEMPublicKey) SetHashAll() error
- func (pub TreeKEMPublicKey) Size() LeafCount
- func (pub *TreeKEMPublicKey) UpdateLeaf(index LeafIndex, keyPkg KeyPackage)
- type UpdateProposal
- type Welcome
- type X509Credential
- func (cred X509Credential) Equals(other *X509Credential) bool
- func (cred X509Credential) MarshalTLS() ([]byte, error)
- func (cred X509Credential) PublicKey() *SignaturePublicKey
- func (cred X509Credential) Scheme() SignatureScheme
- func (cred *X509Credential) UnmarshalTLS(data []byte) (int, error)
- func (cred X509Credential) Verify(trusted []*x509.Certificate) error
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func NewStateFromWelcome ¶
Types ¶
type AddProposal ¶
type AddProposal struct {
KeyPackage KeyPackage
}
type ApplicationData ¶
type ApplicationData struct {
Data []byte `tls:"head=4"`
}
type BasicCredential ¶
type BasicCredential struct {
Identity []byte `tls:"head=2"`
SignatureScheme SignatureScheme
PublicKey SignaturePublicKey
}
struct {
opaque identity<0..2^16-1>;
SignatureScheme algorithm;
SignaturePublicKey public_key;
} BasicCredential;
type CipherSuite ¶
type CipherSuite uint16
const ( X25519_AES128GCM_SHA256_Ed25519 CipherSuite = 0x0001 P256_AES128GCM_SHA256_P256 CipherSuite = 0x0002 X25519_CHACHA20POLY1305_SHA256_Ed25519 CipherSuite = 0x0003 X448_AES256GCM_SHA512_Ed448 CipherSuite = 0x0004 // UNSUPPORTED P521_AES256GCM_SHA512_P521 CipherSuite = 0x0005 X448_CHACHA20POLY1305_SHA512_Ed448 CipherSuite = 0x0006 // UNSUPPORTED )
func (CipherSuite) Constants ¶
func (cs CipherSuite) Constants() cipherConstants
func (CipherSuite) Digest ¶
func (cs CipherSuite) Digest(data []byte) []byte
func (CipherSuite) Scheme ¶
func (cs CipherSuite) Scheme() SignatureScheme
func (CipherSuite) String ¶
func (cs CipherSuite) String() string
type Commit ¶
type Commit struct {
Updates []ProposalID `tls:"head=2"`
Removes []ProposalID `tls:"head=2"`
Adds []ProposalID `tls:"head=2"`
Path *DirectPath `tls:"optional"`
}
func (Commit) PathRequired ¶
func (Commit) ValidForTLS ¶
type CommitData ¶
type CommitData struct {
Commit Commit
Confirmation Confirmation
}
type Confirmation ¶
type Confirmation struct {
Data []byte `tls:"head=1"`
}
type ContentType ¶
type ContentType uint8
const ( ContentTypeInvalid ContentType = 0 ContentTypeApplication ContentType = 1 ContentTypeProposal ContentType = 2 ContentTypeCommit ContentType = 3 )
func (ContentType) ValidForTLS ¶
func (ct ContentType) ValidForTLS() error
type Credential ¶
type Credential struct {
X509 *X509Credential
Basic *BasicCredential
}
struct {
CredentialType credential_type;
select (Credential.credential_type) {
case basic:
BasicCredential;
case x509:
opaque cert_data<1..2^24-1>;
};
} Credential;
func NewBasicCredential ¶
func NewBasicCredential(userId []byte, scheme SignatureScheme, pub SignaturePublicKey) *Credential
func NewX509Credential ¶
func NewX509Credential(chain []*x509.Certificate) (*Credential, error)
func (Credential) Identity ¶
func (c Credential) Identity() []byte
func (Credential) MarshalTLS ¶
func (c Credential) MarshalTLS() ([]byte, error)
func (Credential) PublicKey ¶
func (c Credential) PublicKey() *SignaturePublicKey
func (Credential) Scheme ¶
func (c Credential) Scheme() SignatureScheme
func (Credential) Type ¶
func (c Credential) Type() CredentialType
func (*Credential) UnmarshalTLS ¶
func (c *Credential) UnmarshalTLS(data []byte) (int, error)
type CredentialType ¶
type CredentialType uint8
const ( CredentialTypeInvalid CredentialType = 255 CredentialTypeBasic CredentialType = 0 CredentialTypeX509 CredentialType = 1 )
func (CredentialType) ValidForTLS ¶
func (ct CredentialType) ValidForTLS() error
type DirectPath ¶
type DirectPath struct {
LeafKeyPackage KeyPackage
Steps []DirectPathNode `tls:"head=4"`
}
func (DirectPath) ParentHashValid ¶
func (path DirectPath) ParentHashValid(suite CipherSuite) error
func (DirectPath) ParentHashes ¶
func (path DirectPath) ParentHashes(suite CipherSuite) ([][]byte, error)
This produces a list of parent hashes that are off by one with respect to the steps in the path. The path hash at position i goes with the public key at position i-1, and the path hash at position 0 goes in the leaf.
func (*DirectPath) Sign ¶
func (path *DirectPath) Sign(suite CipherSuite, initPub HPKEPublicKey, sigPriv SignaturePrivateKey, opts *KeyPackageOpts) error
type DirectPathNode ¶
type DirectPathNode struct {
PublicKey HPKEPublicKey
EncryptedPathSecrets []HPKECiphertext `tls:"head=4"`
}
/ / DirectPath /
type EncryptedGroupSecrets ¶
type EncryptedGroupSecrets struct {
KeyPackageHash []byte `tls:"head=1"`
EncryptedGroupSecrets HPKECiphertext
}
/ / EncryptedGroupSecrets /
type Extension ¶
type Extension struct {
ExtensionType ExtensionType
ExtensionData []byte `tls:"head=2"`
}
type ExtensionBody ¶
type ExtensionBody interface {
Type() ExtensionType
}
type ExtensionList ¶
type ExtensionList struct {
Entries []Extension `tls:"head=2"`
}
func NewExtensionList ¶
func NewExtensionList() ExtensionList
func (*ExtensionList) Add ¶
func (el *ExtensionList) Add(src ExtensionBody) error
func (ExtensionList) Find ¶
func (el ExtensionList) Find(dst ExtensionBody) (bool, error)
func (ExtensionList) Has ¶
func (el ExtensionList) Has(extType ExtensionType) bool
type ExtensionType ¶
type ExtensionType uint16
const ( ExtensionTypeInvalid ExtensionType = 0x0000 ExtensionTypeSupportedVersions ExtensionType = 0x0001 ExtensionTypeSupportedCipherSuites ExtensionType = 0x0002 ExtensionTypeLifetime ExtensionType = 0x0003 ExtensionTypeKeyID ExtensionType = 0x0004 ExtensionTypeParentHash ExtensionType = 0x0005 )
type GroupContext ¶
type GroupContext struct {
GroupID []byte `tls:"head=1"`
Epoch Epoch
TreeHash []byte `tls:"head=1"`
ConfirmedTranscriptHash []byte `tls:"head=1"`
Extensions ExtensionList
}
/ / GroupContext /
type GroupInfo ¶
type GroupInfo struct {
GroupID []byte `tls:"head=1"`
Epoch Epoch
Tree TreeKEMPublicKey
ConfirmedTranscriptHash []byte `tls:"head=1"`
InterimTranscriptHash []byte `tls:"head=1"`
Extensions ExtensionList
Confirmation []byte `tls:"head=1"`
SignerIndex LeafIndex
Signature []byte `tls:"head=2"`
}
type GroupSecrets ¶
type GroupSecrets struct {
EpochSecret []byte `tls:"head=1"`
PathSecret *PathSecret `tls:"optional"`
}
type HPKECiphertext ¶
type HPKEInstance ¶
type HPKEInstance struct {
BaseSuite CipherSuite
Suite hpke.CipherSuite
}
func (HPKEInstance) Decrypt ¶
func (h HPKEInstance) Decrypt(priv HPKEPrivateKey, aad []byte, ct HPKECiphertext) ([]byte, error)
func (HPKEInstance) Derive ¶
func (h HPKEInstance) Derive(seed []byte) (HPKEPrivateKey, error)
func (HPKEInstance) Encrypt ¶
func (h HPKEInstance) Encrypt(pub HPKEPublicKey, aad, pt []byte) (HPKECiphertext, error)
func (HPKEInstance) Generate ¶
func (h HPKEInstance) Generate() (HPKEPrivateKey, error)
type HPKEPrivateKey ¶
type HPKEPrivateKey struct {
Data []byte `tls:"head=2"`
PublicKey HPKEPublicKey
}
type HPKEPublicKey ¶
type HPKEPublicKey struct {
Data []byte `tls:"head=2"`
}
func (HPKEPublicKey) Equals ¶
func (k HPKEPublicKey) Equals(o HPKEPublicKey) bool
type KeyPackage ¶
type KeyPackage struct {
Version ProtocolVersion
CipherSuite CipherSuite
InitKey HPKEPublicKey
Credential Credential
Extensions ExtensionList
Signature Signature
}
func NewKeyPackageWithInitKey ¶
func NewKeyPackageWithInitKey(suite CipherSuite, initKey HPKEPublicKey, cred *Credential, sigPriv SignaturePrivateKey) (*KeyPackage, error)
func NewKeyPackageWithSecret ¶
func NewKeyPackageWithSecret(suite CipherSuite, initSecret []byte, cred *Credential, sigPriv SignaturePrivateKey) (*KeyPackage, error)
func (KeyPackage) Clone ¶
func (kp KeyPackage) Clone() KeyPackage
func (KeyPackage) Equals ¶
func (kp KeyPackage) Equals(other KeyPackage) bool
func (*KeyPackage) SetExtensions ¶
func (kp *KeyPackage) SetExtensions(exts []ExtensionBody) error
func (*KeyPackage) Sign ¶
func (kp *KeyPackage) Sign(priv SignaturePrivateKey) error
func (KeyPackage) Verify ¶
func (kp KeyPackage) Verify() bool
type KeyPackageOpts ¶
type KeyPackageOpts struct {
}
type LeafNodeHashInput ¶
type LeafNodeHashInput struct {
LeafIndex LeafIndex
KeyPackage *KeyPackage `tls:"optional"`
}
type LifetimeExtension ¶
func (LifetimeExtension) Type ¶
func (lte LifetimeExtension) Type() ExtensionType
type MLSCiphertext ¶
type MLSPlaintext ¶
type MLSPlaintextContent ¶
type MLSPlaintextContent struct {
Application *ApplicationData
Proposal *Proposal
Commit *CommitData
}
func (MLSPlaintextContent) MarshalTLS ¶
func (c MLSPlaintextContent) MarshalTLS() ([]byte, error)
func (MLSPlaintextContent) Type ¶
func (c MLSPlaintextContent) Type() ContentType
func (*MLSPlaintextContent) UnmarshalTLS ¶
func (c *MLSPlaintextContent) UnmarshalTLS(data []byte) (int, error)
type Node ¶
type Node struct {
Leaf *KeyPackage
Parent *ParentNode
}
/ / Node /
func (Node) MarshalTLS ¶
func (Node) PublicKey ¶
func (n Node) PublicKey() HPKEPublicKey
type OptionalNode ¶
/ / OptionalNode /
func (OptionalNode) Blank ¶
func (n OptionalNode) Blank() bool
func (OptionalNode) Clone ¶
func (n OptionalNode) Clone() OptionalNode
func (*OptionalNode) SetLeafNodeHash ¶
func (n *OptionalNode) SetLeafNodeHash(suite CipherSuite, index LeafIndex) error
func (*OptionalNode) SetParentNodeHash ¶
func (n *OptionalNode) SetParentNodeHash(suite CipherSuite, index NodeIndex, left, right []byte) error
func (*OptionalNode) SetToBlank ¶
func (n *OptionalNode) SetToBlank()
type ParentHashExtension ¶
type ParentHashExtension struct {
ParentHash []byte `tls:"head=1"`
}
func (ParentHashExtension) Type ¶
func (phe ParentHashExtension) Type() ExtensionType
type ParentNode ¶
type ParentNode struct {
PublicKey HPKEPublicKey
UnmergedLeaves []LeafIndex `tls:"head=4"`
ParentHash []byte `tls:"head=1"`
}
func (*ParentNode) AddUnmerged ¶
func (n *ParentNode) AddUnmerged(l LeafIndex)
func (ParentNode) Clone ¶
func (n ParentNode) Clone() ParentNode
func (*ParentNode) Equals ¶
func (n *ParentNode) Equals(other *ParentNode) bool
type ParentNodeHashInput ¶
type ParentNodeHashInput struct {
NodeIndex NodeIndex
ParentNode *ParentNode `tls:"optional"`
LeftHash []byte `tls:"head=1"`
RightHash []byte `tls:"head=1"`
}
type Proposal ¶
type Proposal struct {
Add *AddProposal
Update *UpdateProposal
Remove *RemoveProposal
}
func (Proposal) MarshalTLS ¶
func (Proposal) Type ¶
func (p Proposal) Type() ProposalType
type ProposalID ¶
type ProposalID struct {
Hash []byte `tls:"head=1"`
}
/ / Commit /
func (ProposalID) String ¶
func (pid ProposalID) String() string
type ProposalRef ¶
type ProposalRef uint64
type ProposalType ¶
type ProposalType uint8
/ / Proposal /
const ( ProposalTypeInvalid ProposalType = 0 ProposalTypeAdd ProposalType = 1 ProposalTypeUpdate ProposalType = 2 ProposalTypeRemove ProposalType = 3 )
func (ProposalType) ValidForTLS ¶
func (pt ProposalType) ValidForTLS() error
type ProtocolVersion ¶
type ProtocolVersion uint8
const (
ProtocolVersionMLS10 ProtocolVersion = 0x00
)
type RemoveProposal ¶
type RemoveProposal struct {
Removed LeafIndex
}
type Sender ¶
type Sender struct {
Type SenderType
Sender uint32
}
type SenderType ¶
type SenderType uint8
const ( SenderTypeInvalid SenderType = 0 SenderTypeMember SenderType = 1 SenderTypePreconfigured SenderType = 2 SenderTypeNewMember SenderType = 3 )
func (SenderType) ValidForTLS ¶
func (st SenderType) ValidForTLS() error
type SignaturePrivateKey ¶
type SignaturePrivateKey struct {
Data []byte `tls:"head=2"`
PublicKey SignaturePublicKey
}
type SignaturePublicKey ¶
type SignaturePublicKey struct {
Data []byte `tls:"head=2"`
}
func (SignaturePublicKey) Equals ¶
func (pub SignaturePublicKey) Equals(other SignaturePublicKey) bool
type SignatureScheme ¶
type SignatureScheme uint16
const ( ECDSA_SECP256R1_SHA256 SignatureScheme = 0x0403 ECDSA_SECP521R1_SHA512 SignatureScheme = 0x0603 Ed25519 SignatureScheme = 0x0807 )
func (SignatureScheme) Derive ¶
func (ss SignatureScheme) Derive(preSeed []byte) (SignaturePrivateKey, error)
func (SignatureScheme) Generate ¶
func (ss SignatureScheme) Generate() (SignaturePrivateKey, error)
func (SignatureScheme) Sign ¶
func (ss SignatureScheme) Sign(priv *SignaturePrivateKey, message []byte) ([]byte, error)
func (SignatureScheme) String ¶
func (ss SignatureScheme) String() string
func (SignatureScheme) Verify ¶
func (ss SignatureScheme) Verify(pub *SignaturePublicKey, message, signature []byte) bool
type State ¶
type State struct {
// Shared confirmed state
CipherSuite CipherSuite
GroupID []byte `tls:"head=1"`
Epoch Epoch
Tree TreeKEMPublicKey
ConfirmedTranscriptHash []byte `tls:"head=1"`
InterimTranscriptHash []byte `tls:"head=1"`
Extensions ExtensionList
// Per-participant non-secret state
Index LeafIndex `tls:"omit"`
IdentityPriv SignaturePrivateKey `tls:"omit"`
TreePriv TreeKEMPrivateKey `tls:"omit"`
Scheme SignatureScheme `tls:"omit"`
PendingProposals []MLSPlaintext `tls:"omit"`
// Secret state
PendingUpdates map[ProposalRef]updateSecrets `tls:"omit"`
Keys keyScheduleEpoch `tls:"omit"`
// Helpful information
NewCredentials map[LeafIndex]bool
}
func NewEmptyState ¶
func NewEmptyState(groupID []byte, leafSecret []byte, sigPriv SignaturePrivateKey, kp KeyPackage) (*State, error)
func NewEmptyStateWithExtensions ¶
func NewEmptyStateWithExtensions(groupID []byte, leafSecret []byte, sigPriv SignaturePrivateKey, kp KeyPackage, ext ExtensionList) (*State, error)
func NewJoinedState ¶
func NewJoinedState(initSecret []byte, sigPrivs []SignaturePrivateKey, kps []KeyPackage, welcome Welcome) (*State, error)
func NewStateFromWelcomeAndSecrets ¶
func NewStateFromWelcomeAndSecrets(welcome Welcome, ss StateSecrets) (*State, error)
func (State) Add ¶
func (s State) Add(kp KeyPackage) (*MLSPlaintext, error)
func (State) GetSecrets ¶
func (s State) GetSecrets() StateSecrets
func (*State) SetSecrets ¶
func (s *State) SetSecrets(ss StateSecrets)
func (State) Update ¶
func (s State) Update(secret []byte, sigPriv *SignaturePrivateKey, kp KeyPackage) (*MLSPlaintext, error)
type StateSecrets ¶
type StateSecrets struct {
CipherSuite CipherSuite
// Per-participant non-secret state
Index LeafIndex
InitPriv HPKEPrivateKey
IdentityPriv SignaturePrivateKey
Scheme SignatureScheme
PendingProposals []MLSPlaintext `tls:"head=4"`
// Secret state
PendingUpdates map[ProposalRef]updateSecrets `tls:"head=4"`
Keys keyScheduleEpoch
TreePriv TreeKEMPrivateKey
}
Isolated getters and setters for public and secret state
Note that the get/set operations here are very shallow. We basically assume that the StateSecrets object is temporary, as a carrier for marshaling / unmarshaling.
type SupportedCipherSuitesExtension ¶
type SupportedCipherSuitesExtension struct {
SupportedCipherSuites []CipherSuite `tls:"head=1"`
}
func (SupportedCipherSuitesExtension) Type ¶
func (sce SupportedCipherSuitesExtension) Type() ExtensionType
type SupportedVersionsExtension ¶
type SupportedVersionsExtension struct {
SupportedVersions []ProtocolVersion `tls:"head=1"`
}
func (SupportedVersionsExtension) Type ¶
func (sve SupportedVersionsExtension) Type() ExtensionType
type TreeKEMPrivateKey ¶
type TreeKEMPrivateKey struct {
Suite CipherSuite
Index LeafIndex
UpdateSecret []byte `tls:"head=1"`
PathSecrets map[NodeIndex]Bytes1 `tls:"head=4"`
// contains filtered or unexported fields
}
func NewTreeKEMPrivateKey ¶
func NewTreeKEMPrivateKey(suite CipherSuite, size LeafCount, index LeafIndex, leafSecret []byte) *TreeKEMPrivateKey
func NewTreeKEMPrivateKeyForJoiner ¶
func NewTreeKEMPrivateKeyForJoiner(suite CipherSuite, index LeafIndex, size LeafCount, leafSecret []byte, intersect NodeIndex, pathSecret []byte) *TreeKEMPrivateKey
func (TreeKEMPrivateKey) Clone ¶
func (priv TreeKEMPrivateKey) Clone() TreeKEMPrivateKey
func (TreeKEMPrivateKey) Consistent ¶
func (priv TreeKEMPrivateKey) Consistent(other TreeKEMPrivateKey) bool
func (TreeKEMPrivateKey) ConsistentPub ¶
func (priv TreeKEMPrivateKey) ConsistentPub(pub TreeKEMPublicKey) bool
func (*TreeKEMPrivateKey) Decap ¶
func (priv *TreeKEMPrivateKey) Decap(from LeafIndex, pub TreeKEMPublicKey, context []byte, path DirectPath) error
TODO(RLB) Onece the spec is updated to have EncryptedPathSecrets as a map, change the TreeKEMPublicKey argument to just be a size.
func (*TreeKEMPrivateKey) SetLeafSecret ¶
func (priv *TreeKEMPrivateKey) SetLeafSecret(secret []byte)
func (TreeKEMPrivateKey) SharedPathSecret ¶
func (priv TreeKEMPrivateKey) SharedPathSecret(to LeafIndex) (NodeIndex, []byte, bool)
type TreeKEMPublicKey ¶
type TreeKEMPublicKey struct {
Suite CipherSuite `tls:"omit"`
Nodes []OptionalNode `tls:"head=4"`
}
func NewTreeKEMPublicKey ¶
func NewTreeKEMPublicKey(suite CipherSuite) *TreeKEMPublicKey
func (*TreeKEMPublicKey) AddLeaf ¶
func (pub *TreeKEMPublicKey) AddLeaf(keyPkg KeyPackage) LeafIndex
func (*TreeKEMPublicKey) BlankPath ¶
func (pub *TreeKEMPublicKey) BlankPath(index LeafIndex)
func (TreeKEMPublicKey) Clone ¶
func (pub TreeKEMPublicKey) Clone() TreeKEMPublicKey
func (TreeKEMPublicKey) Encap ¶
func (pub TreeKEMPublicKey) Encap(from LeafIndex, context, leafSecret []byte, leafSigPriv SignaturePrivateKey, opts *KeyPackageOpts) (*TreeKEMPrivateKey, *DirectPath, error)
func (TreeKEMPublicKey) Equals ¶
func (pub TreeKEMPublicKey) Equals(o TreeKEMPublicKey) bool
func (TreeKEMPublicKey) Find ¶
func (pub TreeKEMPublicKey) Find(kp KeyPackage) (LeafIndex, bool)
func (TreeKEMPublicKey) KeyPackage ¶
func (pub TreeKEMPublicKey) KeyPackage(index LeafIndex) (KeyPackage, bool)
func (*TreeKEMPublicKey) Merge ¶
func (pub *TreeKEMPublicKey) Merge(from LeafIndex, path DirectPath) error
func (TreeKEMPublicKey) RootHash ¶
func (pub TreeKEMPublicKey) RootHash() []byte
func (*TreeKEMPublicKey) SetHashAll ¶
func (pub *TreeKEMPublicKey) SetHashAll() error
func (TreeKEMPublicKey) Size ¶
func (pub TreeKEMPublicKey) Size() LeafCount
func (*TreeKEMPublicKey) UpdateLeaf ¶
func (pub *TreeKEMPublicKey) UpdateLeaf(index LeafIndex, keyPkg KeyPackage)
type UpdateProposal ¶
type UpdateProposal struct {
KeyPackage KeyPackage
}
type Welcome ¶
type Welcome struct {
Version ProtocolVersion
CipherSuite CipherSuite
Secrets []EncryptedGroupSecrets `tls:"head=4"`
EncryptedGroupInfo []byte `tls:"head=4"`
// contains filtered or unexported fields
}
func (Welcome) Decrypt ¶
func (w Welcome) Decrypt(suite CipherSuite, epochSecret []byte) (*GroupInfo, error)
func (*Welcome) EncryptTo ¶
func (w *Welcome) EncryptTo(kp KeyPackage, pathSecret []byte)
TODO(RLB): Return error instead of panicking
type X509Credential ¶
type X509Credential struct {
Chain []*x509.Certificate
}
case x509:
opaque cert_data<1..2^24-1>;
func (X509Credential) Equals ¶
func (cred X509Credential) Equals(other *X509Credential) bool
func (X509Credential) MarshalTLS ¶
func (cred X509Credential) MarshalTLS() ([]byte, error)
func (X509Credential) PublicKey ¶
func (cred X509Credential) PublicKey() *SignaturePublicKey
func (X509Credential) Scheme ¶
func (cred X509Credential) Scheme() SignatureScheme
func (*X509Credential) UnmarshalTLS ¶
func (cred *X509Credential) UnmarshalTLS(data []byte) (int, error)
func (X509Credential) Verify ¶
func (cred X509Credential) Verify(trusted []*x509.Certificate) error
XXX(RLB): This is a very simple chain validation, just looking at signatures and whatever basic hop-by-hop policy is applied by CheckSignatureFrom. More complex things like name constraints are not considered. They would be if we were using x509.Certificate.Verify, but that method (1) requires a DNS name as the authentication anchor, and (2) builds its own chain without strict ordering.