2017-03-15 21:27:35 -04:00
|
|
|
// 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
|
2017-06-13 20:43:43 -04:00
|
|
|
// ReuseSignatures tells us to reuse existing Signatures
|
|
|
|
// on serialized output.
|
|
|
|
ReuseSignaturesOnSerialize bool
|
2017-03-15 21:27:35 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
}
|
2017-06-13 20:43:43 -04:00
|
|
|
|
|
|
|
func (c *Config) ReuseSignatures() bool {
|
|
|
|
return c != nil && c.ReuseSignaturesOnSerialize
|
|
|
|
}
|