diff options
author | Felix Lange <fjl@twurst.com> | 2015-02-10 19:29:50 +0800 |
---|---|---|
committer | Felix Lange <fjl@twurst.com> | 2015-02-10 19:29:50 +0800 |
commit | 0c7df37351ab85c577fe815d6d22f4627832b0c3 (patch) | |
tree | 67957f3b8321a4a16f748e34a02f40db6d32291d /crypto/crypto.go | |
parent | f1ebad2508b6941df5802d607b30b7a5e7b2c67d (diff) | |
download | dexon-0c7df37351ab85c577fe815d6d22f4627832b0c3.tar dexon-0c7df37351ab85c577fe815d6d22f4627832b0c3.tar.gz dexon-0c7df37351ab85c577fe815d6d22f4627832b0c3.tar.bz2 dexon-0c7df37351ab85c577fe815d6d22f4627832b0c3.tar.lz dexon-0c7df37351ab85c577fe815d6d22f4627832b0c3.tar.xz dexon-0c7df37351ab85c577fe815d6d22f4627832b0c3.tar.zst dexon-0c7df37351ab85c577fe815d6d22f4627832b0c3.zip |
crypto: add key loading functions
Diffstat (limited to 'crypto/crypto.go')
-rw-r--r-- | crypto/crypto.go | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/crypto/crypto.go b/crypto/crypto.go index 42e6036b5..2c8f82977 100644 --- a/crypto/crypto.go +++ b/crypto/crypto.go @@ -8,6 +8,8 @@ import ( "crypto/rand" "crypto/sha256" "fmt" + "io" + "os" "encoding/hex" "encoding/json" @@ -99,6 +101,32 @@ func FromECDSAPub(pub *ecdsa.PublicKey) []byte { return elliptic.Marshal(S256(), pub.X, pub.Y) } +// HexToECDSA parses a secp256k1 private key. +func HexToECDSA(hexkey string) (*ecdsa.PrivateKey, error) { + b, err := hex.DecodeString(hexkey) + if err != nil { + return nil, errors.New("invalid hex string") + } + if len(b) != 32 { + return nil, errors.New("invalid length, need 256 bits") + } + return ToECDSA(b), nil +} + +// LoadECDSA loads a secp256k1 private key from the given file. +func LoadECDSA(file string) (*ecdsa.PrivateKey, error) { + buf := make([]byte, 32) + fd, err := os.Open(file) + if err != nil { + return nil, err + } + defer fd.Close() + if _, err := io.ReadFull(fd, buf); err != nil { + return nil, err + } + return ToECDSA(buf), nil +} + func GenerateKey() (*ecdsa.PrivateKey, error) { return ecdsa.GenerateKey(S256(), rand.Reader) } |