Add some more testing
This commit is contained in:
parent
5ab8afe518
commit
dcc2d9f81d
|
@ -0,0 +1,47 @@
|
|||
package dns
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func TestKeyGenRSA(t *testing.T) {
|
||||
key := new(RR_DNSKEY)
|
||||
key.Hdr.Name = "miek.nl."
|
||||
key.Hdr.Rrtype = TypeDNSKEY
|
||||
key.Hdr.Class = ClassINET
|
||||
key.Hdr.Ttl = 3600
|
||||
key.Flags = 256
|
||||
key.Protocol = 3
|
||||
key.Algorithm = AlgRSASHA256
|
||||
length := 2048
|
||||
priv, _ := key.Generate(length)
|
||||
|
||||
soa := new(RR_SOA)
|
||||
soa.Hdr = RR_Header{"miek.nl.", TypeSOA, ClassINET, 14400, 0}
|
||||
soa.Ns = "open.nlnetlabs.nl."
|
||||
soa.Mbox = "miekg.atoom.net."
|
||||
soa.Serial = 1293945905
|
||||
soa.Refresh = 14400
|
||||
soa.Retry = 3600
|
||||
soa.Expire = 604800
|
||||
soa.Minttl = 86400
|
||||
|
||||
sig := new(RR_RRSIG)
|
||||
sig.Hdr = RR_Header{"miek.nl.", TypeRRSIG, ClassINET, 14400, 0}
|
||||
sig.TypeCovered = TypeSOA
|
||||
sig.Algorithm = AlgRSASHA256
|
||||
sig.Labels = 2
|
||||
sig.Expiration = 1296534305 // date -u '+%s' -d"2011-02-01 04:25:05"
|
||||
sig.Inception = 1293942305 // date -u '+%s' -d"2011-01-02 04:25:05"
|
||||
sig.OrigTtl = 14400
|
||||
sig.KeyTag = key.KeyTag()
|
||||
sig.SignerName = "miek.nl."
|
||||
|
||||
sig.Sign(priv, []RR{soa})
|
||||
|
||||
s := key.PrivateKeyString(priv)
|
||||
fmt.Printf("%s\n", s)
|
||||
|
||||
fmt.Printf("%v\n", sig)
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
package responder
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"dns"
|
||||
"net"
|
||||
"time"
|
||||
)
|
||||
|
||||
type myserv Server
|
||||
|
||||
func createpkg(id uint16, tcp bool, remove net.Addr) []byte {
|
||||
m := new(dns.Msg)
|
||||
m.MsgHdr.Id = id
|
||||
m.MsgHdr.Authoritative = true
|
||||
m.MsgHdr.AuthenticatedData = false
|
||||
m.MsgHdr.RecursionAvailable = true
|
||||
m.MsgHdr.Response = true
|
||||
m.MsgHdr.Opcode = dns.OpcodeQuery
|
||||
m.MsgHdr.Rcode = dns.RcodeSuccess
|
||||
m.Question = make([]dns.Question, 1)
|
||||
m.Question[0] = dns.Question{"miek.nl.", dns.TypeTXT, dns.ClassINET}
|
||||
m.Answer = make([]dns.RR, 1)
|
||||
t := new(dns.RR_TXT)
|
||||
t.Hdr = dns.RR_Header{Name: "miek.nl.", Rrtype: dns.TypeTXT, Class: dns.ClassINET, Ttl: 3600}
|
||||
if tcp {
|
||||
t.Txt = "Dit is iets anders TCP"
|
||||
} else {
|
||||
t.Txt = "Dit is iets anders UDP"
|
||||
}
|
||||
m.Answer[0] = t
|
||||
out, _ := m.Pack()
|
||||
return out
|
||||
}
|
||||
|
||||
func (s *myserv) ResponderUDP(c *net.UDPConn, a net.Addr, in []byte) {
|
||||
inmsg := new(dns.Msg)
|
||||
inmsg.Unpack(in)
|
||||
out := createpkg(inmsg.MsgHdr.Id, false, a)
|
||||
SendUDP(out, c, a)
|
||||
}
|
||||
|
||||
func (s *myserv) ResponderTCP(c *net.TCPConn, in []byte) {
|
||||
inmsg := new(dns.Msg)
|
||||
inmsg.Unpack(in)
|
||||
out := createpkg(inmsg.MsgHdr.Id, true, c.RemoteAddr())
|
||||
SendTCP(out, c)
|
||||
}
|
||||
|
||||
func TestResponder(t *testing.T) {
|
||||
/* udp servertje */
|
||||
su := new(Server)
|
||||
su.Address = "127.0.0.1"
|
||||
su.Port = "8053"
|
||||
var us *myserv
|
||||
uch :=make(chan bool)
|
||||
go su.NewResponder(us, uch)
|
||||
|
||||
/* tcp servertje */
|
||||
st := new(Server)
|
||||
st.Address = "127.0.0.1"
|
||||
st.Port = "8053"
|
||||
st.Tcp = true
|
||||
var ts *myserv
|
||||
tch :=make(chan bool)
|
||||
go st.NewResponder(ts, tch)
|
||||
|
||||
time.Sleep(100 * 1e9)
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
package dns
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"fmt"
|
||||
"os"
|
||||
)
|
||||
|
||||
func TestSignVerify(t *testing.T) {
|
||||
// The record we want to sign
|
||||
soa := new(RR_SOA)
|
||||
soa.Hdr = RR_Header{"miek.nl.", TypeSOA, ClassINET, 14400, 0}
|
||||
soa.Ns = "open.nlnetlabs.nl."
|
||||
soa.Mbox = "miekg.atoom.net."
|
||||
soa.Serial = 1293945905
|
||||
soa.Refresh = 14400
|
||||
soa.Retry = 3600
|
||||
soa.Expire = 604800
|
||||
soa.Minttl = 86400
|
||||
|
||||
// With this key
|
||||
key := new(RR_DNSKEY)
|
||||
key.Hdr.Rrtype = TypeDNSKEY
|
||||
key.Hdr.Name = "miek.nl."
|
||||
key.Hdr.Class = ClassINET
|
||||
key.Hdr.Ttl = 14400
|
||||
key.Flags = 256
|
||||
key.Protocol = 3
|
||||
key.Algorithm = AlgRSASHA256
|
||||
privkey, _ := key.Generate(512)
|
||||
fmt.Fprintf(os.Stderr, "Key tag: %d\n", key.KeyTag())
|
||||
|
||||
// Fill in the values of the Sig, before signing
|
||||
sig := new(RR_RRSIG)
|
||||
sig.Hdr = RR_Header{"miek.nl.", TypeRRSIG, ClassINET, 14400, 0}
|
||||
sig.TypeCovered = soa.Hdr.Rrtype
|
||||
sig.Labels = LabelCount(soa.Hdr.Name)
|
||||
sig.OrigTtl = soa.Hdr.Ttl
|
||||
sig.Expiration = 1296534305 // date -u '+%s' -d"2011-02-01 04:25:05"
|
||||
sig.Inception = 1293942305 // date -u '+%s' -d"2011-01-02 04:25:05"
|
||||
sig.KeyTag = key.KeyTag() // Get the keyfrom the Key
|
||||
sig.SignerName = key.Hdr.Name
|
||||
sig.Algorithm = AlgRSASHA256
|
||||
|
||||
// zal wel goed zijn
|
||||
if !sig.Sign(privkey, []RR{soa}) {
|
||||
t.Log("Failure to sign the SOA record")
|
||||
t.Fail()
|
||||
}
|
||||
fmt.Fprintf(os.Stderr, "%v\n%v\n%v\n", soa, key, sig)
|
||||
if !sig.Verify(key, []RR{soa}) {
|
||||
t.Log("Failure to validate")
|
||||
t.Fail()
|
||||
} else {
|
||||
println("It validates!!")
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue