go-ethereum/crypto/keypair.go

59 lines
1.3 KiB
Go
Raw Normal View History

2014-10-31 13:37:43 +02:00
package crypto
import (
2014-10-08 13:06:39 +03:00
"strings"
2015-01-22 01:35:00 +02:00
"github.com/ethereum/go-ethereum/crypto/secp256k1"
2015-03-16 12:27:38 +02:00
"github.com/ethereum/go-ethereum/common"
)
type KeyPair struct {
PrivateKey []byte
PublicKey []byte
address []byte
mnemonic string
// The associated account
// account *StateObject
}
func GenerateNewKeyPair() *KeyPair {
_, prv := secp256k1.GenerateKeyPair()
keyPair, _ := NewKeyPairFromSec(prv) // swallow error, this one cannot err
return keyPair
}
func NewKeyPairFromSec(seckey []byte) (*KeyPair, error) {
pubkey, err := secp256k1.GeneratePubKey(seckey)
if err != nil {
return nil, err
}
return &KeyPair{PrivateKey: seckey, PublicKey: pubkey}, nil
}
func (k *KeyPair) Address() []byte {
if k.address == nil {
2014-10-08 13:06:39 +03:00
k.address = Sha3(k.PublicKey[1:])[12:]
}
return k.address
}
func (k *KeyPair) Mnemonic() string {
if k.mnemonic == "" {
2015-03-16 12:27:38 +02:00
k.mnemonic = strings.Join(MnemonicEncode(common.Bytes2Hex(k.PrivateKey)), " ")
}
return k.mnemonic
}
func (k *KeyPair) AsStrings() (string, string, string, string) {
2015-03-16 12:27:38 +02:00
return k.Mnemonic(), common.Bytes2Hex(k.Address()), common.Bytes2Hex(k.PrivateKey), common.Bytes2Hex(k.PublicKey)
}
func (k *KeyPair) RlpEncode() []byte {
return k.RlpValue().Encode()
}
2015-03-16 12:27:38 +02:00
func (k *KeyPair) RlpValue() *common.Value {
return common.NewValue(k.PrivateKey)
}