main.go 935 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. // aerotun-keygen creates an identity on its owner host without printing secrets.
  2. package main
  3. import (
  4. "encoding/json"
  5. "flag"
  6. "fmt"
  7. "log"
  8. "os"
  9. "debtik/internal/aerotun"
  10. )
  11. func main() {
  12. out := flag.String("out", "", "new identity JSON path (created once with mode 0600)")
  13. flag.Parse()
  14. if *out == "" {
  15. flag.Usage()
  16. os.Exit(2)
  17. }
  18. private, public, err := aerotun.GenerateIdentity()
  19. if err != nil {
  20. log.Fatal(err)
  21. }
  22. data, err := json.MarshalIndent(map[string]string{"private_key": private, "public_key": public}, "", " ")
  23. if err != nil {
  24. log.Fatal(err)
  25. }
  26. f, err := os.OpenFile(*out, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0600)
  27. if err != nil {
  28. log.Fatal(err)
  29. }
  30. if _, err = f.Write(data); err != nil {
  31. f.Close()
  32. os.Remove(*out)
  33. log.Fatal(err)
  34. }
  35. if err = f.Sync(); err != nil {
  36. f.Close()
  37. os.Remove(*out)
  38. log.Fatal(err)
  39. }
  40. if err = f.Close(); err != nil {
  41. log.Fatal(err)
  42. }
  43. fmt.Println(public)
  44. }