good morning!!!!

Skip to content
Snippets Groups Projects
Commit 0f5c6c5e authored by Jeffrey Wilcke's avatar Jeffrey Wilcke
Browse files

Changed new methods to use ecdsa package for pub prv keys

parent 186948da
Branches
Tags
No related merge requests found
......@@ -18,19 +18,6 @@ func init() {
ecies.AddParamsForCurve(S256(), ecies.ECIES_AES128_SHA256)
}
func ToECDSA(prv []byte) *ecdsa.PrivateKey {
priv := new(ecdsa.PrivateKey)
priv.PublicKey.Curve = S256()
priv.D = ethutil.BigD(prv)
priv.PublicKey.X, priv.PublicKey.Y = S256().ScalarBaseMult(prv)
return priv
}
func FromECDSA(prv *ecdsa.PrivateKey) []byte {
return prv.D.Bytes()
}
// TODO refactor, remove (bin)
func Sha3(data []byte) []byte {
d := sha3.NewKeccak256()
d.Write(data)
......@@ -67,23 +54,45 @@ func Ecrecover(data []byte) []byte {
return r
}
func SigToPub(hash, sig []byte) []byte {
return Ecrecover(append(hash, sig...))
// New methods using proper ecdsa keys from the stdlib
func ToECDSA(prv []byte) *ecdsa.PrivateKey {
priv := new(ecdsa.PrivateKey)
priv.PublicKey.Curve = S256()
priv.D = ethutil.BigD(prv)
priv.PublicKey.X, priv.PublicKey.Y = S256().ScalarBaseMult(prv)
return priv
}
func Sign(hash, prv []byte) (sig []byte, err error) {
sig, err = secp256k1.Sign(hash, prv)
return
func FromECDSA(prv *ecdsa.PrivateKey) []byte {
return prv.D.Bytes()
}
func Encrypt(pub, message []byte) ([]byte, error) {
func PubToECDSA(pub []byte) *ecdsa.PublicKey {
x, y := elliptic.Unmarshal(S256(), pub)
epub := &ecdsa.PublicKey{S256(), x, y}
return &ecdsa.PublicKey{S256(), x, y}
}
func GenerateKey() (*ecdsa.PrivateKey, error) {
return ecdsa.GenerateKey(S256(), rand.Reader)
}
func SigToPub(hash, sig []byte) *ecdsa.PublicKey {
s := Ecrecover(append(hash, sig...))
x, y := elliptic.Unmarshal(S256(), s)
return &ecdsa.PublicKey{S256(), x, y}
}
func Sign(hash []byte, prv *ecdsa.PrivateKey) (sig []byte, err error) {
sig, err = secp256k1.Sign(hash, prv.D.Bytes())
return
}
return ecies.Encrypt(rand.Reader, ecies.ImportECDSAPublic(epub), message, nil, nil)
func Encrypt(pub *ecdsa.PublicKey, message []byte) ([]byte, error) {
return ecies.Encrypt(rand.Reader, ecies.ImportECDSAPublic(pub), message, nil, nil)
}
func Decrypt(prv, ct []byte) ([]byte, error) {
key := ecies.ImportECDSA(ToECDSA(prv))
func Decrypt(prv *ecdsa.PrivateKey, ct []byte) ([]byte, error) {
key := ecies.ImportECDSA(prv)
return key.Decrypt(rand.Reader, ct, nil, nil)
}
......@@ -9,9 +9,9 @@ import (
)
func TestBox(t *testing.T) {
prv1 := ethutil.Hex2Bytes("4b50fa71f5c3eeb8fdc452224b2395af2fcc3d125e06c32c82e048c0559db03f")
prv2 := ethutil.Hex2Bytes("d0b043b4c5d657670778242d82d68a29d25d7d711127d17b8e299f156dad361a")
pub2 := ethutil.Hex2Bytes("04bd27a63c91fe3233c5777e6d3d7b39204d398c8f92655947eb5a373d46e1688f022a1632d264725cbc7dc43ee1cfebde42fa0a86d08b55d2acfbb5e9b3b48dc5")
prv1 := ToECDSA(ethutil.Hex2Bytes("4b50fa71f5c3eeb8fdc452224b2395af2fcc3d125e06c32c82e048c0559db03f"))
prv2 := ToECDSA(ethutil.Hex2Bytes("d0b043b4c5d657670778242d82d68a29d25d7d711127d17b8e299f156dad361a"))
pub2 := PubToECDSA(ethutil.Hex2Bytes("04bd27a63c91fe3233c5777e6d3d7b39204d398c8f92655947eb5a373d46e1688f022a1632d264725cbc7dc43ee1cfebde42fa0a86d08b55d2acfbb5e9b3b48dc5"))
message := []byte("Hello, world.")
ct, err := Encrypt(pub2, message)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment