aboutsummaryrefslogtreecommitdiffstats
path: root/ethcrypto/keypair.go
diff options
context:
space:
mode:
authorzelig <viktor.tron@gmail.com>2014-06-29 23:02:23 +0800
committerzelig <viktor.tron@gmail.com>2014-06-29 23:02:23 +0800
commit772e7e8c8df066a64726b23bde84b6025c5af318 (patch)
tree8ee0e9b19d6ce2747481a8890473db99c66b87cb /ethcrypto/keypair.go
parente1ea41ee9cbe387221874fa6732b11d262a4ff12 (diff)
downloaddexon-772e7e8c8df066a64726b23bde84b6025c5af318.tar
dexon-772e7e8c8df066a64726b23bde84b6025c5af318.tar.gz
dexon-772e7e8c8df066a64726b23bde84b6025c5af318.tar.bz2
dexon-772e7e8c8df066a64726b23bde84b6025c5af318.tar.lz
dexon-772e7e8c8df066a64726b23bde84b6025c5af318.tar.xz
dexon-772e7e8c8df066a64726b23bde84b6025c5af318.tar.zst
dexon-772e7e8c8df066a64726b23bde84b6025c5af318.zip
Key Manager
- keypair, keyring: -- consistent naming of methods -- error propagation -- no panic - keyManager: persist, import, export, initialize and (re)set keyring - no global public "singleton" keyring, instead interface via keyManager - keys test - KeyStore interface, DB and File store implementations
Diffstat (limited to 'ethcrypto/keypair.go')
-rw-r--r--ethcrypto/keypair.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/ethcrypto/keypair.go b/ethcrypto/keypair.go
new file mode 100644
index 000000000..ae9db3698
--- /dev/null
+++ b/ethcrypto/keypair.go
@@ -0,0 +1,41 @@
+package ethcrypto
+
+import (
+ "github.com/ethereum/eth-go/ethutil"
+ "github.com/obscuren/secp256k1-go"
+)
+
+type KeyPair struct {
+ PrivateKey []byte
+ PublicKey []byte
+
+ // 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 {
+ return Sha3Bin(k.PublicKey[1:])[12:]
+}
+
+func (k *KeyPair) RlpEncode() []byte {
+ return k.RlpValue().Encode()
+}
+
+func (k *KeyPair) RlpValue() *ethutil.Value {
+ return ethutil.NewValue(k.PrivateKey)
+}