diff options
| author | Felix Hanley <felix@monk.local> | 2017-07-12 13:41:54 +0000 |
|---|---|---|
| committer | Felix Hanley <felix@monk.local> | 2017-07-12 13:41:54 +0000 |
| commit | d257530cb0278c71b6edbbd0d5a60531f4536d09 (patch) | |
| tree | 2b55fe5ac959a0d19340498b030c08216bce13dc /vendor/github.com/miekg/dns/tlsa.go | |
| download | nomoreads-d257530cb0278c71b6edbbd0d5a60531f4536d09.tar.gz nomoreads-d257530cb0278c71b6edbbd0d5a60531f4536d09.tar.bz2 | |
Diffstat (limited to 'vendor/github.com/miekg/dns/tlsa.go')
| -rw-r--r-- | vendor/github.com/miekg/dns/tlsa.go | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/vendor/github.com/miekg/dns/tlsa.go b/vendor/github.com/miekg/dns/tlsa.go new file mode 100644 index 0000000..431e2fb --- /dev/null +++ b/vendor/github.com/miekg/dns/tlsa.go @@ -0,0 +1,47 @@ +package dns + +import ( + "crypto/x509" + "net" + "strconv" +) + +// Sign creates a TLSA record from an SSL certificate. +func (r *TLSA) Sign(usage, selector, matchingType int, cert *x509.Certificate) (err error) { + r.Hdr.Rrtype = TypeTLSA + r.Usage = uint8(usage) + r.Selector = uint8(selector) + r.MatchingType = uint8(matchingType) + + r.Certificate, err = CertificateToDANE(r.Selector, r.MatchingType, cert) + if err != nil { + return err + } + return nil +} + +// Verify verifies a TLSA record against an SSL certificate. If it is OK +// a nil error is returned. +func (r *TLSA) Verify(cert *x509.Certificate) error { + c, err := CertificateToDANE(r.Selector, r.MatchingType, cert) + if err != nil { + return err // Not also ErrSig? + } + if r.Certificate == c { + return nil + } + return ErrSig // ErrSig, really? +} + +// TLSAName returns the ownername of a TLSA resource record as per the +// rules specified in RFC 6698, Section 3. +func TLSAName(name, service, network string) (string, error) { + if !IsFqdn(name) { + return "", ErrFqdn + } + p, err := net.LookupPort(network, service) + if err != nil { + return "", err + } + return "_" + strconv.Itoa(p) + "._" + network + "." + name, nil +} |
