crypto: add key loading functions
This commit is contained in:
parent
f1ebad2508
commit
0c7df37351
@ -8,6 +8,8 @@ import (
|
|||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
@ -99,6 +101,32 @@ func FromECDSAPub(pub *ecdsa.PublicKey) []byte {
|
|||||||
return elliptic.Marshal(S256(), pub.X, pub.Y)
|
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) {
|
func GenerateKey() (*ecdsa.PrivateKey, error) {
|
||||||
return ecdsa.GenerateKey(S256(), rand.Reader)
|
return ecdsa.GenerateKey(S256(), rand.Reader)
|
||||||
}
|
}
|
||||||
|
@ -25,11 +25,12 @@ package crypto
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"code.google.com/p/go-uuid/uuid"
|
|
||||||
"crypto/ecdsa"
|
"crypto/ecdsa"
|
||||||
"crypto/elliptic"
|
"crypto/elliptic"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
|
"code.google.com/p/go-uuid/uuid"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Key struct {
|
type Key struct {
|
||||||
|
Loading…
Reference in New Issue
Block a user