object

package
v0.10.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 26, 2024 License: MIT Imports: 12 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
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

func SplitSlabs(slabs []Slab, lengths []int) [][]SlabSlice

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{}

func (Object) Encrypt

func (o Object) Encrypt(r io.Reader, offset uint64) (cipher.StreamReader, error)

Encrypt wraps the given reader with a reader that encrypts the stream using the object's key.

func (Object) TotalSize

func (o Object) TotalSize() int64

TotalSize returns the total size of the object.

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 NewSlab

func NewSlab(minShards uint8) Slab

NewSlab returns a new slab for the shards.

func (Slab) Contracts

func (s Slab) Contracts() map[types.PublicKey]map[types.FileContractID]struct{}

func (Slab) Encode

func (s Slab) Encode(buf []byte, shards [][]byte)

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

func (s Slab) Encrypt(shards [][]byte)

Encrypt xors shards with the keystream derived from s.Key, using a different nonce for each shard.

func (Slab) IsPartial

func (s Slab) IsPartial() bool

func (Slab) Length

func (s Slab) Length() int

Length returns the length of the raw data stored in s.

func (Slab) Reconstruct

func (s Slab) Reconstruct(shards [][]byte) error

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

func SingleSlabs(slabs []Slab, length int) []SlabSlice

SingleSlabs converts a set of slabs into slices comprising a single object with the specified length.

func (SlabSlice) Decrypt

func (ss SlabSlice) Decrypt(shards [][]byte)

Decrypt xors shards with the keystream derived from s.Key (starting at the slice offset), using a different nonce for each shard.

func (SlabSlice) Recover

func (ss SlabSlice) Recover(w io.Writer, shards [][]byte) error

Recover recovers a slice of slab data from the supplied shards.

func (SlabSlice) SectorRegion

func (ss SlabSlice) SectorRegion() (offset, length uint32)

SectorRegion returns the offset and length of the sector region that must be downloaded in order to recover the data referenced by the SlabSlice.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL