dns/parse_test.go

155 lines
5.6 KiB
Go
Raw Normal View History

package dns
2011-01-17 19:29:40 +00:00
import (
"fmt"
"net"
2011-03-23 17:53:16 +00:00
"strings"
2011-01-17 19:29:40 +00:00
"testing"
"crypto/rsa"
)
func TestPrivateKeyRead1(t *testing.T) {
2011-01-17 19:29:40 +00:00
a := `Private-key-format: v1.3
Algorithm: 5 (RSASHA1)
Modulus: vyVjCzz87g3rg9vDj1NJ1tlFP7lEY2pEQLkWGXAFuZM6Fw/bNmEH/z3ybDfsJqx4QQ6YZXN8V2kbzY7oX+tExf6AMiMIcKYzEGwg5xBYFh33du4G+6kE/VzG906ubpaIEnrZOMTdGqE7OwptAqrqXe4uGXY99ZqNdqutOKQyIzs=
PublicExponent: AQAB
PrivateExponent: PFg/RoMAjt8SJVSyDoOK4itBs3Z34rLfzVchZPJ6vDWAt1soJ6jGb4xNBmE5SpRUeqVy80RcUvQ59NFTB0UtNo/zAXhC1RfKiFCNRFTyV3k6a9CMLPAU9g4peW91lw87HXnYALTC9bTiTAoMU3vKvNx80F5qfK7qY/N28S1PMeE=
Prime1: +vPWyp37iUa7/LbhejOX/KdkhfwECUCdJF0uEePjaBCSf85xceEBzU89JFk9dCojtVqcI8xLKnRKRixg07Rc+Q==
Prime2: wv2aVWr13Cq2vRkKiHlqqP9vihGuDN/kWfmXb7slJH3s2i9+yI7vepAlow9SY8lNHOqXibEaAFsP3aj5OAAS0w==
Exponent1: sChCenBzhWV1yGvH0zQsWFpYogTKAISuyjvufvhtRTt82uJbmAjObwRUcxOBo+2Aq2kzeZ2Klf6TtLaqMXHGYQ==
Exponent2: hXiKeAWrHXWveGj3qMtTkzKl6uCHPxDSgjQy0KxNlFkOE5uHMUmF62NYH/GQ9/UG79A0wm+T2MJ8bcIINaj3OQ==
Coefficient: xzZBvs2/IT7+iRQdn9I4slRTg9ryIecx7oKEKYTOEeyL2qq7rfY/FwZGy3EqyA/3lrkfFLx76qOeqAmCTUaU4w==
Created: 20101221142359
Publish: 20101221142359
Activate: 20101221142359`
2011-01-17 19:29:40 +00:00
k := new(RR_DNSKEY)
p, _ := k.ReadPrivateKey(strings.NewReader(a))
2011-01-17 19:29:40 +00:00
p = p
}
func TestPrivateKeyRead2(t *testing.T) {
2011-01-17 19:29:40 +00:00
/* b:=`; This is a zone-signing key, keyid 41946, for miek.nl.
; Created: 20110109154937 (Sun Jan 9 16:49:37 2011)
; Publish: 20110109154937 (Sun Jan 9 16:49:37 2011)
; Activate: 20110109154937 (Sun Jan 9 16:49:37 2011)
miek.nl. IN DNSKEY 256 3 5 AwEAAeETsGZdYlTsHK8wc1yo9Zcj4dMEpPWRTYuTmGD3e4Qsk4/uyKf5jhsNZhp8no7GKHTEe7+K1prC4iXo3X5oQyDDmx76hDo5u6fblu/XaQw16wqMDQDPiURUKkzobJlmY6fYNKRz7A01J73V6qDMCvlk+8p+fb0a+LiJ2NJDACln`
*/
2011-01-17 19:29:40 +00:00
a := `Private-key-format: v1.3
Algorithm: 5 (RSASHA1)
Modulus: 4ROwZl1iVOwcrzBzXKj1lyPh0wSk9ZFNi5OYYPd7hCyTj+7Ip/mOGw1mGnyejsYodMR7v4rWmsLiJejdfmhDIMObHvqEOjm7p9uW79dpDDXrCowNAM+JRFQqTOhsmWZjp9g0pHPsDTUnvdXqoMwK+WT7yn59vRr4uInY0kMAKWc=
PublicExponent: AQAB
PrivateExponent: CYYAv8QRxhAbgpolN3V6tsNw6bHXnQBh7Jb5KpkuI8CTGdL7sIfRqHlfqZ0+REJEMfSiW89vFytJ0FrTDGcy99qesJujW/tlfsThRTwFSXdCNv0Df25CNNNeskMg3r86is8MmHJc+dAjN3P0ArAF2yZd9gS7C4TGKDDR3bZ9SYk=
Prime1: 8EO3P0cYdR8FISxLaUVfVJVIVAWux7tptnqZlzAmomPGEipXr2bAYf637hAAoD8xEUXbI6FIkXUk5vIjxfUjRQ==
Prime2: 79FWWF5PNh6ykof9NsrR2YRy/P30iLbzfSRVQrrYH15SEip5LUN15W/G7bg5Uyp8U/o3HXaaxhrj9LC330Uuuw==
Exponent1: mtOIKoauBAtRSuc4UUYbAG6ShVKEJsFmhejLQNoOi2awJNSUXLtiDcQO0qINRTZzcCYL6RHtqY5LkWdIFjC54Q==
Exponent2: ZpsiXly7d2Ra8ubMKA1PC8nniOb/IR9lvj01XX+jyIgKhUs23W7nmmrgqgUQQc0DtMpxmmGMhwYqUh7qDNUE0Q==
Coefficient: 2wn6uW28qM6B68m1ADcLmzjwIQn9Xyc/JMydrJUSzwG7Fr08bc1aa1+K/K0pVy82vU5emDKdVXPP4+WtqXnUNA==
Created: 20110109154937
Publish: 20110109154937
Activate: 20110109154937`
2011-01-17 19:29:40 +00:00
k := new(RR_DNSKEY)
k.Hdr.Rrtype = TypeDNSKEY
k.Hdr.Class = ClassINET
k.Hdr.Name = "miek.nl."
k.Hdr.Ttl = 3600
2011-01-17 19:29:40 +00:00
k.Protocol = 3
k.Flags = 256
2011-07-08 16:21:29 +00:00
k.Algorithm = RSASHA1
2011-03-23 18:03:37 +00:00
p, _ := k.ReadPrivateKey(strings.NewReader(a))
2011-01-17 19:29:40 +00:00
switch priv := p.(type) {
case *rsa.PrivateKey:
if 65537 != priv.PublicKey.E {
2011-03-24 14:52:37 +00:00
t.Log("Exponenent should be 65537")
2011-01-17 19:29:40 +00:00
t.Fail()
}
}
if k.KeyTag() != 41946 {
t.Logf("%v\n", k)
t.Log("Keytag should be 41946")
t.Fail()
}
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.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 = k.KeyTag()
sig.SignerName = k.Hdr.Name
sig.Algorithm = k.Algorithm
sig.Sign(p, []RR{soa})
fmt.Printf("%v\n%v\n%v\n", k, soa, sig)
}
2011-02-21 17:23:39 +00:00
func TestA(t *testing.T) {
a := new(RR_A)
a.Hdr = RR_Header{"miek.nl.", TypeA, ClassINET, 14400, 0}
a.A = net.ParseIP("192.168.1.1")
str := a.String()
if str != "miek.nl.\t14400\tIN\tA\t192.168.1.1" {
t.Log(str)
t.Fail()
}
2011-02-21 17:23:39 +00:00
}
func TestQuadA(t *testing.T) {
a := new(RR_AAAA)
a.Hdr = RR_Header{"miek.nl.", TypeAAAA, ClassINET, 14400, 0}
a.AAAA = net.ParseIP("::1")
str := a.String()
if str != "miek.nl.\t14400\tIN\tAAAA\t::1" {
t.Log(str)
t.Fail()
}
}
func TestDotInName(t *testing.T) {
buf := make([]byte, 20)
2011-02-21 19:56:05 +00:00
packDomainName("aa\\.bb.nl.", buf, 0)
// index 3 must be a real dot
if buf[3] != '.' {
t.Log("Dot should be a real dot")
t.Fail()
}
if buf[6] != 2 {
t.Log("This must have the value 2")
2011-02-21 17:23:39 +00:00
t.Fail()
}
2011-02-21 19:56:05 +00:00
dom, _, _ := unpackDomainName(buf, 0)
// printing it should yield the backspace again
2011-02-21 19:56:05 +00:00
if dom != "aa\\.bb.nl." {
t.Log("Dot should have been escaped: " + dom)
t.Fail()
}
2011-02-21 17:23:39 +00:00
}
2011-02-21 20:32:12 +00:00
2011-07-14 14:11:16 +00:00
// New style (Ragel) parsing
func TestParse(t *testing.T) {
rr, _ := Zparse("miek.nl. 3600 IN A 127.0.0.1")
2011-07-14 21:12:43 +00:00
fmt.Printf("Seen a:\n%v\n", rr)
rr, _ = Zparse("miek.nl. 3600 IN MX 10 elektron.atoom.net.")
fmt.Printf("Seen a:\n%v\n", rr)
rr, _ = Zparse("nlnetlabs.nl. 3175 IN DNSKEY 256 3 8 AwEAAdR7XR95OaAN9Rz7TbtPalQ9guQk7zfxTHYNKhsiwTZA9z+F16nD0VeBlk7dNik3ETpT2GLAwr9sntG898JwurCDe353wHPvjZtMCdiTVp3cRCrjuCEvoFpmZNN82H0gaH/4v8mkv/QBDAkDSncYjz/FqHKAeYy3cMcjY6RyVweh");
fmt.Printf("Seen a:\n%v\n", rr)
rr, _ = Zparse("miek.nl. IN A 127.0.0.1")
fmt.Printf("Seen a:\n%v\n", rr)
rr, _ = Zparse("miek.nl. IN 3600 A 127.0.0.1")
fmt.Printf("Seen a:\n%v\n", rr)
rr, _ = Zparse("miek.nl. A 127.0.0.1")
2011-07-14 19:25:15 +00:00
fmt.Printf("Seen a:\n%v\n", rr)
2011-02-21 20:32:12 +00:00
}