|
|
@ -3,12 +3,14 @@ package ethcrypto |
|
|
|
import ( |
|
|
|
import ( |
|
|
|
"github.com/ethereum/eth-go/ethutil" |
|
|
|
"github.com/ethereum/eth-go/ethutil" |
|
|
|
"github.com/obscuren/secp256k1-go" |
|
|
|
"github.com/obscuren/secp256k1-go" |
|
|
|
|
|
|
|
"strings" |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
type KeyPair struct { |
|
|
|
type KeyPair struct { |
|
|
|
PrivateKey []byte |
|
|
|
PrivateKey []byte |
|
|
|
PublicKey []byte |
|
|
|
PublicKey []byte |
|
|
|
|
|
|
|
address []byte |
|
|
|
|
|
|
|
mnemonic string |
|
|
|
// The associated account
|
|
|
|
// The associated account
|
|
|
|
// account *StateObject
|
|
|
|
// account *StateObject
|
|
|
|
} |
|
|
|
} |
|
|
@ -29,7 +31,21 @@ func NewKeyPairFromSec(seckey []byte) (*KeyPair, error) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (k *KeyPair) Address() []byte { |
|
|
|
func (k *KeyPair) Address() []byte { |
|
|
|
return Sha3Bin(k.PublicKey[1:])[12:] |
|
|
|
if k.address == nil { |
|
|
|
|
|
|
|
k.address = Sha3Bin(k.PublicKey[1:])[12:] |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return k.address |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (k *KeyPair) Mnemonic() string { |
|
|
|
|
|
|
|
if k.mnemonic == "" { |
|
|
|
|
|
|
|
k.mnemonic = strings.Join(MnemonicEncode(ethutil.Bytes2Hex(k.PrivateKey)), " ") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return k.mnemonic |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (k *KeyPair) AsStrings() (string, string, string, string) { |
|
|
|
|
|
|
|
return k.Mnemonic(), ethutil.Bytes2Hex(k.Address()), ethutil.Bytes2Hex(k.PrivateKey), ethutil.Bytes2Hex(k.PublicKey) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (k *KeyPair) RlpEncode() []byte { |
|
|
|
func (k *KeyPair) RlpEncode() []byte { |
|
|
|