Skip to content

Commit e466bf2

Browse files
committed
cmd/dkim-keygen: add option to read private key
1 parent 833aecb commit e466bf2

File tree

1 file changed

+31
-2
lines changed

1 file changed

+31
-2
lines changed

cmd/dkim-keygen/main.go

+31-2
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@ var (
1919
keyType string
2020
nBits int
2121
filename string
22+
readPriv bool
2223
)
2324

2425
func init() {
2526
flag.StringVar(&keyType, "t", "rsa", "key type (rsa, ed25519)")
2627
flag.IntVar(&nBits, "b", 3072, "number of bits in the key (only for RSA)")
2728
flag.StringVar(&filename, "f", "dkim.priv", "private key filename")
29+
flag.BoolVar(&readPriv, "y", false, "read private key and print public key")
2830
flag.Parse()
2931
}
3032

@@ -33,8 +35,13 @@ type privateKey interface {
3335
}
3436

3537
func main() {
36-
privKey := genPrivKey()
37-
writePrivKey(privKey)
38+
var privKey privateKey
39+
if readPriv {
40+
privKey = readPrivKey()
41+
} else {
42+
privKey = genPrivKey()
43+
writePrivKey(privKey)
44+
}
3845
printPubKey(privKey.Public())
3946
}
4047

@@ -59,6 +66,28 @@ func genPrivKey() privateKey {
5966
return privKey
6067
}
6168

69+
func readPrivKey() privateKey {
70+
b, err := os.ReadFile(filename)
71+
if err != nil {
72+
log.Fatalf("Failed to read public key file: %v", err)
73+
}
74+
75+
block, _ := pem.Decode(b)
76+
if block == nil {
77+
log.Fatalf("Failed to decode PEM block")
78+
} else if block.Type != "PRIVATE KEY" {
79+
log.Fatalf("Not a private key")
80+
}
81+
82+
privKey, err := x509.ParsePKCS8PrivateKey(block.Bytes)
83+
if err != nil {
84+
log.Fatalf("Failed to parse private key: %v", err)
85+
}
86+
87+
log.Printf("Private key read from %q", filename)
88+
return privKey.(privateKey)
89+
}
90+
6291
func writePrivKey(privKey privateKey) {
6392
privBytes, err := x509.MarshalPKCS8PrivateKey(privKey)
6493
if err != nil {

0 commit comments

Comments
 (0)