Documentation ¶
Index ¶
- Constants
- Variables
- func DeleteCID(kv versioned.KV, key string) error
- func DeleteContact(kv versioned.KV, cid *id.ID) error
- func DeleteCyclicKey(kv versioned.KV, key string) error
- func DeleteSIDHPrivateKey(kv versioned.KV, key string) error
- func DeleteSIDHPublicKey(kv versioned.KV, key string) error
- func GenerateSIDHKeyPair(variant sidh.KeyVariant, rng io.Reader) (*sidh.PrivateKey, *sidh.PublicKey)
- func GetCompatibleSIDHVariant(otherVariant sidh.KeyVariant) sidh.KeyVariant
- func LoadBucket(capacity, leaked uint32, leakDuration time.Duration, kv versioned.KV) (*rateLimiting.Bucket, error)
- func LoadContact(kv versioned.KV, cid *id.ID) (contact.Contact, error)
- func LoadCyclicKey(kv versioned.KV, key string) (*cyclic.Int, error)
- func LoadGroup(kv versioned.KV, key string) (*cyclic.Group, error)
- func LoadID(kv versioned.KV, key string) (*id.ID, error)
- func LoadNDF(kv versioned.KV, key string) (*ndf.NetworkDefinition, error)
- func LoadSIDHPrivateKey(kv versioned.KV, key string) (*sidh.PrivateKey, error)
- func LoadSIDHPublicKey(kv versioned.KV, key string) (*sidh.PublicKey, error)
- func MakeSIDHPrivateKeyKey(cid *id.ID) string
- func MakeSIDHPublicKeyKey(cid *id.ID) string
- func MakeStoredMessageKey(key string, h MessageHash) string
- func NewOrLoadSalt(kv versioned.KV, stream io.Reader) ([]byte, error)
- func NewSIDHPrivateKey(variant sidh.KeyVariant) *sidh.PrivateKey
- func NewSIDHPublicKey(variant sidh.KeyVariant) *sidh.PublicKey
- func NewStoredBucket(capacity, leaked uint32, leakDuration time.Duration, kv versioned.KV) *rateLimiting.Bucket
- func SaveNDF(kv versioned.KV, key string, ndf *ndf.NetworkDefinition) error
- func StoreContact(kv versioned.KV, c contact.Contact) error
- func StoreCyclicKey(kv versioned.KV, cy *cyclic.Int, key string) error
- func StoreGroup(kv versioned.KV, grp *cyclic.Group, key string) error
- func StoreID(kv versioned.KV, sid *id.ID, key string) error
- func StoreSIDHPrivateKey(kv versioned.KV, sidH *sidh.PrivateKey, key string) error
- func StoreSIDHPublicKey(kv versioned.KV, sidH *sidh.PublicKey, key string) error
- func StringSIDHPrivKey(k *sidh.PrivateKey) string
- func StringSIDHPubKey(k *sidh.PublicKey) string
- type BlockStore
- type BucketParamStore
- type BucketStore
- type Iterator
- type MessageBuffer
- func (mb *MessageBuffer) Add(m interface{}) interface{}
- func (mb *MessageBuffer) AddProcessing(m interface{}) interface{}
- func (mb *MessageBuffer) Failed(m interface{})
- func (mb *MessageBuffer) GetMessages() map[MessageHash]struct{}
- func (mb *MessageBuffer) GetProcessingMessages() map[MessageHash]struct{}
- func (mb *MessageBuffer) Next() (interface{}, bool)
- func (mb *MessageBuffer) Succeeded(m interface{})
- type MessageHandler
- type MessageHash
- type MultiStateVector
- func (msv *MultiStateVector) CompareAndSwap(keyNum uint16, old, new uint8) bool
- func (msv *MultiStateVector) CompareNotAndSwap(keyNum uint16, old, new uint8) bool
- func (msv *MultiStateVector) DeepCopy() *MultiStateVector
- func (msv *MultiStateVector) Delete() error
- func (msv *MultiStateVector) Get(keyNum uint16) uint8
- func (msv *MultiStateVector) GetCount(state uint8) uint16
- func (msv *MultiStateVector) GetKeys(state uint8) []uint16
- func (msv *MultiStateVector) GetNumKeys() uint16
- func (msv *MultiStateVector) Set(keyNum uint16, state uint8)
- func (msv *MultiStateVector) SetMany(keyNums []uint16, state uint8)
- type StateVector
- func (sv *StateVector) DeepCopy() *StateVector
- func (sv *StateVector) Delete() error
- func (sv *StateVector) GetNumAvailable() uint32
- func (sv *StateVector) GetNumKeys() uint32
- func (sv *StateVector) GetNumUsed() uint32
- func (sv *StateVector) GetUnusedKeyNums() []uint32
- func (sv *StateVector) GetUsedKeyNums() []uint32
- func (sv *StateVector) MarshalJSON() ([]byte, error)
- func (sv *StateVector) Next() (uint32, error)
- func (sv *StateVector) SaveTEST(x interface{}) error
- func (sv *StateVector) SetFirstAvailableTEST(keyNum uint32, x interface{})
- func (sv *StateVector) SetKvTEST(kv versioned.KV, x interface{})
- func (sv *StateVector) SetNumAvailableTEST(numAvailable uint32, x interface{})
- func (sv *StateVector) SetNumKeysTEST(numKeys uint32, x interface{})
- func (sv *StateVector) String() string
- func (sv *StateVector) UnmarshalJSON(data []byte) error
- func (sv *StateVector) Unuse(keyNum uint32)
- func (sv *StateVector) UnuseMany(keyNums ...uint32)
- func (sv *StateVector) Use(keyNum uint32)
- func (sv *StateVector) UseMany(keyNums ...uint32)
- func (sv *StateVector) Used(keyNum uint32) bool
Constants ¶
const CurrentMessageBufferVersion = 0
Version of the file saved to the key value store
const KeyId = sidh.Fp503
Variables ¶
var PrivKeyBitSize = PrivKeyByteSize * 8
var PrivKeyByteSize = sidh.NewPrivateKey(sidh.Fp503, sidh.KeyVariantSidhA).Size()
var PubKeyBitSize = PubKeyByteSize * 8
var PubKeyByteSize = sidh.NewPublicKey(sidh.Fp503, sidh.KeyVariantSidhA).Size()
Functions ¶
func DeleteContact ¶
DeleteContact removes the contact identified by cid from the kv.
Parameters:
- kv - the key value store to delete from
- cid - the contacts unique *id.ID to delete
Returns:
- error if an error occurs or nil otherwise
func DeleteCyclicKey ¶
DeleteCyclicKey deletes a given cyclic key from storage
func DeleteSIDHPrivateKey ¶
DeleteSIDHPrivateKey removes the key from the store
func DeleteSIDHPublicKey ¶
DeleteSIDHPubKey removes the key from the store
func GenerateSIDHKeyPair ¶
func GenerateSIDHKeyPair(variant sidh.KeyVariant, rng io.Reader) ( *sidh.PrivateKey, *sidh.PublicKey)
GenerateSIDHKeyPair generates a SIDH keypair
func GetCompatibleSIDHVariant ¶
func GetCompatibleSIDHVariant(otherVariant sidh.KeyVariant) sidh.KeyVariant
GetSIDHVariant returns the variant opposite the otherVariant
func LoadBucket ¶
func LoadBucket(capacity, leaked uint32, leakDuration time.Duration, kv versioned.KV) (*rateLimiting.Bucket, error)
LoadBucket is a storage operation which loads a bucket from storage.
func LoadContact ¶
LoadContact reads a contact from a versioned.KV vie their contact ID.
Parameters:
- kv - the key value store to read the contact
- cid - the contacts unique *id.ID to load
Returns:
- contact.Contact object populated with the user info, or empty on error.
- version number of the contact loaded.
- error if an error occurs, or nil otherwise
func LoadSIDHPrivateKey ¶
LoadSIDHPrivateKeyA loads a public key from storage.
func LoadSIDHPublicKey ¶
LoadSIDHPubKeyA loads a public key from storage.
func MakeSIDHPrivateKeyKey ¶
func MakeSIDHPublicKeyKey ¶
func MakeStoredMessageKey ¶
func MakeStoredMessageKey(key string, h MessageHash) string
MakeStoredMessageKey generates a new key for the message based on its has.
func NewOrLoadSalt ¶
NewOrLoadSalt will attempt to find a stored salt if one exists. If one does not exist in storage, a new one will be generated. The newly generated salt will be stored.
func NewSIDHPrivateKey ¶
func NewSIDHPrivateKey(variant sidh.KeyVariant) *sidh.PrivateKey
NewSIDHPUblicKey is a helper which returns a proper new SIDH public key Right now this is set to Fp434 but it could change.
func NewSIDHPublicKey ¶
func NewSIDHPublicKey(variant sidh.KeyVariant) *sidh.PublicKey
NewSIDHPUblicKey is a helper which returns a proper new SIDH public key Right now this is set to Fp434 but it could change.
func NewStoredBucket ¶
func NewStoredBucket(capacity, leaked uint32, leakDuration time.Duration, kv versioned.KV) *rateLimiting.Bucket
NewStoredBucket creates a new, empty Bucket and saves it to storage.
func StoreContact ¶
StoreContact writes a contact into a versioned.KV using the contact ID as the key.
Parameters:
- kv - the key value store to write the contact.
- c - the contact object to store.
Returns:
- error if the write fails to succeed for any reason.
func StoreSIDHPrivateKey ¶
StoreSIDHPrivateKeyA is a helper to store the requestor public key (which is always of type A)
func StoreSIDHPublicKey ¶
StoreSIDHPubKeyA is a helper to store the requestor public key (which is always of type A)
func StringSIDHPrivKey ¶
func StringSIDHPrivKey(k *sidh.PrivateKey) string
String interface to dump the contents of the public key as b64 string NOTE: public key, not the private. We don't ever want to drop a private key into a log somewhere.
func StringSIDHPubKey ¶
String interface impl to dump the contents of the public key as b64 string
Types ¶
type BlockStore ¶
type BlockStore struct {
// contains filtered or unexported fields
}
func LoadBlockStore ¶
func LoadBlockStore(kv versioned.KV) (*BlockStore, [][]byte, error)
LoadBlockStore returns the BlockStore from storage and a concatenation of all blocks in storage.
func NewBlockStore ¶
func NewBlockStore(numBlocks, blockSize int, kv versioned.KV) (*BlockStore, error)
NewBlockStore returns a new BlockStore and saves it to storage.
func (*BlockStore) Store ¶
func (bs *BlockStore) Store(iter Iterator) error
Store stores all items in the Iterator to storage in blocks.
type BucketParamStore ¶
type BucketParamStore struct {
// contains filtered or unexported fields
}
BucketParamStore is the storage object for bucket params. Updated via the network follower.
func LoadBucketParamsStore ¶
func LoadBucketParamsStore(kv versioned.KV) (*BucketParamStore, error)
LoadBucketParamsStore loads the bucket params data from storage and constructs a BucketParamStore.
func NewBucketParamsStore ¶
func NewBucketParamsStore(capacity, leakedTokens uint32, leakDuration time.Duration, kv versioned.KV) (*BucketParamStore, error)
NewBucketParamsStore is the constructor for a BucketParamStore.
func (*BucketParamStore) Get ¶
func (s *BucketParamStore) Get() *rateLimiting.MapParams
Get reads and returns te bucket params.
func (*BucketParamStore) UpdateParams ¶
func (s *BucketParamStore) UpdateParams(capacity, leakedTokens uint32, leakDuration time.Duration) error
UpdateParams updates the parameters to store.
type BucketStore ¶
type BucketStore struct {
// contains filtered or unexported fields
}
BucketStore stores a leaky bucket into storage. The bucket is saved in a JSON-able format.
type MessageBuffer ¶
type MessageBuffer struct {
// contains filtered or unexported fields
}
MessageBuffer holds a list of messages in the "not processed" or "processing" state both in memory. Messages in the "not processed" state are held in the messages map and messages in the "processing" state are moved into the processingMessages map. When the message is done being processed, it is removed from the buffer. The actual messages are saved in the key value store along with a copy of the buffer that is held in memory.
func LoadMessageBuffer ¶
func LoadMessageBuffer(kv versioned.KV, handler MessageHandler, key string) (*MessageBuffer, error)
LoadMessageBuffer loads an existing message buffer from the key value store into memory at the given key. Returns an error if buffer cannot be loaded.
func NewMessageBuffer ¶
func NewMessageBuffer(kv versioned.KV, handler MessageHandler, key string) (*MessageBuffer, error)
NewMessageBuffer creates a new empty buffer and saves it to the passed in key value store at the specified key. An error is returned on an unsuccessful save.
func (*MessageBuffer) Add ¶
func (mb *MessageBuffer) Add(m interface{}) interface{}
Add adds a message to the buffer in "not processing" state.
func (*MessageBuffer) AddProcessing ¶
func (mb *MessageBuffer) AddProcessing(m interface{}) interface{}
Add adds a message to the buffer in "processing" state.
func (*MessageBuffer) Failed ¶
func (mb *MessageBuffer) Failed(m interface{})
Failed sets a message as failed to process. It changes the message back to the "not processed" state.
func (*MessageBuffer) GetMessages ¶
func (mb *MessageBuffer) GetMessages() map[MessageHash]struct{}
GetMessages is a getter function which retrieves the MessageBuffer.messages map.
func (*MessageBuffer) GetProcessingMessages ¶
func (mb *MessageBuffer) GetProcessingMessages() map[MessageHash]struct{}
GetProcessingMessages is a getter function which retrieves the MessageBuffer.processingMessages map.
func (*MessageBuffer) Next ¶
func (mb *MessageBuffer) Next() (interface{}, bool)
Next gets the next message from the buffer whose state is "not processing". The returned messages are moved to the processing state. If there are no messages remaining, then false is returned.
func (*MessageBuffer) Succeeded ¶
func (mb *MessageBuffer) Succeeded(m interface{})
Remove sets a messaged as processed and removed it from the buffer.
type MessageHandler ¶
type MessageHandler interface { // SaveMessage saves the message as a versioned object at the specified key // in the key value store. SaveMessage(kv versioned.KV, m interface{}, key string) error // LoadMessage returns the message with the specified key from the key value // store. LoadMessage(kv versioned.KV, key string) (interface{}, error) // DeleteMessage deletes the message with the specified key from the key // value store. DeleteMessage(kv versioned.KV, key string) error // HashMessage generates a hash of the message. HashMessage(m interface{}) MessageHash }
MessageHandler interface used to handle the passed in message type so the buffer can be used at different layers of the stack.
type MessageHash ¶
type MessageHash [16]byte
MessageHash stores the hash of a message, which is used as the key for each message stored in the buffer.
func (MessageHash) String ¶
func (m MessageHash) String() string
type MultiStateVector ¶
type MultiStateVector struct {
// contains filtered or unexported fields
}
MultiStateVector stores a list of a set number of keys and their state. It supports any number of states, unlike the StateVector. It is storage backed.
func LoadMultiStateVector ¶
func LoadMultiStateVector(stateMap [][]bool, key string, kv versioned.KV) ( *MultiStateVector, error)
LoadMultiStateVector loads a MultiStateVector with the specified key from the given versioned storage.
func NewMultiStateVector ¶
func NewMultiStateVector(numKeys uint16, numStates uint8, stateMap [][]bool, key string, kv versioned.KV) (*MultiStateVector, error)
NewMultiStateVector generates a new MultiStateVector with the specified number of keys and bits pr state per keys. The max number of states in 64.
func (*MultiStateVector) CompareAndSwap ¶ added in v4.6.3
func (msv *MultiStateVector) CompareAndSwap(keyNum uint16, old, new uint8) bool
CompareAndSwap compares the state of the key to the old state and, if they match, swaps its state with the new state. Returns true if the swap occurs and false otherwise.
func (*MultiStateVector) CompareNotAndSwap ¶ added in v4.6.3
func (msv *MultiStateVector) CompareNotAndSwap(keyNum uint16, old, new uint8) bool
CompareNotAndSwap compares the state of the key to the old state and, if they DO NOT match, swaps its state with the new state. Returns true if the swap occurs and false otherwise.
func (*MultiStateVector) DeepCopy ¶
func (msv *MultiStateVector) DeepCopy() *MultiStateVector
DeepCopy creates a deep copy of the MultiStateVector without a storage backend. The deep copy can only be used for functions that do not access storage.
func (*MultiStateVector) Delete ¶
func (msv *MultiStateVector) Delete() error
Delete removes the MultiStateVector from storage.
func (*MultiStateVector) Get ¶
func (msv *MultiStateVector) Get(keyNum uint16) uint8
Get returns the state of the key.
func (*MultiStateVector) GetCount ¶
func (msv *MultiStateVector) GetCount(state uint8) uint16
GetCount returns the number of keys with the given state.
func (*MultiStateVector) GetKeys ¶
func (msv *MultiStateVector) GetKeys(state uint8) []uint16
GetKeys returns a list of all keys with the specified status.
func (*MultiStateVector) GetNumKeys ¶
func (msv *MultiStateVector) GetNumKeys() uint16
GetNumKeys returns the total number of keys.
func (*MultiStateVector) Set ¶
func (msv *MultiStateVector) Set(keyNum uint16, state uint8)
Set marks the key with the given state.
func (*MultiStateVector) SetMany ¶
func (msv *MultiStateVector) SetMany(keyNums []uint16, state uint8)
SetMany marks each of the keys with the given state. Returns an error for an invalid state or if the state change is not allowed.
type StateVector ¶
type StateVector struct {
// contains filtered or unexported fields
}
StateVector stores a list of a set number of items and their binary state. It is storage backed.
func LoadStateVector ¶
func LoadStateVector(kv versioned.KV, key string) (*StateVector, error)
LoadStateVector loads a StateVector with the specified key from the given versioned storage.
func NewStateVector ¶
func NewStateVector(numKeys uint32, disableKV bool, key string, kv versioned.KV) (*StateVector, error)
NewStateVector generates a new StateVector with the specified number of keys.
func (*StateVector) DeepCopy ¶
func (sv *StateVector) DeepCopy() *StateVector
DeepCopy creates a deep copy of the StateVector without a storage backend. The deep copy can only be used for functions that do not access storage.
func (*StateVector) Delete ¶
func (sv *StateVector) Delete() error
Delete remove the StateVector from storage.
func (*StateVector) GetNumAvailable ¶
func (sv *StateVector) GetNumAvailable() uint32
GetNumAvailable returns the number of unused keys.
func (*StateVector) GetNumKeys ¶
func (sv *StateVector) GetNumKeys() uint32
GetNumKeys returns the total number of keys.
func (*StateVector) GetNumUsed ¶
func (sv *StateVector) GetNumUsed() uint32
GetNumUsed returns the number of used keys.
func (*StateVector) GetUnusedKeyNums ¶
func (sv *StateVector) GetUnusedKeyNums() []uint32
GetUnusedKeyNums returns a list of all unused keys.
func (*StateVector) GetUsedKeyNums ¶
func (sv *StateVector) GetUsedKeyNums() []uint32
GetUsedKeyNums returns a list of all used keys.
func (*StateVector) MarshalJSON ¶ added in v4.6.3
func (sv *StateVector) MarshalJSON() ([]byte, error)
MarshalJSON marshals the StateVector into valid JSON. This function adheres to the json.Marshaler interface.
func (*StateVector) Next ¶
func (sv *StateVector) Next() (uint32, error)
Next marks the first unused key as used. An error is returned if all keys are used or if the save to storage fails.
func (*StateVector) SaveTEST ¶
func (sv *StateVector) SaveTEST(x interface{}) error
SaveTEST saves the StateVector to storage. This should only be used for testing.
func (*StateVector) SetFirstAvailableTEST ¶
func (sv *StateVector) SetFirstAvailableTEST(keyNum uint32, x interface{})
SetFirstAvailableTEST sets the firstAvailable. This should only be used for testing.
func (*StateVector) SetKvTEST ¶
func (sv *StateVector) SetKvTEST(kv versioned.KV, x interface{})
SetKvTEST sets the kv. This should only be used for testing.
func (*StateVector) SetNumAvailableTEST ¶
func (sv *StateVector) SetNumAvailableTEST(numAvailable uint32, x interface{})
SetNumAvailableTEST sets the numAvailable. This should only be used for testing.
func (*StateVector) SetNumKeysTEST ¶
func (sv *StateVector) SetNumKeysTEST(numKeys uint32, x interface{})
SetNumKeysTEST sets the numKeys. This should only be used for testing.
func (*StateVector) String ¶
func (sv *StateVector) String() string
String returns a human-readable representing of the StateVector for logging and debugging. This functions adheres to the fmt.Stringer interface.
func (*StateVector) UnmarshalJSON ¶ added in v4.6.3
func (sv *StateVector) UnmarshalJSON(data []byte) error
UnmarshalJSON unmarshalls the JSON into the StateVector. This function adheres to the json.Unmarshaler interface.
func (*StateVector) Unuse ¶
func (sv *StateVector) Unuse(keyNum uint32)
Unuse marks the key as unused (sets it to 0).
func (*StateVector) UnuseMany ¶
func (sv *StateVector) UnuseMany(keyNums ...uint32)
UnuseMany marks all the key as unused (sets them to 0). Saves only after all of the keys are set.
func (*StateVector) Use ¶
func (sv *StateVector) Use(keyNum uint32)
Use marks the key as used (sets it to 1).
func (*StateVector) UseMany ¶
func (sv *StateVector) UseMany(keyNums ...uint32)
UseMany marks all of the keys as used (sets them to 1). Saves only after all of the keys are set.
func (*StateVector) Used ¶
func (sv *StateVector) Used(keyNum uint32) bool
Used returns true if the key is used (set to 1) or false if the key is unused (set to 0).