Skip to content
Snippets Groups Projects
Select Git revision
  • 7cff2e8d38a30274c7cfc352c3f1d6c70cf9ecd8
  • master default protected
  • renovate/golang.org-x-net-0.x
  • renovate/golang.org-x-crypto-0.x
  • renovate/git.autistici.org-ai3-go-common-digest
  • renovate/github.com-miekg-dns-1.x
  • renovate/github.com-prometheus-client_golang-1.x
  • v3
  • v2
9 results

os_unix.go

Blame
  • tsig.go 8.24 KiB
    package dns
    
    import (
    	"crypto/hmac"
    	"crypto/md5"
    	"crypto/sha1"
    	"crypto/sha256"
    	"crypto/sha512"
    	"encoding/hex"
    	"hash"
    	"io"
    	"strconv"
    	"strings"
    	"time"
    )
    
    // HMAC hashing codes. These are transmitted as domain names.
    const (
    	HmacMD5    = "hmac-md5.sig-alg.reg.int."
    	HmacSHA1   = "hmac-sha1."
    	HmacSHA256 = "hmac-sha256."
    	HmacSHA512 = "hmac-sha512."
    )
    
    // TSIG is the RR the holds the transaction signature of a message.
    // See RFC 2845 and RFC 4635.
    type TSIG struct {
    	Hdr        RR_Header
    	Algorithm  string `dns:"domain-name"`
    	TimeSigned uint64 `dns:"uint48"`
    	Fudge      uint16
    	MACSize    uint16
    	MAC        string `dns:"size-hex"`
    	OrigId     uint16
    	Error      uint16
    	OtherLen   uint16
    	OtherData  string `dns:"size-hex"`
    }
    
    func (rr *TSIG) Header() *RR_Header {
    	return &rr.Hdr
    }
    
    // TSIG has no official presentation format, but this will suffice.
    
    func (rr *TSIG) String() string {
    	s := "\n;; TSIG PSEUDOSECTION:\n"
    	s += rr.Hdr.String() +
    		" " + rr.Algorithm +
    		" " + tsigTimeToString(rr.TimeSigned) +
    		" " + strconv.Itoa(int(rr.Fudge)) +
    		" " + strconv.Itoa(int(rr.MACSize)) +
    		" " + strings.ToUpper(rr.MAC) +
    		" " + strconv.Itoa(int(rr.OrigId)) +
    		" " + strconv.Itoa(int(rr.Error)) + // BIND prints NOERROR
    		" " + strconv.Itoa(int(rr.OtherLen)) +
    		" " + rr.OtherData
    	return s
    }
    
    func (rr *TSIG) len() int {
    	return rr.Hdr.len() + len(rr.Algorithm) + 1 + 6 +
    		4 + len(rr.MAC)/2 + 1 + 6 + len(rr.OtherData)/2 + 1
    }
    
    func (rr *TSIG) copy() RR {
    	return &TSIG{*rr.Hdr.copyHeader(), rr.Algorithm, rr.TimeSigned, rr.Fudge, rr.MACSize, rr.MAC, rr.OrigId, rr.Error, rr.OtherLen, rr.OtherData}
    }
    
    // The following values must be put in wireformat, so that the MAC can be calculated.