added Mnemonic() and AsStrings() methods, added memoization for address

This commit is contained in:
zelig 2014-06-29 20:28:04 +01:00
parent a8be0d9f48
commit 25314313f8
1 changed files with 18 additions and 2 deletions

View File

@ -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 {