aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-11-28 11:46:10 +0100
committerDimitri Sokolyuk <demon@dim13.org>2015-11-28 11:46:10 +0100
commit97828222b81a87b6fb5eeb6ecda33326e7402170 (patch)
tree1159f34a7362d774ba629af553169bc767c820a1
parentab1cab0db527ae0ae4a72b8895233eb99ec3fd34 (diff)
Add key save/load
-rw-r--r--cmd/acme/main.go4
-rw-r--r--helper.go40
2 files changed, 44 insertions, 0 deletions
diff --git a/cmd/acme/main.go b/cmd/acme/main.go
index 43186af..2e35532 100644
--- a/cmd/acme/main.go
+++ b/cmd/acme/main.go
@@ -20,6 +20,7 @@ const (
var (
server = flag.String("server", acme.LEStaging, "directory server")
+ port = flag.Int("port", 8443, "port to listen")
)
func main() {
@@ -33,6 +34,9 @@ func main() {
must(err)
acme.Print(acc)
//acme.Dump(acc)
+ err = acme.Save(".acme/account.json", acc)
+ must(err)
+ acme.SaveKey(".acme/priv.pem", acc.PrivKey)
acme.Post(dir.NewReg, acme.NewRegistration(acc.Contact, acme.NewReg{}))
diff --git a/helper.go b/helper.go
index 0ce20ae..6829fb3 100644
--- a/helper.go
+++ b/helper.go
@@ -1,10 +1,16 @@
package acme
import (
+ "crypto/rsa"
+ "crypto/x509"
"encoding/json"
+ "encoding/pem"
"fmt"
+ "io/ioutil"
+ "os"
)
+// Dump ...
func Dump(v interface{}) error {
body, err := json.MarshalIndent(v, "", "\t")
if err != nil {
@@ -14,6 +20,40 @@ func Dump(v interface{}) error {
return nil
}
+// Print ...
func Print(v interface{}) (int, error) {
return fmt.Printf("%+v\n", v)
}
+
+// Save ...
+func Save(fname string, v interface{}) error {
+ body, err := json.MarshalIndent(v, "", "\t")
+ if err != nil {
+ return err
+ }
+ return ioutil.WriteFile(fname, body, 0644)
+}
+
+// SaveKey stores RSA private key into file
+func SaveKey(fname string, key *rsa.PrivateKey) error {
+ file, err := os.Create(fname)
+ if err != nil {
+ return err
+ }
+ defer file.Close()
+ block := &pem.Block{
+ Type: "RSA PRIVATE KEY",
+ Bytes: x509.MarshalPKCS1PrivateKey(key),
+ }
+ return pem.Encode(file, block)
+}
+
+// LoadKey loads RSA private key from file
+func LoadKey(fname string) (*rsa.PrivateKey, error) {
+ file, err := ioutil.ReadFile(fname)
+ if err != nil {
+ return nil, err
+ }
+ block, _ := pem.Decode(file)
+ return x509.ParsePKCS1PrivateKey(block.Bytes)
+}