diff options
author | zelig <viktor.tron@gmail.com> | 2014-06-29 23:02:23 +0800 |
---|---|---|
committer | zelig <viktor.tron@gmail.com> | 2014-06-29 23:02:23 +0800 |
commit | 772e7e8c8df066a64726b23bde84b6025c5af318 (patch) | |
tree | 8ee0e9b19d6ce2747481a8890473db99c66b87cb /ethcrypto/keypair.go | |
parent | e1ea41ee9cbe387221874fa6732b11d262a4ff12 (diff) | |
download | go-tangerine-772e7e8c8df066a64726b23bde84b6025c5af318.tar.gz go-tangerine-772e7e8c8df066a64726b23bde84b6025c5af318.tar.zst go-tangerine-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.go | 41 |
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) +} |