6e1a3987b7
This commit adds a command called `self-update` which downloads the latest released version of restic from GitHub and replacing the current binary with it. It does not rely on any external program (so it'll work everywhere), but still verifies the GPG signature using the embedded GPG public key. By default, the `self-update` command is hidden behind the `selfupdate` built tag, which is only set when restic is built using `build.go`. The reason for this is that downstream distributions will then not include the command by default, so users are encouraged to use the platform-specific distribution mechanism.
91 lines
2.5 KiB
Go
91 lines
2.5 KiB
Go
// Copyright 2012 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package packet
|
|
|
|
import (
|
|
"crypto"
|
|
"crypto/rand"
|
|
"io"
|
|
"time"
|
|
)
|
|
|
|
// Config collects a number of parameters along with sensible defaults.
|
|
// A nil *Config is valid and results in all default values.
|
|
type Config struct {
|
|
// Rand provides the source of entropy.
|
|
// If nil, the crypto/rand Reader is used.
|
|
Rand io.Reader
|
|
// DefaultHash is the default hash function to be used.
|
|
// If zero, SHA-256 is used.
|
|
DefaultHash crypto.Hash
|
|
// DefaultCipher is the cipher to be used.
|
|
// If zero, AES-128 is used.
|
|
DefaultCipher CipherFunction
|
|
// Time returns the current time as the number of seconds since the
|
|
// epoch. If Time is nil, time.Now is used.
|
|
Time func() time.Time
|
|
// DefaultCompressionAlgo is the compression algorithm to be
|
|
// applied to the plaintext before encryption. If zero, no
|
|
// compression is done.
|
|
DefaultCompressionAlgo CompressionAlgo
|
|
// CompressionConfig configures the compression settings.
|
|
CompressionConfig *CompressionConfig
|
|
// S2KCount is only used for symmetric encryption. It
|
|
// determines the strength of the passphrase stretching when
|
|
// the said passphrase is hashed to produce a key. S2KCount
|
|
// should be between 1024 and 65011712, inclusive. If Config
|
|
// is nil or S2KCount is 0, the value 65536 used. Not all
|
|
// values in the above range can be represented. S2KCount will
|
|
// be rounded up to the next representable value if it cannot
|
|
// be encoded exactly. When set, it is strongly encrouraged to
|
|
// use a value that is at least 65536. See RFC 4880 Section
|
|
// 3.7.1.3.
|
|
S2KCount int
|
|
// RSABits is the number of bits in new RSA keys made with NewEntity.
|
|
// If zero, then 2048 bit keys are created.
|
|
RSABits int
|
|
}
|
|
|
|
func (c *Config) Random() io.Reader {
|
|
if c == nil || c.Rand == nil {
|
|
return rand.Reader
|
|
}
|
|
return c.Rand
|
|
}
|
|
|
|
func (c *Config) Hash() crypto.Hash {
|
|
if c == nil || uint(c.DefaultHash) == 0 {
|
|
return crypto.SHA256
|
|
}
|
|
return c.DefaultHash
|
|
}
|
|
|
|
func (c *Config) Cipher() CipherFunction {
|
|
if c == nil || uint8(c.DefaultCipher) == 0 {
|
|
return CipherAES128
|
|
}
|
|
return c.DefaultCipher
|
|
}
|
|
|
|
func (c *Config) Now() time.Time {
|
|
if c == nil || c.Time == nil {
|
|
return time.Now()
|
|
}
|
|
return c.Time()
|
|
}
|
|
|
|
func (c *Config) Compression() CompressionAlgo {
|
|
if c == nil {
|
|
return CompressionNone
|
|
}
|
|
return c.DefaultCompressionAlgo
|
|
}
|
|
|
|
func (c *Config) PasswordHashIterations() int {
|
|
if c == nil || c.S2KCount == 0 {
|
|
return 0
|
|
}
|
|
return c.S2KCount
|
|
}
|