فهرست منبع

Support for import/export hex encoded keys, closes #635

Bas van Kervel 10 سال پیش
والد
کامیت
b3a3fdf9a4
3فایلهای تغییر یافته به همراه16 افزوده شده و 5 حذف شده
  1. 1 2
      cmd/geth/main.go
  2. 12 0
      common/bytes.go
  3. 3 3
      crypto/crypto.go

+ 1 - 2
cmd/geth/main.go

@@ -149,8 +149,7 @@ password to file or expose in any other way.
 Imports an unencrypted private key from <keyfile> and creates a new account.
 Prints the address.
 
-The keyfile is assumed to contain an unencrypted private key in canonical EC
-raw bytes format.
+The keyfile is assumed to contain an unencrypted private key in hexadecimal format.
 
 The account is saved in encrypted format, you are prompted for a passphrase.
 

+ 12 - 0
common/bytes.go

@@ -147,6 +147,18 @@ func Hex2Bytes(str string) []byte {
 	return h
 }
 
+func HexBytes2Bytes(d []byte) []byte {
+	r := make([]byte, hex.DecodedLen(len(d)))
+	hex.Decode(r, d)
+	return r
+}
+
+func Bytes2HexBytes(d []byte) []byte {
+	r := make([]byte, hex.EncodedLen(len(d)))
+	hex.Encode(r, d)
+	return r
+}
+
 func StringToByteFunc(str string, cb func(str string) []byte) (ret []byte) {
 	if len(str) > 1 && str[0:2] == "0x" && !strings.Contains(str, "\n") {
 		ret = Hex2Bytes(str[2:])

+ 3 - 3
crypto/crypto.go

@@ -121,7 +121,7 @@ func HexToECDSA(hexkey string) (*ecdsa.PrivateKey, error) {
 
 // LoadECDSA loads a secp256k1 private key from the given file.
 func LoadECDSA(file string) (*ecdsa.PrivateKey, error) {
-	buf := make([]byte, 32)
+	buf := make([]byte, 64)
 	fd, err := os.Open(file)
 	if err != nil {
 		return nil, err
@@ -130,13 +130,13 @@ func LoadECDSA(file string) (*ecdsa.PrivateKey, error) {
 	if _, err := io.ReadFull(fd, buf); err != nil {
 		return nil, err
 	}
-	return ToECDSA(buf), nil
+	return ToECDSA(common.HexBytes2Bytes(buf)), nil
 }
 
 // SaveECDSA saves a secp256k1 private key to the given file with restrictive
 // permissions
 func SaveECDSA(file string, key *ecdsa.PrivateKey) error {
-	return ioutil.WriteFile(file, FromECDSA(key), 0600)
+	return ioutil.WriteFile(file, common.Bytes2HexBytes(FromECDSA(key)), 0600)
 }
 
 func GenerateKey() (*ecdsa.PrivateKey, error) {