Documentation ¶
Index ¶
- Variables
- func ContractsFromShards(shards []Sector) map[types.PublicKey]map[types.FileContractID]struct{}
- func SplitSlabs(slabs []Slab, lengths []int) [][]SlabSlice
- type EncryptionKey
- func (k EncryptionKey) Decrypt(w io.Writer, offset uint64) cipher.StreamWriter
- func (k EncryptionKey) Encrypt(r io.Reader, offset uint64) (cipher.StreamReader, error)
- func (k EncryptionKey) IsNoopKey() bool
- func (k EncryptionKey) MarshalBinary() ([]byte, error)
- func (k EncryptionKey) MarshalText() ([]byte, error)
- func (k EncryptionKey) String() string
- func (k *EncryptionKey) UnmarshalBinary(b []byte) error
- func (k *EncryptionKey) UnmarshalText(b []byte) error
- type Object
- type Sector
- type Slab
- type SlabSlice
Constants ¶
This section is empty.
Variables ¶
var NoOpKey = EncryptionKey{ // contains filtered or unexported fields }
Functions ¶
func ContractsFromShards ¶
func ContractsFromShards(shards []Sector) map[types.PublicKey]map[types.FileContractID]struct{}
ContractsFromShards is a helper to extract all contracts used by a set of shards.
func SplitSlabs ¶
SplitSlabs splits a set of slabs into slices comprising objects with the specified lengths.
Types ¶
type EncryptionKey ¶
type EncryptionKey struct {
// contains filtered or unexported fields
}
A EncryptionKey can encrypt and decrypt messages.
func GenerateEncryptionKey ¶
func GenerateEncryptionKey() EncryptionKey
GenerateEncryptionKey returns a random encryption key.
func (EncryptionKey) Decrypt ¶
func (k EncryptionKey) Decrypt(w io.Writer, offset uint64) cipher.StreamWriter
Decrypt returns a cipher.StreamWriter that decrypts w with k, starting at the specified offset.
func (EncryptionKey) Encrypt ¶
func (k EncryptionKey) Encrypt(r io.Reader, offset uint64) (cipher.StreamReader, error)
Encrypt returns a cipher.StreamReader that encrypts r with k starting at the given offset.
func (EncryptionKey) IsNoopKey ¶
func (k EncryptionKey) IsNoopKey() bool
func (EncryptionKey) MarshalBinary ¶
func (k EncryptionKey) MarshalBinary() ([]byte, error)
MarshalBinary implements encoding.BinaryMarshaler.
func (EncryptionKey) MarshalText ¶
func (k EncryptionKey) MarshalText() ([]byte, error)
MarshalText implements the encoding.TextMarshaler interface.
func (EncryptionKey) String ¶
func (k EncryptionKey) String() string
String implements fmt.Stringer.
func (*EncryptionKey) UnmarshalBinary ¶
func (k *EncryptionKey) UnmarshalBinary(b []byte) error
func (*EncryptionKey) UnmarshalText ¶
func (k *EncryptionKey) UnmarshalText(b []byte) error
UnmarshalText implements the encoding.TextUnmarshaler interface.
type Object ¶
type Object struct { Key EncryptionKey `json:"key"` Slabs []SlabSlice `json:"slabs"` }
An Object is a unit of data that has been stored on a host.
func NewObject ¶
func NewObject(ec EncryptionKey) Object
NewObject returns a new Object with a random key.
func (Object) Contracts ¶
func (o Object) Contracts() map[types.PublicKey]map[types.FileContractID]struct{}
type Sector ¶
type Sector struct { Contracts map[types.PublicKey][]types.FileContractID `json:"contracts"` LatestHost types.PublicKey `json:"latestHost"` Root types.Hash256 `json:"root"` }
A Sector uniquely identifies a sector stored on a particular host.
type Slab ¶
type Slab struct { Health float64 `json:"health"` Key EncryptionKey `json:"key"` MinShards uint8 `json:"minShards"` Shards []Sector `json:"shards,omitempty"` }
A Slab is raw data that has been erasure-encoded into sector-sized shards, encrypted, and stored across a set of hosts. A distinct EncryptionKey should be used for each Slab, and should not be the same key used for the parent Object.
func NewPartialSlab ¶
func NewPartialSlab(ec EncryptionKey, minShards uint8) Slab
NewPartialSlab returns a new partial slab.
func (Slab) Contracts ¶
func (s Slab) Contracts() map[types.PublicKey]map[types.FileContractID]struct{}
func (Slab) Encode ¶
Encode encodes slab data into sector-sized shards. The supplied shards should have a capacity of at least rhpv2.SectorSize, or they will be reallocated.
func (Slab) Encrypt ¶
Encrypt xors shards with the keystream derived from s.Key, using a different nonce for each shard.
func (Slab) Reconstruct ¶
Reconstruct reconstructs the missing shards of a slab. Missing shards must have a len of zero. All shards should have a capacity of at least rhpv2.SectorSize, or they will be reallocated.
type SlabSlice ¶
type SlabSlice struct { Slab `json:"slab"` Offset uint32 `json:"offset"` Length uint32 `json:"length"` }
A SlabSlice is a contiguous region within a Slab. Note that the offset and length always refer to the reconstructed data, and therefore may not necessarily be aligned to a leaf or chunk boundary. Use the SectorRegion method to compute the chunk-aligned offset and length.
func SingleSlabs ¶
SingleSlabs converts a set of slabs into slices comprising a single object with the specified length.
func (SlabSlice) Decrypt ¶
Decrypt xors shards with the keystream derived from s.Key (starting at the slice offset), using a different nonce for each shard.
func (SlabSlice) SectorRegion ¶
SectorRegion returns the offset and length of the sector region that must be downloaded in order to recover the data referenced by the SlabSlice.