Commit 9ccc736f authored by Sean Liao's avatar Sean Liao Committed by Miek Gieben

plugin/dnssec, plugin/sign: ed25519 support (#3380)

* add ed25519 dnskey support
Signed-off-by: default avatarSean Liao <seankhliao@gmail.com>

* fix ed25519 type assertion
Signed-off-by: default avatarSean Liao <seankhliao@gmail.com>

* clean up whitespace
Signed-off-by: default avatarSean Liao <seankhliao@gmail.com>
parent 34ffe2a0
...@@ -9,8 +9,9 @@ import ( ...@@ -9,8 +9,9 @@ import (
"time" "time"
"github.com/coredns/coredns/request" "github.com/coredns/coredns/request"
"github.com/miekg/dns" "github.com/miekg/dns"
"golang.org/x/crypto/ed25519"
) )
// DNSKEY holds a DNSSEC public and private key used for on-the-fly signing. // DNSKEY holds a DNSSEC public and private key used for on-the-fly signing.
...@@ -55,6 +56,9 @@ func ParseKeyFile(pubFile, privFile string) (*DNSKEY, error) { ...@@ -55,6 +56,9 @@ func ParseKeyFile(pubFile, privFile string) (*DNSKEY, error) {
if s, ok := p.(*ecdsa.PrivateKey); ok { if s, ok := p.(*ecdsa.PrivateKey); ok {
return &DNSKEY{K: dk, D: dk.ToDS(dns.SHA256), s: s, tag: dk.KeyTag()}, nil return &DNSKEY{K: dk, D: dk.ToDS(dns.SHA256), s: s, tag: dk.KeyTag()}, nil
} }
if s, ok := p.(ed25519.PrivateKey); ok {
return &DNSKEY{K: dk, D: dk.ToDS(dns.SHA256), s: s, tag: dk.KeyTag()}, nil
}
return &DNSKEY{K: dk, D: dk.ToDS(dns.SHA256), s: nil, tag: 0}, errors.New("no private key found") return &DNSKEY{K: dk, D: dk.ToDS(dns.SHA256), s: nil, tag: 0}, errors.New("no private key found")
} }
......
...@@ -97,7 +97,7 @@ func readKeyPair(public, private string) (Pair, error) { ...@@ -97,7 +97,7 @@ func readKeyPair(public, private string) (Pair, error) {
switch signer := privkey.(type) { switch signer := privkey.(type) {
case *ecdsa.PrivateKey: case *ecdsa.PrivateKey:
return Pair{Public: dnskey.(*dns.DNSKEY), KeyTag: dnskey.(*dns.DNSKEY).KeyTag(), Private: signer}, nil return Pair{Public: dnskey.(*dns.DNSKEY), KeyTag: dnskey.(*dns.DNSKEY).KeyTag(), Private: signer}, nil
case *ed25519.PrivateKey: case ed25519.PrivateKey:
return Pair{Public: dnskey.(*dns.DNSKEY), KeyTag: dnskey.(*dns.DNSKEY).KeyTag(), Private: signer}, nil return Pair{Public: dnskey.(*dns.DNSKEY), KeyTag: dnskey.(*dns.DNSKEY).KeyTag(), Private: signer}, nil
case *rsa.PrivateKey: case *rsa.PrivateKey:
return Pair{Public: dnskey.(*dns.DNSKEY), KeyTag: dnskey.(*dns.DNSKEY).KeyTag(), Private: signer}, nil return Pair{Public: dnskey.(*dns.DNSKEY), KeyTag: dnskey.(*dns.DNSKEY).KeyTag(), Private: signer}, nil
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment