matterbridge/vendor/go.mau.fi/libsignal/keys/session/Pair.go

44 lines
1.2 KiB
Go

// Package session provides a simple structure for session keys, which is
// a pair of root and chain keys for a session.
package session
import (
"go.mau.fi/libsignal/ecc"
"go.mau.fi/libsignal/keys/chain"
"go.mau.fi/libsignal/keys/message"
)
// RootKeyable is an interface for all root key implementations that are part of
// a session keypair.
type RootKeyable interface {
Bytes() []byte
CreateChain(theirRatchetKey ecc.ECPublicKeyable, ourRatchetKey *ecc.ECKeyPair) (*KeyPair, error)
}
// ChainKeyable is an interface for all chain key implementations that are part of
// a session keypair.
type ChainKeyable interface {
Key() []byte
Index() uint32
NextKey() *chain.Key
MessageKeys() *message.Keys
Current() *chain.Key
}
// NewKeyPair returns a new session key pair that holds a root and chain key.
func NewKeyPair(rootKey RootKeyable, chainKey ChainKeyable) *KeyPair {
keyPair := KeyPair{
RootKey: rootKey,
ChainKey: chainKey,
}
return &keyPair
}
// KeyPair is a session key pair that holds a single root and chain key pair. These
// keys are ratcheted after every message sent and every message round trip.
type KeyPair struct {
RootKey RootKeyable
ChainKey ChainKeyable
}