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 { return err } fmt.Println(string(body)) 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) }