92 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			92 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 | ||
|  | } |