diff options
| author | 2023-08-07 08:13:55 +0000 | |
|---|---|---|
| committer | 2023-08-07 08:13:55 +0000 | |
| commit | 0242f03d36a519a90dcaa905e5d2e272f008512b (patch) | |
| tree | 208e9c294e85b5ce32e120fabdd400925abb6d00 /vendor/golang.org/x/crypto | |
| parent | [chore]: Bump golang.org/x/image from 0.9.0 to 0.11.0 (#2074) (diff) | |
| download | gotosocial-0242f03d36a519a90dcaa905e5d2e272f008512b.tar.xz | |
[chore]: Bump golang.org/x/crypto from 0.11.0 to 0.12.0 (#2077)
Diffstat (limited to 'vendor/golang.org/x/crypto')
| -rw-r--r-- | vendor/golang.org/x/crypto/ssh/common.go | 51 | ||||
| -rw-r--r-- | vendor/golang.org/x/crypto/ssh/kex.go | 12 | ||||
| -rw-r--r-- | vendor/golang.org/x/crypto/ssh/server.go | 21 | 
3 files changed, 70 insertions, 14 deletions
diff --git a/vendor/golang.org/x/crypto/ssh/common.go b/vendor/golang.org/x/crypto/ssh/common.go index 9ba6e10a4..b419c761e 100644 --- a/vendor/golang.org/x/crypto/ssh/common.go +++ b/vendor/golang.org/x/crypto/ssh/common.go @@ -49,7 +49,8 @@ var supportedKexAlgos = []string{  	// P384 and P521 are not constant-time yet, but since we don't  	// reuse ephemeral keys, using them for ECDH should be OK.  	kexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521, -	kexAlgoDH14SHA256, kexAlgoDH14SHA1, kexAlgoDH1SHA1, +	kexAlgoDH14SHA256, kexAlgoDH16SHA512, kexAlgoDH14SHA1, +	kexAlgoDH1SHA1,  }  // serverForbiddenKexAlgos contains key exchange algorithms, that are forbidden @@ -59,8 +60,9 @@ var serverForbiddenKexAlgos = map[string]struct{}{  	kexAlgoDHGEXSHA256: {}, // server half implementation is only minimal to satisfy the automated tests  } -// preferredKexAlgos specifies the default preference for key-exchange algorithms -// in preference order. +// preferredKexAlgos specifies the default preference for key-exchange +// algorithms in preference order. The diffie-hellman-group16-sha512 algorithm +// is disabled by default because it is a bit slower than the others.  var preferredKexAlgos = []string{  	kexAlgoCurve25519SHA256, kexAlgoCurve25519SHA256LibSSH,  	kexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521, @@ -70,12 +72,12 @@ var preferredKexAlgos = []string{  // supportedHostKeyAlgos specifies the supported host-key algorithms (i.e. methods  // of authenticating servers) in preference order.  var supportedHostKeyAlgos = []string{ -	CertAlgoRSASHA512v01, CertAlgoRSASHA256v01, +	CertAlgoRSASHA256v01, CertAlgoRSASHA512v01,  	CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01,  	CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoED25519v01,  	KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521, -	KeyAlgoRSASHA512, KeyAlgoRSASHA256, +	KeyAlgoRSASHA256, KeyAlgoRSASHA512,  	KeyAlgoRSA, KeyAlgoDSA,  	KeyAlgoED25519, @@ -85,7 +87,7 @@ var supportedHostKeyAlgos = []string{  // This is based on RFC 4253, section 6.4, but with hmac-md5 variants removed  // because they have reached the end of their useful life.  var supportedMACs = []string{ -	"hmac-sha2-512-etm@openssh.com", "hmac-sha2-256-etm@openssh.com", "hmac-sha2-256", "hmac-sha2-512", "hmac-sha1", "hmac-sha1-96", +	"hmac-sha2-256-etm@openssh.com", "hmac-sha2-512-etm@openssh.com", "hmac-sha2-256", "hmac-sha2-512", "hmac-sha1", "hmac-sha1-96",  }  var supportedCompressions = []string{compressionNone} @@ -119,6 +121,13 @@ func algorithmsForKeyFormat(keyFormat string) []string {  	}  } +// isRSA returns whether algo is a supported RSA algorithm, including certificate +// algorithms. +func isRSA(algo string) bool { +	algos := algorithmsForKeyFormat(KeyAlgoRSA) +	return contains(algos, underlyingAlgo(algo)) +} +  // supportedPubKeyAuthAlgos specifies the supported client public key  // authentication algorithms. Note that this doesn't include certificate types  // since those use the underlying algorithm. This list is sent to the client if @@ -262,16 +271,16 @@ type Config struct {  	// unspecified, a size suitable for the chosen cipher is used.  	RekeyThreshold uint64 -	// The allowed key exchanges algorithms. If unspecified then a -	// default set of algorithms is used. +	// The allowed key exchanges algorithms. If unspecified then a default set +	// of algorithms is used. Unsupported values are silently ignored.  	KeyExchanges []string -	// The allowed cipher algorithms. If unspecified then a sensible -	// default is used. +	// The allowed cipher algorithms. If unspecified then a sensible default is +	// used. Unsupported values are silently ignored.  	Ciphers []string -	// The allowed MAC algorithms. If unspecified then a sensible default -	// is used. +	// The allowed MAC algorithms. If unspecified then a sensible default is +	// used. Unsupported values are silently ignored.  	MACs []string  } @@ -288,7 +297,7 @@ func (c *Config) SetDefaults() {  	var ciphers []string  	for _, c := range c.Ciphers {  		if cipherModes[c] != nil { -			// reject the cipher if we have no cipherModes definition +			// Ignore the cipher if we have no cipherModes definition.  			ciphers = append(ciphers, c)  		}  	} @@ -297,10 +306,26 @@ func (c *Config) SetDefaults() {  	if c.KeyExchanges == nil {  		c.KeyExchanges = preferredKexAlgos  	} +	var kexs []string +	for _, k := range c.KeyExchanges { +		if kexAlgoMap[k] != nil { +			// Ignore the KEX if we have no kexAlgoMap definition. +			kexs = append(kexs, k) +		} +	} +	c.KeyExchanges = kexs  	if c.MACs == nil {  		c.MACs = supportedMACs  	} +	var macs []string +	for _, m := range c.MACs { +		if macModes[m] != nil { +			// Ignore the MAC if we have no macModes definition. +			macs = append(macs, m) +		} +	} +	c.MACs = macs  	if c.RekeyThreshold == 0 {  		// cipher specific default diff --git a/vendor/golang.org/x/crypto/ssh/kex.go b/vendor/golang.org/x/crypto/ssh/kex.go index 927a90cd4..8a05f7990 100644 --- a/vendor/golang.org/x/crypto/ssh/kex.go +++ b/vendor/golang.org/x/crypto/ssh/kex.go @@ -23,6 +23,7 @@ const (  	kexAlgoDH1SHA1                = "diffie-hellman-group1-sha1"  	kexAlgoDH14SHA1               = "diffie-hellman-group14-sha1"  	kexAlgoDH14SHA256             = "diffie-hellman-group14-sha256" +	kexAlgoDH16SHA512             = "diffie-hellman-group16-sha512"  	kexAlgoECDH256                = "ecdh-sha2-nistp256"  	kexAlgoECDH384                = "ecdh-sha2-nistp384"  	kexAlgoECDH521                = "ecdh-sha2-nistp521" @@ -430,6 +431,17 @@ func init() {  		hashFunc: crypto.SHA256,  	} +	// This is the group called diffie-hellman-group16-sha512 in RFC +	// 8268 and Oakley Group 16 in RFC 3526. +	p, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFFFFF", 16) + +	kexAlgoMap[kexAlgoDH16SHA512] = &dhGroup{ +		g:        new(big.Int).SetInt64(2), +		p:        p, +		pMinus1:  new(big.Int).Sub(p, bigOne), +		hashFunc: crypto.SHA512, +	} +  	kexAlgoMap[kexAlgoECDH521] = &ecdh{elliptic.P521()}  	kexAlgoMap[kexAlgoECDH384] = &ecdh{elliptic.P384()}  	kexAlgoMap[kexAlgoECDH256] = &ecdh{elliptic.P256()} diff --git a/vendor/golang.org/x/crypto/ssh/server.go b/vendor/golang.org/x/crypto/ssh/server.go index 9e3870292..b21322aff 100644 --- a/vendor/golang.org/x/crypto/ssh/server.go +++ b/vendor/golang.org/x/crypto/ssh/server.go @@ -370,6 +370,25 @@ func gssExchangeToken(gssapiConfig *GSSAPIWithMICConfig, firstToken []byte, s *c  	return authErr, perms, nil  } +// isAlgoCompatible checks if the signature format is compatible with the +// selected algorithm taking into account edge cases that occur with old +// clients. +func isAlgoCompatible(algo, sigFormat string) bool { +	// Compatibility for old clients. +	// +	// For certificate authentication with OpenSSH 7.2-7.7 signature format can +	// be rsa-sha2-256 or rsa-sha2-512 for the algorithm +	// ssh-rsa-cert-v01@openssh.com. +	// +	// With gpg-agent < 2.2.6 the algorithm can be rsa-sha2-256 or rsa-sha2-512 +	// for signature format ssh-rsa. +	if isRSA(algo) && isRSA(sigFormat) { +		return true +	} +	// Standard case: the underlying algorithm must match the signature format. +	return underlyingAlgo(algo) == sigFormat +} +  // ServerAuthError represents server authentication errors and is  // sometimes returned by NewServerConn. It appends any authentication  // errors that may occur, and is returned if all of the authentication @@ -567,7 +586,7 @@ userAuthLoop:  					authErr = fmt.Errorf("ssh: algorithm %q not accepted", sig.Format)  					break  				} -				if underlyingAlgo(algo) != sig.Format { +				if !isAlgoCompatible(algo, sig.Format) {  					authErr = fmt.Errorf("ssh: signature %q not compatible with selected algorithm %q", sig.Format, algo)  					break  				}  | 
