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
}
|