OSDN Git Service

Merge pull request #201 from Bytom/v0.1
[bytom/vapor.git] / vendor / github.com / miekg / dns / dane.go
diff --git a/vendor/github.com/miekg/dns/dane.go b/vendor/github.com/miekg/dns/dane.go
new file mode 100644 (file)
index 0000000..8c4a14e
--- /dev/null
@@ -0,0 +1,43 @@
+package dns
+
+import (
+       "crypto/sha256"
+       "crypto/sha512"
+       "crypto/x509"
+       "encoding/hex"
+       "errors"
+)
+
+// CertificateToDANE converts a certificate to a hex string as used in the TLSA or SMIMEA records.
+func CertificateToDANE(selector, matchingType uint8, cert *x509.Certificate) (string, error) {
+       switch matchingType {
+       case 0:
+               switch selector {
+               case 0:
+                       return hex.EncodeToString(cert.Raw), nil
+               case 1:
+                       return hex.EncodeToString(cert.RawSubjectPublicKeyInfo), nil
+               }
+       case 1:
+               h := sha256.New()
+               switch selector {
+               case 0:
+                       h.Write(cert.Raw)
+                       return hex.EncodeToString(h.Sum(nil)), nil
+               case 1:
+                       h.Write(cert.RawSubjectPublicKeyInfo)
+                       return hex.EncodeToString(h.Sum(nil)), nil
+               }
+       case 2:
+               h := sha512.New()
+               switch selector {
+               case 0:
+                       h.Write(cert.Raw)
+                       return hex.EncodeToString(h.Sum(nil)), nil
+               case 1:
+                       h.Write(cert.RawSubjectPublicKeyInfo)
+                       return hex.EncodeToString(h.Sum(nil)), nil
+               }
+       }
+       return "", errors.New("dns: bad MatchingType or Selector")
+}