dns/dnssec_test.go

294 lines
9.0 KiB
Go
Raw Normal View History

2011-01-09 19:07:13 +00:00
package dns
import (
2012-01-22 19:44:52 +00:00
"os"
2011-02-24 15:22:14 +00:00
"strings"
2011-12-09 20:45:57 +00:00
"testing"
2011-01-09 19:07:13 +00:00
)
2012-01-22 18:08:47 +00:00
func getKey() *RR_DNSKEY {
key := new(RR_DNSKEY)
key.Hdr.Name = "miek.nl."
key.Hdr.Class = ClassINET
key.Hdr.Ttl = 14400
key.Flags = 256
key.Protocol = 3
key.Algorithm = RSASHA256
key.PublicKey = "AwEAAcNEU67LJI5GEgF9QLNqLO1SMq1EdoQ6E9f85ha0k0ewQGCblyW2836GiVsm6k8Kr5ECIoMJ6fZWf3CQSQ9ycWfTyOHfmI3eQ/1Covhb2y4bAmL/07PhrL7ozWBW3wBfM335Ft9xjtXHPy7ztCbV9qZ4TVDTW/Iyg0PiwgoXVesz"
return key
}
func getSoa() *RR_SOA {
2011-02-24 15:22:14 +00:00
soa := new(RR_SOA)
2011-01-09 19:07:13 +00:00
soa.Hdr = RR_Header{"miek.nl.", TypeSOA, ClassINET, 14400, 0}
soa.Ns = "open.nlnetlabs.nl."
2011-02-24 15:22:14 +00:00
soa.Mbox = "miekg.atoom.net."
soa.Serial = 1293945905
soa.Refresh = 14400
soa.Retry = 3600
soa.Expire = 604800
soa.Minttl = 86400
2012-01-22 18:08:47 +00:00
return soa
}
func TestSecure(t *testing.T) {
soa := getSoa()
2011-01-09 19:07:13 +00:00
sig := new(RR_RRSIG)
2011-02-24 15:22:14 +00:00
sig.Hdr = RR_Header{"miek.nl.", TypeRRSIG, ClassINET, 14400, 0}
2011-01-09 19:07:13 +00:00
sig.TypeCovered = TypeSOA
sig.Algorithm = RSASHA256
2011-01-09 19:07:13 +00:00
sig.Labels = 2
2011-02-24 15:22:14 +00:00
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"
2011-01-09 19:07:13 +00:00
sig.OrigTtl = 14400
sig.KeyTag = 12051
sig.SignerName = "miek.nl."
sig.Signature = "oMCbslaAVIp/8kVtLSms3tDABpcPRUgHLrOR48OOplkYo+8TeEGWwkSwaz/MRo2fB4FxW0qj/hTlIjUGuACSd+b1wKdH5GvzRJc2pFmxtCbm55ygAh4EUL0F6U5cKtGJGSXxxg6UFCQ0doJCmiGFa78LolaUOXImJrk6AFrGa0M="
key := new(RR_DNSKEY)
key.Hdr.Name = "miek.nl."
key.Hdr.Class = ClassINET
key.Hdr.Ttl = 14400
key.Flags = 256
key.Protocol = 3
key.Algorithm = RSASHA256
key.PublicKey = "AwEAAcNEU67LJI5GEgF9QLNqLO1SMq1EdoQ6E9f85ha0k0ewQGCblyW2836GiVsm6k8Kr5ECIoMJ6fZWf3CQSQ9ycWfTyOHfmI3eQ/1Covhb2y4bAmL/07PhrL7ozWBW3wBfM335Ft9xjtXHPy7ztCbV9qZ4TVDTW/Iyg0PiwgoXVesz"
2011-01-09 19:07:13 +00:00
2011-02-24 15:22:14 +00:00
// It should validate. Period is checked seperately, so this will keep on working
2011-09-10 19:22:42 +00:00
if sig.Verify(key, []RR{soa}) != nil {
2011-02-24 15:22:14 +00:00
t.Log("Failure to validate")
t.Fail()
}
2011-01-09 19:07:13 +00:00
}
2011-01-15 21:48:39 +00:00
func TestSignature(t *testing.T) {
sig := new(RR_RRSIG)
sig.Hdr.Name = "miek.nl."
sig.Hdr.Class = ClassINET
sig.Hdr.Ttl = 3600
sig.TypeCovered = TypeDNSKEY
sig.Algorithm = RSASHA1
2011-01-15 21:48:39 +00:00
sig.Labels = 2
sig.OrigTtl = 4000
sig.Expiration = 1000 //Thu Jan 1 02:06:40 CET 1970
sig.Inception = 800 //Thu Jan 1 01:13:20 CET 1970
sig.KeyTag = 34641
sig.SignerName = "miek.nl."
sig.Signature = "AwEAAaHIwpx3w4VHKi6i1LHnTaWeHCL154Jug0Rtc9ji5qwPXpBo6A5sRv7cSsPQKPIwxLpyCrbJ4mr2L0EPOdvP6z6YfljK2ZmTbogU9aSU2fiq/4wjxbdkLyoDVgtO+JsxNN4bjr4WcWhsmk1Hg93FV9ZpkWb0Tbad8DFqNDzr//kZ"
// Should not be valid
2011-03-23 18:03:37 +00:00
if sig.ValidityPeriod() {
2011-01-15 21:48:39 +00:00
t.Log("Should not be valid")
t.Fail()
}
sig.Inception = 315565800 //Tue Jan 1 10:10:00 CET 1980
sig.Expiration = 4102477800 //Fri Jan 1 10:10:00 CET 2100
2011-03-23 18:03:37 +00:00
if !sig.ValidityPeriod() {
2011-01-15 21:48:39 +00:00
t.Log("Should be valid")
t.Fail()
}
}
func TestSignVerify(t *testing.T) {
// The record we want to sign
2012-01-22 18:08:47 +00:00
soa := new(RR_SOA)
2011-01-15 21:48:39 +00:00
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
2012-01-22 18:08:47 +00:00
soa1 := new(RR_SOA)
soa1.Hdr = RR_Header{"*.miek.nl.", TypeSOA, ClassINET, 14400, 0}
soa1.Ns = "open.nlnetlabs.nl."
soa1.Mbox = "miekg.atoom.net."
soa1.Serial = 1293945905
soa1.Refresh = 14400
soa1.Retry = 3600
soa1.Expire = 604800
soa1.Minttl = 86400
2011-01-15 21:48:39 +00:00
// With this key
key := new(RR_DNSKEY)
2011-02-24 15:22:14 +00:00
key.Hdr.Rrtype = TypeDNSKEY
2011-01-15 21:48:39 +00:00
key.Hdr.Name = "miek.nl."
key.Hdr.Class = ClassINET
key.Hdr.Ttl = 14400
key.Flags = 256
key.Protocol = 3
key.Algorithm = RSASHA256
2011-01-15 21:48:39 +00:00
privkey, _ := key.Generate(512)
// 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
2012-01-08 14:56:53 +00:00
sig.Labels, _ = IsDomainName(soa.Hdr.Name)
2011-01-15 21:48:39 +00:00
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 = RSASHA256
2011-01-15 21:48:39 +00:00
2012-01-22 18:08:47 +00:00
for _, r := range []RR{soa,soa1} {
if sig.Sign(privkey, []RR{r}) != nil {
t.Log("Failure to sign the SOA record")
t.Fail()
continue
}
if sig.Verify(key, []RR{r}) != nil {
t.Log("Failure to validate")
t.Fail()
continue
}
2012-01-22 18:56:13 +00:00
t.Logf("Validated: %s\n", r.Header().Name)
2011-02-24 15:22:14 +00:00
}
2011-01-15 21:48:39 +00:00
}
2011-01-15 21:53:04 +00:00
2012-01-22 19:44:52 +00:00
func TestDnskey(t *testing.T) {
f, _ := os.Open("t/Kmiek.nl.+010+05240.private")
privkey, _ := ReadPrivateKey(f, "t/Kmiek.nl.+010+05240.private")
f, _ = os.Open("t/Kmiek.nl.+010+05240.key")
pubkey, _ := ReadRR(f, "t/Kmiek.nl.+010+05240.key")
// Okay, we assume this has gone OK
if pubkey.(*RR_DNSKEY).PublicKey != "AwEAAZuMCu2FdugHkTrXYgl5qixvcDw1aDDlvL46/xJKbHBAHY16fNUb2b65cwko2Js/aJxUYJbZk5dwCDZxYfrfbZVtDPQuc3o8QaChVxC7/JYz2AHc9qHvqQ1j4VrH71RWINlQo6VYjzN/BGpMhOZoZOEwzp1HfsOE3lNYcoWU1smL" {
t.Log("Pubkey is not what we've read")
t.Fail()
}
// Coefficient looks fishy...
2012-01-23 10:30:26 +00:00
t.Logf("%s", pubkey.(*RR_DNSKEY).PrivateKeyString(privkey))
2011-07-08 08:41:07 +00:00
}
2011-01-15 21:53:04 +00:00
2012-01-22 19:44:52 +00:00
2011-01-15 21:53:04 +00:00
/*
return
// This key was generate with LDNS:
// ldns-keygen -a RSASHA256 -r /dev/urandom -b 1024 miek.nl
// Show that we have al the RSA parameters and can check them
// here to see what I came up with
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 = RSASHA256
key.PublicKey = "AwEAAcELcuxHosJX3LjbR6EFzsqI3mKivwvO6Y5Kzt/OXYmLQUI8tnOrX9ilT/0qGraxoONayVX3A6bl1pG3h/xOxVEGcJGqbrZnhr2+4S9tW2GWQwevV+NhinE7v6MCCCheVCnAPh0KFb/u14ng3DQizP1spBU/NoAN31l678snBpZX"
2011-01-15 21:53:04 +00:00
soa := new(RR_SOA)
soa.Hdr = RR_Header{"Miek.nl.", TypeSOA, ClassINET, 875, 0}
soa.Ns = "open.nlnetlabs.nl."
soa.Mbox = "miekg.atoom.net."
soa.Serial = 1293513905
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 = RSASHA256
2011-01-15 21:53:04 +00:00
sig.Labels = 2
sig.Expiration = 1296098705 // date '+%s' -d"2011-01-27 04:25:05
sig.Inception = 1293506705
sig.OrigTtl = 14400
//sig.KeyTag = 12051
sig.KeyTag = 12273 //faked
sig.SignerName = "miek.nl."
sig.Signature = "kLq/5oFy3Sh5ZxPGFMCyHq8MtN6E17R1Ln9+bJ2Q76YYAxFE8Xlie33A1GFctH2uhzRzJKuP/JSjUkrvGk2rjBm32z9zXtZsKx/4yV0da2nLRm44NOmX6gsP4Yia8mdqPUajjkyLzAzU2bevtesJm0Z65AcmPdq3tUZODdRAcng="
sig.Verify(key, []RR{soa})
// From Kmiek.nl*.private
openssl := "135560614087352210480379313279722604826647214111257577861451621491284835543707521986085999189597017237768514876957888744370440811423088511394629855684615382349190289731989185193184712980579812986523080792122141528583964882610028199770199112837017606561901919812183422914622295620927795008308854924436086101591"
println("OPENSSL key: what should be is: ",openssl)
}
*/
2011-01-15 21:53:45 +00:00
func TestTag(t *testing.T) {
key := new(RR_DNSKEY)
key.Hdr.Name = "miek.nl."
2011-02-24 15:22:14 +00:00
key.Hdr.Rrtype = TypeDNSKEY
2011-01-15 21:53:45 +00:00
key.Hdr.Class = ClassINET
key.Hdr.Ttl = 3600
key.Flags = 256
key.Protocol = 3
key.Algorithm = RSASHA256
key.PublicKey = "AwEAAcNEU67LJI5GEgF9QLNqLO1SMq1EdoQ6E9f85ha0k0ewQGCblyW2836GiVsm6k8Kr5ECIoMJ6fZWf3CQSQ9ycWfTyOHfmI3eQ/1Covhb2y4bAmL/07PhrL7ozWBW3wBfM335Ft9xjtXHPy7ztCbV9qZ4TVDTW/Iyg0PiwgoXVesz"
2011-01-15 21:53:45 +00:00
2011-02-24 15:22:14 +00:00
tag := key.KeyTag()
if tag != 12051 {
t.Logf("Wrong key tag: %d for key %v\n", tag, key)
2011-02-24 15:22:14 +00:00
t.Fail()
}
2011-01-15 21:53:45 +00:00
}
2011-01-15 21:57:17 +00:00
2011-07-08 08:41:07 +00:00
func TestKeyRSA(t *testing.T) {
2011-01-15 21:57:17 +00:00
key := new(RR_DNSKEY)
key.Hdr.Name = "miek.nl."
2011-02-24 15:22:14 +00:00
key.Hdr.Rrtype = TypeDNSKEY
2011-01-15 21:57:17 +00:00
key.Hdr.Class = ClassINET
key.Hdr.Ttl = 3600
key.Flags = 256
key.Protocol = 3
key.Algorithm = RSASHA256
2012-01-15 19:32:53 +00:00
priv, _ := key.Generate(2048)
2011-01-15 21:57:17 +00:00
2011-02-24 15:22:14 +00:00
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
2011-01-15 21:57:17 +00:00
2011-02-24 15:22:14 +00:00
sig := new(RR_RRSIG)
sig.Hdr = RR_Header{"miek.nl.", TypeRRSIG, ClassINET, 14400, 0}
sig.TypeCovered = TypeSOA
sig.Algorithm = RSASHA256
2011-02-24 15:22:14 +00:00
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"
2012-01-15 19:32:53 +00:00
sig.OrigTtl = soa.Hdr.Ttl
2011-02-24 15:22:14 +00:00
sig.KeyTag = key.KeyTag()
2012-01-15 19:32:53 +00:00
sig.SignerName = key.Hdr.Name
2011-01-15 21:57:17 +00:00
2012-01-20 11:24:20 +00:00
if err := sig.Sign(priv, []RR{soa}); err != nil {
t.Logf("Failed to sign")
t.Fail()
return
}
if err := sig.Verify(key, []RR{soa}); err != nil {
t.Logf("Failed to verify")
t.Fail()
}
2011-01-15 21:57:17 +00:00
}
func TestKeyToDS(t *testing.T) {
key := new(RR_DNSKEY)
2012-01-08 14:34:42 +00:00
key.Hdr.Name = "miek.nl."
2011-02-24 15:22:14 +00:00
key.Hdr.Rrtype = TypeDNSKEY
2011-01-15 21:57:17 +00:00
key.Hdr.Class = ClassINET
key.Hdr.Ttl = 3600
key.Flags = 256
key.Protocol = 3
key.Algorithm = RSASHA256
key.PublicKey = "AwEAAcNEU67LJI5GEgF9QLNqLO1SMq1EdoQ6E9f85ha0k0ewQGCblyW2836GiVsm6k8Kr5ECIoMJ6fZWf3CQSQ9ycWfTyOHfmI3eQ/1Covhb2y4bAmL/07PhrL7ozWBW3wBfM335Ft9xjtXHPy7ztCbV9qZ4TVDTW/Iyg0PiwgoXVesz"
2011-01-15 21:57:17 +00:00
ds := key.ToDS(SHA1)
2011-02-24 15:22:14 +00:00
if strings.ToUpper(ds.Digest) != "B5121BDB5B8D86D0CC5FFAFBAAABE26C3E20BAC1" {
2011-12-16 14:06:24 +00:00
t.Logf("Wrong DS digest for SHA1\n%v\n", ds)
2011-02-24 15:22:14 +00:00
t.Fail()
}
2011-01-15 21:57:17 +00:00
}