aboutsummaryrefslogtreecommitdiff
path: root/public_key.go
blob: fc1ea23c2113cd2ac73ee3502fc49498507afeed (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package main

import (
  "crypto/x509"
  "encoding/pem"
  "flag"
  "fmt"
  "io"
  "os"
)

type (
  PublicKeyFlags struct {
    PrivateKeyPath string
    Output         string

    output_stream io.WriteCloser // the actual stream to the output
  }
)

func create_public_key() {
  var err error
  flags := parse_public_key_flags()
  flags.output_stream, err = open_output_stream(flags.Output)
  if err != nil {
    crash_with_help(2, fmt.Sprintf("Error when creating file %s: %s", flags.Output, err))
  }
  priv_key := load_private_key(flags.PrivateKeyPath)
  marshal, err := x509.MarshalPKIXPublicKey(priv_key.Public())
  if err != nil {
    crash_with_help(2, fmt.Sprintf("Problems marshalling the public key: %s", err))
  }

  block := &pem.Block{Type: TypeLabelPubKey, Bytes: marshal}
  pem.Encode(flags.output_stream, block)
}

func parse_public_key_flags() PublicKeyFlags {
  flags := PublicKeyFlags{}
  fs := flag.NewFlagSet("create-public", flag.ExitOnError)
  fs.StringVar(&flags.PrivateKeyPath, "private-key", "", "path to the private key file")
  fs.StringVar(&flags.Output, "output", "STDOUT", "path where the generated csr should be stored")
  fs.Parse(os.Args[2:])

  return flags
}