fix: resolve CVE-2022-27191 in golang.org/x/crypto
Signed-off-by: Yonatan Kahana <yonatankahana.il@gmail.com>
This commit is contained in:
		
							parent
							
								
									b8c5a755f1
								
							
						
					
					
						commit
						ce3e66514d
					
				
							
								
								
									
										1
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										1
									
								
								go.mod
								
								
								
								
							|  | @ -12,6 +12,7 @@ require ( | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| replace ( | replace ( | ||||||
|  | 	golang.org/x/crypto => golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd | ||||||
| 	k8s.io/api => k8s.io/api v0.23.4 | 	k8s.io/api => k8s.io/api v0.23.4 | ||||||
| 	k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.23.4 | 	k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.23.4 | ||||||
| 	k8s.io/apimachinery => k8s.io/apimachinery v0.23.4 | 	k8s.io/apimachinery => k8s.io/apimachinery v0.23.4 | ||||||
|  |  | ||||||
							
								
								
									
										13
									
								
								go.sum
								
								
								
								
							
							
						
						
									
										13
									
								
								go.sum
								
								
								
								
							|  | @ -293,15 +293,8 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= | ||||||
| go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= | go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= | ||||||
| go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= | go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= | ||||||
| go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= | go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= | ||||||
| golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= | golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd h1:XcWmESyNjXJMLahc3mqVQJcgSTDxFxhETVlfk9uGc38= | ||||||
| golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= | ||||||
| golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= |  | ||||||
| golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= |  | ||||||
| golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= |  | ||||||
| golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= |  | ||||||
| golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= |  | ||||||
| golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ= |  | ||||||
| golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= |  | ||||||
| golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||||
| golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||||
| golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= | golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= | ||||||
|  | @ -343,7 +336,6 @@ golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73r | ||||||
| golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||||
| golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||||
| golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||||||
| golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= |  | ||||||
| golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||||||
| golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||||||
| golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= | golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= | ||||||
|  | @ -376,6 +368,7 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v | ||||||
| golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | ||||||
| golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= | golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= | ||||||
| golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= | golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= | ||||||
|  | golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||||
| golang.org/x/net v0.0.0-20211209124913-491a49abca63 h1:iocB37TsdFuN6IBRZ+ry36wrkoV51/tl5vOWqkcPGvY= | golang.org/x/net v0.0.0-20211209124913-491a49abca63 h1:iocB37TsdFuN6IBRZ+ry36wrkoV51/tl5vOWqkcPGvY= | ||||||
| golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||||
| golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | ||||||
|  |  | ||||||
|  | @ -1,13 +1,7 @@ | ||||||
| // Copyright 2016 The Go Authors. All rights reserved.
 | // Copyright 2019 The Go Authors. All rights reserved.
 | ||||||
| // Use of this source code is governed by a BSD-style
 | // Use of this source code is governed by a BSD-style
 | ||||||
| // license that can be found in the LICENSE file.
 | // license that can be found in the LICENSE file.
 | ||||||
| 
 | 
 | ||||||
| // In Go 1.13, the ed25519 package was promoted to the standard library as
 |  | ||||||
| // crypto/ed25519, and this package became a wrapper for the standard library one.
 |  | ||||||
| //
 |  | ||||||
| //go:build !go1.13
 |  | ||||||
| // +build !go1.13
 |  | ||||||
| 
 |  | ||||||
| // Package ed25519 implements the Ed25519 signature algorithm. See
 | // Package ed25519 implements the Ed25519 signature algorithm. See
 | ||||||
| // https://ed25519.cr.yp.to/.
 | // https://ed25519.cr.yp.to/.
 | ||||||
| //
 | //
 | ||||||
|  | @ -16,21 +10,15 @@ | ||||||
| // representation includes a public key suffix to make multiple signing
 | // representation includes a public key suffix to make multiple signing
 | ||||||
| // operations with the same key more efficient. This package refers to the RFC
 | // operations with the same key more efficient. This package refers to the RFC
 | ||||||
| // 8032 private key as the “seed”.
 | // 8032 private key as the “seed”.
 | ||||||
|  | //
 | ||||||
|  | // Beginning with Go 1.13, the functionality of this package was moved to the
 | ||||||
|  | // standard library as crypto/ed25519. This package only acts as a compatibility
 | ||||||
|  | // wrapper.
 | ||||||
| package ed25519 | package ed25519 | ||||||
| 
 | 
 | ||||||
| // This code is a port of the public domain, “ref10” implementation of ed25519
 |  | ||||||
| // from SUPERCOP.
 |  | ||||||
| 
 |  | ||||||
| import ( | import ( | ||||||
| 	"bytes" | 	"crypto/ed25519" | ||||||
| 	"crypto" |  | ||||||
| 	cryptorand "crypto/rand" |  | ||||||
| 	"crypto/sha512" |  | ||||||
| 	"errors" |  | ||||||
| 	"io" | 	"io" | ||||||
| 	"strconv" |  | ||||||
| 
 |  | ||||||
| 	"golang.org/x/crypto/ed25519/internal/edwards25519" |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| const ( | const ( | ||||||
|  | @ -45,57 +33,21 @@ const ( | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // PublicKey is the type of Ed25519 public keys.
 | // PublicKey is the type of Ed25519 public keys.
 | ||||||
| type PublicKey []byte | //
 | ||||||
|  | // This type is an alias for crypto/ed25519's PublicKey type.
 | ||||||
|  | // See the crypto/ed25519 package for the methods on this type.
 | ||||||
|  | type PublicKey = ed25519.PublicKey | ||||||
| 
 | 
 | ||||||
| // PrivateKey is the type of Ed25519 private keys. It implements crypto.Signer.
 | // PrivateKey is the type of Ed25519 private keys. It implements crypto.Signer.
 | ||||||
| type PrivateKey []byte | //
 | ||||||
| 
 | // This type is an alias for crypto/ed25519's PrivateKey type.
 | ||||||
| // Public returns the PublicKey corresponding to priv.
 | // See the crypto/ed25519 package for the methods on this type.
 | ||||||
| func (priv PrivateKey) Public() crypto.PublicKey { | type PrivateKey = ed25519.PrivateKey | ||||||
| 	publicKey := make([]byte, PublicKeySize) |  | ||||||
| 	copy(publicKey, priv[32:]) |  | ||||||
| 	return PublicKey(publicKey) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Seed returns the private key seed corresponding to priv. It is provided for
 |  | ||||||
| // interoperability with RFC 8032. RFC 8032's private keys correspond to seeds
 |  | ||||||
| // in this package.
 |  | ||||||
| func (priv PrivateKey) Seed() []byte { |  | ||||||
| 	seed := make([]byte, SeedSize) |  | ||||||
| 	copy(seed, priv[:32]) |  | ||||||
| 	return seed |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Sign signs the given message with priv.
 |  | ||||||
| // Ed25519 performs two passes over messages to be signed and therefore cannot
 |  | ||||||
| // handle pre-hashed messages. Thus opts.HashFunc() must return zero to
 |  | ||||||
| // indicate the message hasn't been hashed. This can be achieved by passing
 |  | ||||||
| // crypto.Hash(0) as the value for opts.
 |  | ||||||
| func (priv PrivateKey) Sign(rand io.Reader, message []byte, opts crypto.SignerOpts) (signature []byte, err error) { |  | ||||||
| 	if opts.HashFunc() != crypto.Hash(0) { |  | ||||||
| 		return nil, errors.New("ed25519: cannot sign hashed message") |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return Sign(priv, message), nil |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| // GenerateKey generates a public/private key pair using entropy from rand.
 | // GenerateKey generates a public/private key pair using entropy from rand.
 | ||||||
| // If rand is nil, crypto/rand.Reader will be used.
 | // If rand is nil, crypto/rand.Reader will be used.
 | ||||||
| func GenerateKey(rand io.Reader) (PublicKey, PrivateKey, error) { | func GenerateKey(rand io.Reader) (PublicKey, PrivateKey, error) { | ||||||
| 	if rand == nil { | 	return ed25519.GenerateKey(rand) | ||||||
| 		rand = cryptorand.Reader |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	seed := make([]byte, SeedSize) |  | ||||||
| 	if _, err := io.ReadFull(rand, seed); err != nil { |  | ||||||
| 		return nil, nil, err |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	privateKey := NewKeyFromSeed(seed) |  | ||||||
| 	publicKey := make([]byte, PublicKeySize) |  | ||||||
| 	copy(publicKey, privateKey[32:]) |  | ||||||
| 
 |  | ||||||
| 	return publicKey, privateKey, nil |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // NewKeyFromSeed calculates a private key from a seed. It will panic if
 | // NewKeyFromSeed calculates a private key from a seed. It will panic if
 | ||||||
|  | @ -103,121 +55,17 @@ func GenerateKey(rand io.Reader) (PublicKey, PrivateKey, error) { | ||||||
| // with RFC 8032. RFC 8032's private keys correspond to seeds in this
 | // with RFC 8032. RFC 8032's private keys correspond to seeds in this
 | ||||||
| // package.
 | // package.
 | ||||||
| func NewKeyFromSeed(seed []byte) PrivateKey { | func NewKeyFromSeed(seed []byte) PrivateKey { | ||||||
| 	if l := len(seed); l != SeedSize { | 	return ed25519.NewKeyFromSeed(seed) | ||||||
| 		panic("ed25519: bad seed length: " + strconv.Itoa(l)) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	digest := sha512.Sum512(seed) |  | ||||||
| 	digest[0] &= 248 |  | ||||||
| 	digest[31] &= 127 |  | ||||||
| 	digest[31] |= 64 |  | ||||||
| 
 |  | ||||||
| 	var A edwards25519.ExtendedGroupElement |  | ||||||
| 	var hBytes [32]byte |  | ||||||
| 	copy(hBytes[:], digest[:]) |  | ||||||
| 	edwards25519.GeScalarMultBase(&A, &hBytes) |  | ||||||
| 	var publicKeyBytes [32]byte |  | ||||||
| 	A.ToBytes(&publicKeyBytes) |  | ||||||
| 
 |  | ||||||
| 	privateKey := make([]byte, PrivateKeySize) |  | ||||||
| 	copy(privateKey, seed) |  | ||||||
| 	copy(privateKey[32:], publicKeyBytes[:]) |  | ||||||
| 
 |  | ||||||
| 	return privateKey |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Sign signs the message with privateKey and returns a signature. It will
 | // Sign signs the message with privateKey and returns a signature. It will
 | ||||||
| // panic if len(privateKey) is not PrivateKeySize.
 | // panic if len(privateKey) is not PrivateKeySize.
 | ||||||
| func Sign(privateKey PrivateKey, message []byte) []byte { | func Sign(privateKey PrivateKey, message []byte) []byte { | ||||||
| 	if l := len(privateKey); l != PrivateKeySize { | 	return ed25519.Sign(privateKey, message) | ||||||
| 		panic("ed25519: bad private key length: " + strconv.Itoa(l)) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	h := sha512.New() |  | ||||||
| 	h.Write(privateKey[:32]) |  | ||||||
| 
 |  | ||||||
| 	var digest1, messageDigest, hramDigest [64]byte |  | ||||||
| 	var expandedSecretKey [32]byte |  | ||||||
| 	h.Sum(digest1[:0]) |  | ||||||
| 	copy(expandedSecretKey[:], digest1[:]) |  | ||||||
| 	expandedSecretKey[0] &= 248 |  | ||||||
| 	expandedSecretKey[31] &= 63 |  | ||||||
| 	expandedSecretKey[31] |= 64 |  | ||||||
| 
 |  | ||||||
| 	h.Reset() |  | ||||||
| 	h.Write(digest1[32:]) |  | ||||||
| 	h.Write(message) |  | ||||||
| 	h.Sum(messageDigest[:0]) |  | ||||||
| 
 |  | ||||||
| 	var messageDigestReduced [32]byte |  | ||||||
| 	edwards25519.ScReduce(&messageDigestReduced, &messageDigest) |  | ||||||
| 	var R edwards25519.ExtendedGroupElement |  | ||||||
| 	edwards25519.GeScalarMultBase(&R, &messageDigestReduced) |  | ||||||
| 
 |  | ||||||
| 	var encodedR [32]byte |  | ||||||
| 	R.ToBytes(&encodedR) |  | ||||||
| 
 |  | ||||||
| 	h.Reset() |  | ||||||
| 	h.Write(encodedR[:]) |  | ||||||
| 	h.Write(privateKey[32:]) |  | ||||||
| 	h.Write(message) |  | ||||||
| 	h.Sum(hramDigest[:0]) |  | ||||||
| 	var hramDigestReduced [32]byte |  | ||||||
| 	edwards25519.ScReduce(&hramDigestReduced, &hramDigest) |  | ||||||
| 
 |  | ||||||
| 	var s [32]byte |  | ||||||
| 	edwards25519.ScMulAdd(&s, &hramDigestReduced, &expandedSecretKey, &messageDigestReduced) |  | ||||||
| 
 |  | ||||||
| 	signature := make([]byte, SignatureSize) |  | ||||||
| 	copy(signature[:], encodedR[:]) |  | ||||||
| 	copy(signature[32:], s[:]) |  | ||||||
| 
 |  | ||||||
| 	return signature |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Verify reports whether sig is a valid signature of message by publicKey. It
 | // Verify reports whether sig is a valid signature of message by publicKey. It
 | ||||||
| // will panic if len(publicKey) is not PublicKeySize.
 | // will panic if len(publicKey) is not PublicKeySize.
 | ||||||
| func Verify(publicKey PublicKey, message, sig []byte) bool { | func Verify(publicKey PublicKey, message, sig []byte) bool { | ||||||
| 	if l := len(publicKey); l != PublicKeySize { | 	return ed25519.Verify(publicKey, message, sig) | ||||||
| 		panic("ed25519: bad public key length: " + strconv.Itoa(l)) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if len(sig) != SignatureSize || sig[63]&224 != 0 { |  | ||||||
| 		return false |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	var A edwards25519.ExtendedGroupElement |  | ||||||
| 	var publicKeyBytes [32]byte |  | ||||||
| 	copy(publicKeyBytes[:], publicKey) |  | ||||||
| 	if !A.FromBytes(&publicKeyBytes) { |  | ||||||
| 		return false |  | ||||||
| 	} |  | ||||||
| 	edwards25519.FeNeg(&A.X, &A.X) |  | ||||||
| 	edwards25519.FeNeg(&A.T, &A.T) |  | ||||||
| 
 |  | ||||||
| 	h := sha512.New() |  | ||||||
| 	h.Write(sig[:32]) |  | ||||||
| 	h.Write(publicKey[:]) |  | ||||||
| 	h.Write(message) |  | ||||||
| 	var digest [64]byte |  | ||||||
| 	h.Sum(digest[:0]) |  | ||||||
| 
 |  | ||||||
| 	var hReduced [32]byte |  | ||||||
| 	edwards25519.ScReduce(&hReduced, &digest) |  | ||||||
| 
 |  | ||||||
| 	var R edwards25519.ProjectiveGroupElement |  | ||||||
| 	var s [32]byte |  | ||||||
| 	copy(s[:], sig[32:]) |  | ||||||
| 
 |  | ||||||
| 	// https://tools.ietf.org/html/rfc8032#section-5.1.7 requires that s be in
 |  | ||||||
| 	// the range [0, order) in order to prevent signature malleability.
 |  | ||||||
| 	if !edwards25519.ScMinimal(&s) { |  | ||||||
| 		return false |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	edwards25519.GeDoubleScalarMultVartime(&R, &hReduced, &A, &s) |  | ||||||
| 
 |  | ||||||
| 	var checkR [32]byte |  | ||||||
| 	R.ToBytes(&checkR) |  | ||||||
| 	return bytes.Equal(sig[:32], checkR[:]) |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,74 +0,0 @@ | ||||||
| // Copyright 2019 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.
 |  | ||||||
| 
 |  | ||||||
| //go:build go1.13
 |  | ||||||
| // +build go1.13
 |  | ||||||
| 
 |  | ||||||
| // Package ed25519 implements the Ed25519 signature algorithm. See
 |  | ||||||
| // https://ed25519.cr.yp.to/.
 |  | ||||||
| //
 |  | ||||||
| // These functions are also compatible with the “Ed25519” function defined in
 |  | ||||||
| // RFC 8032. However, unlike RFC 8032's formulation, this package's private key
 |  | ||||||
| // representation includes a public key suffix to make multiple signing
 |  | ||||||
| // operations with the same key more efficient. This package refers to the RFC
 |  | ||||||
| // 8032 private key as the “seed”.
 |  | ||||||
| //
 |  | ||||||
| // Beginning with Go 1.13, the functionality of this package was moved to the
 |  | ||||||
| // standard library as crypto/ed25519. This package only acts as a compatibility
 |  | ||||||
| // wrapper.
 |  | ||||||
| package ed25519 |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"crypto/ed25519" |  | ||||||
| 	"io" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| const ( |  | ||||||
| 	// PublicKeySize is the size, in bytes, of public keys as used in this package.
 |  | ||||||
| 	PublicKeySize = 32 |  | ||||||
| 	// PrivateKeySize is the size, in bytes, of private keys as used in this package.
 |  | ||||||
| 	PrivateKeySize = 64 |  | ||||||
| 	// SignatureSize is the size, in bytes, of signatures generated and verified by this package.
 |  | ||||||
| 	SignatureSize = 64 |  | ||||||
| 	// SeedSize is the size, in bytes, of private key seeds. These are the private key representations used by RFC 8032.
 |  | ||||||
| 	SeedSize = 32 |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| // PublicKey is the type of Ed25519 public keys.
 |  | ||||||
| //
 |  | ||||||
| // This type is an alias for crypto/ed25519's PublicKey type.
 |  | ||||||
| // See the crypto/ed25519 package for the methods on this type.
 |  | ||||||
| type PublicKey = ed25519.PublicKey |  | ||||||
| 
 |  | ||||||
| // PrivateKey is the type of Ed25519 private keys. It implements crypto.Signer.
 |  | ||||||
| //
 |  | ||||||
| // This type is an alias for crypto/ed25519's PrivateKey type.
 |  | ||||||
| // See the crypto/ed25519 package for the methods on this type.
 |  | ||||||
| type PrivateKey = ed25519.PrivateKey |  | ||||||
| 
 |  | ||||||
| // GenerateKey generates a public/private key pair using entropy from rand.
 |  | ||||||
| // If rand is nil, crypto/rand.Reader will be used.
 |  | ||||||
| func GenerateKey(rand io.Reader) (PublicKey, PrivateKey, error) { |  | ||||||
| 	return ed25519.GenerateKey(rand) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // NewKeyFromSeed calculates a private key from a seed. It will panic if
 |  | ||||||
| // len(seed) is not SeedSize. This function is provided for interoperability
 |  | ||||||
| // with RFC 8032. RFC 8032's private keys correspond to seeds in this
 |  | ||||||
| // package.
 |  | ||||||
| func NewKeyFromSeed(seed []byte) PrivateKey { |  | ||||||
| 	return ed25519.NewKeyFromSeed(seed) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Sign signs the message with privateKey and returns a signature. It will
 |  | ||||||
| // panic if len(privateKey) is not PrivateKeySize.
 |  | ||||||
| func Sign(privateKey PrivateKey, message []byte) []byte { |  | ||||||
| 	return ed25519.Sign(privateKey, message) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Verify reports whether sig is a valid signature of message by publicKey. It
 |  | ||||||
| // will panic if len(publicKey) is not PublicKeySize.
 |  | ||||||
| func Verify(publicKey PublicKey, message, sig []byte) bool { |  | ||||||
| 	return ed25519.Verify(publicKey, message, sig) |  | ||||||
| } |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -63,9 +63,8 @@ github.com/prometheus/procfs/internal/fs | ||||||
| github.com/prometheus/procfs/internal/util | github.com/prometheus/procfs/internal/util | ||||||
| # github.com/spf13/pflag v1.0.5 | # github.com/spf13/pflag v1.0.5 | ||||||
| github.com/spf13/pflag | github.com/spf13/pflag | ||||||
| # golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 | # golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 => golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd | ||||||
| golang.org/x/crypto/ed25519 | golang.org/x/crypto/ed25519 | ||||||
| golang.org/x/crypto/ed25519/internal/edwards25519 |  | ||||||
| # golang.org/x/net v0.0.0-20211209124913-491a49abca63 | # golang.org/x/net v0.0.0-20211209124913-491a49abca63 | ||||||
| golang.org/x/net/bpf | golang.org/x/net/bpf | ||||||
| golang.org/x/net/context | golang.org/x/net/context | ||||||
|  | @ -490,6 +489,7 @@ sigs.k8s.io/structured-merge-diff/v4/typed | ||||||
| sigs.k8s.io/structured-merge-diff/v4/value | sigs.k8s.io/structured-merge-diff/v4/value | ||||||
| # sigs.k8s.io/yaml v1.2.0 | # sigs.k8s.io/yaml v1.2.0 | ||||||
| sigs.k8s.io/yaml | sigs.k8s.io/yaml | ||||||
|  | # golang.org/x/crypto => golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd | ||||||
| # k8s.io/api => k8s.io/api v0.23.4 | # k8s.io/api => k8s.io/api v0.23.4 | ||||||
| # k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.23.4 | # k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.23.4 | ||||||
| # k8s.io/apimachinery => k8s.io/apimachinery v0.23.4 | # k8s.io/apimachinery => k8s.io/apimachinery v0.23.4 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue