|
|
- package account
-
- import (
- "github.com/tendermint/tendermint/Godeps/_workspace/src/github.com/tendermint/ed25519"
- "github.com/tendermint/tendermint/binary"
- . "github.com/tendermint/tendermint/common"
- )
-
- type PrivAccount struct {
- Address []byte `json:"address"`
- PubKey PubKey `json:"pub_key"`
- PrivKey PrivKey `json:"priv_key"`
- }
-
- // Generates a new account with private key.
- func GenPrivAccount() *PrivAccount {
- privKeyBytes := new([64]byte)
- copy(privKeyBytes[:32], CRandBytes(32))
- pubKeyBytes := ed25519.MakePublicKey(privKeyBytes)
- pubKey := PubKeyEd25519(pubKeyBytes[:])
- privKey := PrivKeyEd25519(privKeyBytes[:])
- return &PrivAccount{
- Address: pubKey.Address(),
- PubKey: pubKey,
- PrivKey: privKey,
- }
- }
-
- // Generates a new account with private key from SHA256 hash of a secret
- func GenPrivAccountFromSecret(secret []byte) *PrivAccount {
- privKey32 := binary.BinarySha256(secret) // Not Ripemd160 because we want 32 bytes.
- privKeyBytes := new([64]byte)
- copy(privKeyBytes[:32], privKey32)
- pubKeyBytes := ed25519.MakePublicKey(privKeyBytes)
- pubKey := PubKeyEd25519(pubKeyBytes[:])
- privKey := PrivKeyEd25519(privKeyBytes[:])
- return &PrivAccount{
- Address: pubKey.Address(),
- PubKey: pubKey,
- PrivKey: privKey,
- }
- }
-
- func GenPrivAccountFromKey(privKeyBytes [64]byte) *PrivAccount {
- pubKeyBytes := ed25519.MakePublicKey(&privKeyBytes)
- pubKey := PubKeyEd25519(pubKeyBytes[:])
- privKey := PrivKeyEd25519(privKeyBytes[:])
- return &PrivAccount{
- Address: pubKey.Address(),
- PubKey: pubKey,
- PrivKey: privKey,
- }
- }
-
- func (privAccount *PrivAccount) Sign(chainID string, o Signable) Signature {
- return privAccount.PrivKey.Sign(SignBytes(chainID, o))
- }
-
- func (privAccount *PrivAccount) String() string {
- return Fmt("PrivAccount{%X}", privAccount.Address)
- }
|