aboutsummaryrefslogtreecommitdiffstats
path: root/ethcrypto/keypair.go
diff options
context:
space:
mode:
authorJeffrey Wilcke <obscuren@users.noreply.github.com>2014-10-23 22:46:18 +0800
committerJeffrey Wilcke <obscuren@users.noreply.github.com>2014-10-23 22:46:18 +0800
commit119c5b40a7ed1aea1c871c0cb56956b8ef9303d9 (patch)
treeb021423da04c9ff319a77549b473b6bad4930dd4 /ethcrypto/keypair.go
parent50fd46924900869e7210217c6a07979b544991c8 (diff)
parent184055b3e2995894ccaba364484223e488730627 (diff)
downloadgo-tangerine-119c5b40a7ed1aea1c871c0cb56956b8ef9303d9.tar
go-tangerine-119c5b40a7ed1aea1c871c0cb56956b8ef9303d9.tar.gz
go-tangerine-119c5b40a7ed1aea1c871c0cb56956b8ef9303d9.tar.bz2
go-tangerine-119c5b40a7ed1aea1c871c0cb56956b8ef9303d9.tar.lz
go-tangerine-119c5b40a7ed1aea1c871c0cb56956b8ef9303d9.tar.xz
go-tangerine-119c5b40a7ed1aea1c871c0cb56956b8ef9303d9.tar.zst
go-tangerine-119c5b40a7ed1aea1c871c0cb56956b8ef9303d9.zip
Merge pull request #150 from fjl/develop
Merge eth-go repo into go-ethereum
Diffstat (limited to 'ethcrypto/keypair.go')
-rw-r--r--ethcrypto/keypair.go58
1 files changed, 58 insertions, 0 deletions
diff --git a/ethcrypto/keypair.go b/ethcrypto/keypair.go
new file mode 100644
index 000000000..613f65d8c
--- /dev/null
+++ b/ethcrypto/keypair.go
@@ -0,0 +1,58 @@
+package ethcrypto
+
+import (
+ "strings"
+
+ "github.com/ethereum/go-ethereum/ethutil"
+ "github.com/obscuren/secp256k1-go"
+)
+
+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 {
+ k.address = Sha3(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 {
+ return k.RlpValue().Encode()
+}
+
+func (k *KeyPair) RlpValue() *ethutil.Value {
+ return ethutil.NewValue(k.PrivateKey)
+}