accounts/scwallet: use go-ethereum crypto instead of go-ecdh (#22212)
* accounts/scwallet: use go-ethereum crypto instead of go-ecdh github.com/wsddn/go-ecdh is a wrapper package for ECDH functionality with any elliptic curve. Since 'generic' ECDH is not required in accounts/scwallet (the curve is always secp256k1), we can just use the standard library functionality and our own crypto libraries to perform ECDH and save a dependency. * Update accounts/scwallet/securechannel.go Co-authored-by: Guillaume Ballet <gballet@gmail.com> * Use the correct key Co-authored-by: Guillaume Ballet <gballet@gmail.com>
This commit is contained in:
		
							parent
							
								
									681618275c
								
							
						
					
					
						commit
						ad038b6289
					
				| @ -20,6 +20,7 @@ import ( | ||||
| 	"bytes" | ||||
| 	"crypto/aes" | ||||
| 	"crypto/cipher" | ||||
| 	"crypto/elliptic" | ||||
| 	"crypto/rand" | ||||
| 	"crypto/sha256" | ||||
| 	"crypto/sha512" | ||||
| @ -27,7 +28,6 @@ import ( | ||||
| 
 | ||||
| 	"github.com/ethereum/go-ethereum/crypto" | ||||
| 	pcsc "github.com/gballet/go-libpcsclite" | ||||
| 	"github.com/wsddn/go-ecdh" | ||||
| 	"golang.org/x/crypto/pbkdf2" | ||||
| 	"golang.org/x/text/unicode/norm" | ||||
| ) | ||||
| @ -63,26 +63,19 @@ type SecureChannelSession struct { | ||||
| // NewSecureChannelSession creates a new secure channel for the given card and public key.
 | ||||
| func NewSecureChannelSession(card *pcsc.Card, keyData []byte) (*SecureChannelSession, error) { | ||||
| 	// Generate an ECDSA keypair for ourselves
 | ||||
| 	gen := ecdh.NewEllipticECDH(crypto.S256()) | ||||
| 	private, public, err := gen.GenerateKey(rand.Reader) | ||||
| 	key, err := crypto.GenerateKey() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	cardPublic, ok := gen.Unmarshal(keyData) | ||||
| 	if !ok { | ||||
| 		return nil, fmt.Errorf("could not unmarshal public key from card") | ||||
| 	} | ||||
| 
 | ||||
| 	secret, err := gen.GenerateSharedSecret(private, cardPublic) | ||||
| 	cardPublic, err := crypto.UnmarshalPubkey(keyData) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 		return nil, fmt.Errorf("could not unmarshal public key from card: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	secret, _ := key.Curve.ScalarMult(cardPublic.X, cardPublic.Y, key.D.Bytes()) | ||||
| 	return &SecureChannelSession{ | ||||
| 		card:      card, | ||||
| 		secret:    secret, | ||||
| 		publicKey: gen.Marshal(public), | ||||
| 		secret:    secret.Bytes(), | ||||
| 		publicKey: elliptic.Marshal(crypto.S256(), key.PublicKey.X, key.PublicKey.Y), | ||||
| 	}, nil | ||||
| } | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										1
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								go.mod
									
									
									
									
									
								
							| @ -54,7 +54,6 @@ require ( | ||||
| 	github.com/stretchr/testify v1.7.0 | ||||
| 	github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca | ||||
| 	github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef | ||||
| 	github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208 | ||||
| 	golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 | ||||
| 	golang.org/x/net v0.0.0-20200822124328-c89045814202 // indirect | ||||
| 	golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8 | ||||
|  | ||||
							
								
								
									
										2
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.sum
									
									
									
									
									
								
							| @ -365,8 +365,6 @@ github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef h1:wHSqTBrZ | ||||
| github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= | ||||
| github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= | ||||
| github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= | ||||
| github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208 h1:1cngl9mPEoITZG8s8cVcUy5CeIBYhEESkOB7m6Gmkrk= | ||||
| github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= | ||||
| github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= | ||||
| go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= | ||||
| go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user