crypto

package
v1.0.3 Latest Latest
Warning

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

Go to latest
Published: Oct 25, 2016 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// EntropySize defines the amount of entropy necessary to do secure
	// cryptographic operations, in bytes.
	EntropySize = ed25519.EntropySize

	// PublicKeySize defines the size of public keys in bytes.
	PublicKeySize = ed25519.PublicKeySize

	// SecretKeySize defines the size of secret keys in bytes.
	SecretKeySize = ed25519.SecretKeySize

	// SignatureSize defines the size of signatures in bytes.
	SignatureSize = ed25519.SignatureSize
)
View Source
const (
	HashSize = 32
)
View Source
const (
	// SegmentSize is the chunk size that is used when taking the Merkle root
	// of a file. 64 is chosen because bandwidth is scarce and it optimizes for
	// the smallest possible storage proofs. Using a larger base, even 256
	// bytes, would result in substantially faster hashing, but the bandwidth
	// tradeoff was deemed to be more important, as blockchain space is scarce.
	SegmentSize = 64
)
View Source
const (
	TwofishOverhead = 28 // number of bytes added by EncryptBytes
)

Variables

View Source
var (
	ErrHashWrongLen = errors.New("encoded value has the wrong length to be a hash")
)
View Source
var (
	ErrInsufficientLen = errors.New("supplied ciphertext is not long enough to contain a nonce")
)
View Source
var (
	// ErrInvalidSignature is returned if a signature is provided that does not
	// match the data and public key.
	ErrInvalidSignature = errors.New("invalid signature")
)

Functions

func CalculateLeaves added in v0.3.3

func CalculateLeaves(dataSize uint64) uint64

CalculateLeaves calculates the number of leaves that would be pushed from data of size 'dataSize'.

func GenerateKeyPair added in v1.0.0

func GenerateKeyPair() (sk SecretKey, pk PublicKey, err error)

GenerateKeyPair creates a public-secret keypair that can be used to sign and verify messages.

func GenerateKeyPairDeterministic added in v1.0.0

func GenerateKeyPairDeterministic(entropy [EntropySize]byte) (SecretKey, PublicKey)

GenerateKeyPairDeterministic generates keys deterministically using the input entropy. The input entropy must be 32 bytes in length.

func NewHash added in v0.3.0

func NewHash() hash.Hash

NewHash returns a blake2b 256bit hasher.

func Perm added in v1.0.0

func Perm(n int) ([]int, error)

Perm returns, as a slice of n ints, a random permutation of the integers [0,n).

func RandBytes added in v1.0.0

func RandBytes(n int) ([]byte, error)

RandBytes returns n bytes of random data.

func RandIntn added in v1.0.0

func RandIntn(n int) (int, error)

RandIntn returns a non-negative random integer in the range [0,n). It panics if n <= 0.

func ReadSignedObject added in v1.0.0

func ReadSignedObject(r io.Reader, obj interface{}, maxLen uint64, pk PublicKey) error

ReadSignedObject reads a length-prefixed object prefixed by its signature, and verifies the signature.

func SecureWipe added in v1.0.0

func SecureWipe(data []byte)

SecureWipe destroys the data contained within a byte slice. There are no strong guarantees that all copies of the memory have been eliminated. If the OS was doing context switching or using swap space the keys may still be elsewhere in memory.

func VerifyHash added in v0.3.0

func VerifyHash(data Hash, pk PublicKey, sig Signature) error

VerifyHash uses a public key and input data to verify a signature.

func VerifySegment added in v0.3.0

func VerifySegment(base []byte, hashSet []Hash, numSegments, proofIndex uint64, root Hash) bool

VerifySegment will verify that a segment, given the proof, is a part of a Merkle root.

func WriteSignedObject added in v1.0.0

func WriteSignedObject(w io.Writer, obj interface{}, sk SecretKey) error

WriteSignedObject writes a length-prefixed object prefixed by its signature.

Types

type CachedMerkleTree added in v1.0.0

type CachedMerkleTree struct {
	merkletree.CachedTree
}

CachedMerkleTree wraps merkletree.CachedTree, changing some of the function definitions to assume sia-specific constants and return sia-specific types.

func NewCachedTree added in v1.0.0

func NewCachedTree(height uint64) *CachedMerkleTree

NewCachedTree returns a CachedMerkleTree, which can be used for getting Merkle roots and proofs from data that has cached subroots. See merkletree.CachedTree for more details.

func (*CachedMerkleTree) Prove added in v1.0.0

func (ct *CachedMerkleTree) Prove(base []byte, cachedHashSet []Hash) []Hash

Prove is a redefinition of merkletree.CachedTree.Prove, so that Sia-specific types are used instead of the generic types used by the parent package. The base is not a return value because the base is used as input.

func (*CachedMerkleTree) Push added in v1.0.0

func (ct *CachedMerkleTree) Push(h Hash)

Push is a redefinition of merkletree.CachedTree.Push, with the added type safety of only accepting a hash.

func (*CachedMerkleTree) Root added in v1.0.0

func (ct *CachedMerkleTree) Root() (h Hash)

Root is a redefinition of merkletree.CachedTree.Root, returning a Hash instead of a []byte.

type Ciphertext added in v0.3.1

type Ciphertext []byte

func (Ciphertext) MarshalJSON added in v1.0.0

func (c Ciphertext) MarshalJSON() ([]byte, error)

func (*Ciphertext) UnmarshalJSON added in v1.0.0

func (c *Ciphertext) UnmarshalJSON(b []byte) error

type Hash added in v0.3.0

type Hash [HashSize]byte

func HashAll added in v0.3.0

func HashAll(objs ...interface{}) Hash

HashAll takes a set of objects as input, encodes them all using the encoding package, and then hashes the result.

func HashBytes added in v0.3.0

func HashBytes(data []byte) Hash

HashBytes takes a byte slice and returns the result.

func HashObject added in v0.3.0

func HashObject(obj interface{}) Hash

HashObject takes an object as input, encodes it using the encoding package, and then hashes the result.

func MerkleProof added in v1.0.0

func MerkleProof(b []byte, proofIndex uint64) (base []byte, hashSet []Hash)

MerkleProof builds a Merkle proof that the data at segment 'proofIndex' is a part of the Merkle root formed by 'b'.

func MerkleRoot added in v0.3.0

func MerkleRoot(b []byte) Hash

MerkleRoot returns the Merkle root of the input data.

func (*Hash) LoadString added in v1.0.1

func (h *Hash) LoadString(s string) error

LoadString takes a string, parses the hash value of the string, and sets the value of the hash equal to the hash value of the string.

func (Hash) MarshalJSON added in v1.0.0

func (h Hash) MarshalJSON() ([]byte, error)

MarshalJSON marshales a hash as a hex string.

func (Hash) String added in v1.0.0

func (h Hash) String() string

String prints the hash in hex.

func (*Hash) UnmarshalJSON added in v1.0.0

func (h *Hash) UnmarshalJSON(b []byte) error

UnmarshalJSON decodes the json hex string of the hash.

type HashSlice added in v0.3.0

type HashSlice []Hash

HashSlice is used for sorting

func (HashSlice) Len added in v0.3.0

func (hs HashSlice) Len() int

These functions implement sort.Interface, allowing hashes to be sorted.

func (HashSlice) Less added in v0.3.0

func (hs HashSlice) Less(i, j int) bool

func (HashSlice) Swap added in v0.3.0

func (hs HashSlice) Swap(i, j int)

type MerkleTree added in v1.0.0

type MerkleTree struct {
	merkletree.Tree
}

MerkleTree wraps merkletree.Tree, changing some of the function definitions to assume sia-specific constants and return sia-specific types.

func NewTree added in v0.3.0

func NewTree() *MerkleTree

NewTree returns a MerkleTree, which can be used for getting Merkle roots and Merkle proofs on data. See merkletree.Tree for more details.

func (*MerkleTree) PushObject added in v1.0.0

func (t *MerkleTree) PushObject(obj interface{})

PushObject encodes and adds the hash of the encoded object to the tree as a leaf.

func (*MerkleTree) Root added in v1.0.0

func (t *MerkleTree) Root() (h Hash)

Root is a redefinition of merkletree.Tree.Root, returning a Hash instead of a []byte.

type PublicKey

type PublicKey [PublicKeySize]byte

PublicKey is an object that can be used to verify signatures.

type SecretKey

type SecretKey [SecretKeySize]byte

SecretKey can be used to sign data for the corresponding public key.

func (SecretKey) PublicKey added in v1.0.0

func (sk SecretKey) PublicKey() (pk PublicKey)

PublicKey returns the public key that corresponds to a secret key.

type Signature

type Signature [SignatureSize]byte

Signature proves that data was signed by the owner of a particular public key's corresponding secret key.

func SignHash added in v0.3.0

func SignHash(data Hash, sk SecretKey) (sig Signature, err error)

SignHash signs a message using a secret key. Though the current implementation will never return an error, switching libraries in the future may result in errors that can be returned.

type TwofishKey added in v0.3.0

type TwofishKey [EntropySize]byte

func GenerateTwofishKey added in v0.3.0

func GenerateTwofishKey() (key TwofishKey, err error)

GenerateEncryptionKey produces a key that can be used for encrypting and decrypting files.

func (TwofishKey) DecryptBytes added in v0.3.0

func (key TwofishKey) DecryptBytes(ct Ciphertext) ([]byte, error)

DecryptBytes decrypts the ciphertext created by EncryptBytes. The nonce is expected to be the first 12 bytes of the ciphertext.

func (TwofishKey) EncryptBytes added in v0.3.0

func (key TwofishKey) EncryptBytes(plaintext []byte) (Ciphertext, error)

EncryptBytes encrypts a []byte using the key. EncryptBytes uses GCM and prepends the nonce (12 bytes) to the ciphertext.

func (TwofishKey) NewCipher added in v0.3.2

func (key TwofishKey) NewCipher() cipher.Block

NewCipher creates a new Twofish cipher from the key.

func (TwofishKey) NewReader added in v0.3.2

func (key TwofishKey) NewReader(r io.Reader) io.Reader

NewReader returns a reader that encrypts or decrypts its input stream.

func (TwofishKey) NewWriter added in v0.3.2

func (key TwofishKey) NewWriter(w io.Writer) io.Writer

NewWriter returns a writer that encrypts or decrypts its input stream.

Jump to

Keyboard shortcuts

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