From dcc2d9f81d6bd06f9ddbbdfaa109314fd2738c4e Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Sat, 15 Jan 2011 13:37:04 +0100 Subject: [PATCH] Add some more testing --- keygen_test.go | 47 +++++++++++++++++++++++++ responder/responder_test.go | 69 +++++++++++++++++++++++++++++++++++++ signverify_test.go | 57 ++++++++++++++++++++++++++++++ 3 files changed, 173 insertions(+) create mode 100644 keygen_test.go create mode 100644 responder/responder_test.go create mode 100644 signverify_test.go diff --git a/keygen_test.go b/keygen_test.go new file mode 100644 index 00000000..17322aa2 --- /dev/null +++ b/keygen_test.go @@ -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) +} diff --git a/responder/responder_test.go b/responder/responder_test.go new file mode 100644 index 00000000..95abbae7 --- /dev/null +++ b/responder/responder_test.go @@ -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) +} diff --git a/signverify_test.go b/signverify_test.go new file mode 100644 index 00000000..f45fab86 --- /dev/null +++ b/signverify_test.go @@ -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!!") + } +}