Skip to content

Commit 37cf561

Browse files
authored
add: add support ZONEMD (#21)
1 parent ad79d65 commit 37cf561

34 files changed

+1754
-216
lines changed

name_node.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ func (n *NameNode) IterateNameNodeWithValue(f func(NameNodeInterface, any) (any,
183183
for key := range children {
184184
keys = append(keys, key)
185185
}
186-
keys, _ = SortNames(keys)
186+
SortNames(keys)
187187
for _, name := range keys {
188188
if err := children[name].IterateNameNodeWithValue(f, res); err != nil {
189189
return err

nsec.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ func CreateDoE(z ZoneInterface, opt SignOption, generator Generator) error {
2525
func createNSEC(z ZoneInterface, generator RRSetGenerator) error {
2626
var nodes = map[string]NameNodeInterface{}
2727
var names []string
28+
if generator == nil {
29+
generator = &DefaultGenerator{}
30+
}
2831
soa, err := GetSOA(z)
2932
if err != nil {
3033
return ErrBadZone

sign.go

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ type SignOption struct {
3131
DoEMethod DenialOfExistenceMethod
3232
NSEC3Salt string
3333
NSEC3Iterate uint16
34+
35+
ZONEMDEnabled bool
3436
}
3537

3638
func (o *SignOption) GetBeforSign() time.Duration {
@@ -112,6 +114,32 @@ func (d *DNSKEY) IsZSK() bool {
112114
return d.rr.Flags == 256
113115
}
114116

117+
func Sign(z ZoneInterface, opt SignOption, dnskeys []*DNSKEY, generator Generator) error {
118+
if err := AddDNSKEY(z, dnskeys, uint32(0), generator); err != nil {
119+
return fmt.Errorf("failed to add DNSKEY: %w", err)
120+
}
121+
if opt.ZONEMDEnabled {
122+
if err := AddZONEMDPlaceholder(z, nil, generator); err != nil {
123+
return fmt.Errorf("failed to add ZONEMD: %w", err)
124+
}
125+
}
126+
if err := CreateDoE(z, opt, generator); err != nil {
127+
return fmt.Errorf("failed to add NSEC or NSEC3: %w", err)
128+
}
129+
if err := SignZone(z, opt, dnskeys, generator); err != nil {
130+
return fmt.Errorf("failed to sign zone: %w", err)
131+
}
132+
if opt.ZONEMDEnabled {
133+
if err := UpdateZONEMDDigest(z, generator); err != nil {
134+
return fmt.Errorf("failed to update ZONEMD digest: %w", err)
135+
}
136+
if err := SignNode(z.GetRootNode(), opt, dnskeys, generator, true, true); err != nil {
137+
return fmt.Errorf("failed to sign zone apex: %w", err)
138+
}
139+
}
140+
return nil
141+
}
142+
115143
func AddDNSKEY(z ZoneInterface, dnskeys []*DNSKEY, ttl uint32, generator Generator) error {
116144
if len(dnskeys) == 0 {
117145
return fmt.Errorf("empty DNSKEYs")
@@ -145,25 +173,31 @@ func SignZone(z ZoneInterface, opt SignOption, dnskeys []*DNSKEY, generator Gene
145173
auth := a.(bool)
146174
if z.GetName() != nni.GetName() {
147175
if nsRRset := nni.GetRRSet(dns.TypeNS); nsRRset != nil {
148-
return false, signNode(nni, opt, dnskeys, generator, nni == z.GetRootNode(), true)
176+
return false, SignNode(nni, opt, dnskeys, generator, nni == z.GetRootNode(), true)
149177
}
150178
}
151-
return auth, signNode(nni, opt, dnskeys, generator, nni == z.GetRootNode(), auth)
179+
return auth, SignNode(nni, opt, dnskeys, generator, nni == z.GetRootNode(), auth)
152180
}, true)
153181
}
154182

155-
func signNode(nni NameNodeInterface, opt SignOption, dnskeys []*DNSKEY, generator Generator, apex, auth bool) error {
183+
func SignNode(nni NameNodeInterface, opt SignOption, dnskeys []*DNSKEY, generator Generator, apex, auth bool) error {
184+
if generator == nil {
185+
generator = &DefaultGenerator{}
186+
}
156187
if !auth {
157188
return nil
158189
}
159-
rrsig, err := GetRRSetOrCreate(nni, dns.TypeRRSIG, 0, generator)
190+
rrsig, err := generator.NewRRSet(nni.GetName(), 0, nni.GetClass(), dns.TypeRRSIG)
160191
if err != nil {
161192
return err
162193
}
163194
err = nni.IterateNameRRSet(func(ri RRSetInterface) error {
164195
if ri.GetRRtype() == dns.TypeNS && !apex {
165196
return nil
166197
}
198+
if ri.GetRRtype() == dns.TypeRRSIG {
199+
return nil
200+
}
167201
rrsigRRs, err := SignRRSet(ri, opt, dnskeys)
168202
if err != nil {
169203
return err

testdata/zonemd/dsset-example.

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
example. IN DS 49842 15 2 B6CDFFD5BEF3146A7FF0302E2374EA4ED121BE106CF7EB452452B821 E92DC173
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
example. 86400 IN NS ns1.example.
2+
example. 86400 IN NS ns2.example.
3+
example. 86400 IN SOA ns1.example. admin.example. 2018031900 1800 900 604800 86400
4+
example. 86400 IN RRSIG NS 15 1 86400 20300101000000 20240101000000 4770 example. zPTka8nomsQJbTV28TSksOVXTE3HPpTlvfE/WyhWhB2eKS3OWhHtJG/6wfRZA6GwwSoO4locWfFYWmpOLLHZDg==
5+
example. 86400 IN RRSIG SOA 15 1 86400 20300101000000 20240101000000 4770 example. svOcT0690Zpm13CcA6hNC216Q5zhR2nnCk0R4gdx/JBVDtInbZykWN8/mouFnZ8aC+trgKzGgSJ4huQDYJuBBQ==
6+
example. 86400 IN RRSIG NSEC 15 1 86400 20300101000000 20240101000000 4770 example. WYDwzq6NEPdqFlfhEUThvDW5X4YHXhbl6LZ4CS3fn1piZhP/li/AYOhOZFKBpgpTL7VGXRftWJoWy5Agvo0gAQ==
7+
example. 86400 IN RRSIG DNSKEY 15 1 86400 20300101000000 20240101000000 49842 example. wiHw5imE5ftrknItKf+GAn2p/ztobwKBKsNkLNnP14R4mZj/JBxdCFM9rx8n5eu2psvymSYbFE+L+M3PxKjIAQ==
8+
example. 3600 IN RRSIG DNSKEY 15 1 3600 20300101000000 20240101000000 49842 example. FWU+Qs3bmhpKuUW4lCwdtrpJR06dW3Vh89MaFZw9OFfTudI6Cley495yuJRuqBxbQeY5TJ8w9lyKPRhQn9KBDw==
9+
example. 86400 IN RRSIG ZONEMD 15 1 86400 20300101000000 20240101000000 4770 example. 9+UeCqpq5SNHcYwM5bS6kKsVz7t/dG37FsStlzO0hfi2GSP7flZKTQkdvHqjm2dzX9sZXom8Sco3vDb3vk1rCQ==
10+
example. 86400 IN NSEC *.example. NS SOA RRSIG NSEC DNSKEY ZONEMD
11+
example. 86400 IN DNSKEY 256 3 15 mOgdbdkEVsD8svnC70BBrmgPFLE/kYGmulOm1T1xJIA=
12+
example. 86400 IN DNSKEY 257 3 15 herJaM2oMFqzpbCzD3nhFdAqFngglSg5qqDclAA6ZYM=
13+
example. 86400 IN ZONEMD 2018031900 1 1 d02eb625c8d5bfe331e4b914ae18cfc3be1cd18d3f441561fab8f59ae0bf2195c9229f029726bf1f4369d861620d9c53
14+
*.example. 777 IN PTR dont-forget-about-wildcards.example.
15+
*.example. 777 IN RRSIG PTR 15 1 777 20300101000000 20240101000000 4770 example. 49tkJ4Q9Q7SP4p0SGMQ6dtlfxnUoQOh1HZbMVfNpSAK++5Kzy7wPjveKlwtKnNbFE3INr1/NXeMHkUsp+IPjBA==
16+
*.example. 86400 IN RRSIG NSEC 15 1 86400 20300101000000 20240101000000 4770 example. 7rZFsNYMP0s/EdM2gZYrEsnvbqnhyt2sfi69urXnJlVss8A/H8U6Sh3DkK4E/RPbAce0eEWVcdiTNUAnGIxvBg==
17+
*.example. 86400 IN NSEC duplicate.example. PTR RRSIG NSEC
18+
duplicate.example. 300 IN TXT "I must be digested just once"
19+
duplicate.example. 300 IN RRSIG TXT 15 2 300 20300101000000 20240101000000 4770 example. Tp/BgGKgWEWPeTt9TGBU5hCymB46otaJZUi5dmTkNpPgwB1XO/ifyXcsKfuk/cZVOSE7FVk4VVkbMY5DA/w5Ag==
20+
duplicate.example. 86400 IN RRSIG NSEC 15 2 86400 20300101000000 20240101000000 4770 example. Zo8ocFr8x04bdgD2xerMSh6zENZXf4K8psGgC+JBTC3svW/ITEtNtqHOcpO4VJM0hF07egDW8l6ldyiuLD4pBg==
21+
duplicate.example. 86400 IN NSEC mail.example. TXT RRSIG NSEC
22+
mail.example. 3600 IN MX 10 mail2.example.
23+
mail.example. 3600 IN MX 20 mail1.example.
24+
mail.example. 3600 IN RRSIG MX 15 2 3600 20300101000000 20240101000000 4770 example. ltCZTP1565PjaLQ1minRaLoTeCr2wVTjjnkSoMPZDDVAGle+Nx9ZjifJwlo33N3tltZUuPDId31yiXvxNyMXBQ==
25+
mail.example. 86400 IN RRSIG NSEC 15 2 86400 20300101000000 20240101000000 4770 example. ToesrgObjOL1wCtlQqZr6xW7h73xnFCtLNWhUIcpbHYcbmqF2ubGPwEvReuc8ZnyhKAAfrrzGDNasat8CcJDCw==
26+
mail.example. 86400 IN NSEC non-apex.example. MX RRSIG NSEC
27+
non-apex.example. 86400 IN RRSIG NSEC 15 2 86400 20300101000000 20240101000000 4770 example. EWzXDr0QDUozh5s0qOgR5UdBCEtJbWTy2DdTfBvqNbVHqSIwxOIXkiWKzgLiX1i6tTzajpkaDc63Q5fUOMFACA==
28+
non-apex.example. 900 IN RRSIG ZONEMD 15 2 900 20300101000000 20240101000000 4770 example. 25uC/CEHR39+44rBWkLOYat+wjsXMQdHoJcDS5t/5/T08VGYdcvG4WfVfkDmWHv833eaqu8kBamM/Dc+aKOgDw==
29+
non-apex.example. 86400 IN NSEC ns1.example. RRSIG NSEC ZONEMD
30+
non-apex.example. 900 IN ZONEMD 2018031900 1 1 616c6c6f776564206275742069676e6f7265642e20616c6c6f776564206275742069676e6f7265642e20616c6c6f7765
31+
ns1.example. 3600 IN A 203.0.113.63
32+
ns1.example. 3600 IN RRSIG A 15 2 3600 20300101000000 20240101000000 4770 example. pkLaJGOE2gInA0B81mGTU0WD3GKMV3f0vensII+AO0rUBzYwwhX4PdEbrKg2Fy2U0XU1t1Ej93/WrkkcYlHLAg==
33+
ns1.example. 86400 IN RRSIG NSEC 15 2 86400 20300101000000 20240101000000 4770 example. 2+UVtROxdUs4MyLz8OjmuYu/QiB9rng8Wqo7Lwp5A1UOEb8ROscQrkJ4tDjZ/LPaX85YL8RbIwXvgf28FcSxCg==
34+
ns1.example. 86400 IN NSEC NS2.example. A RRSIG NSEC
35+
ns2.example. 3600 IN AAAA 2001:db8::63
36+
ns2.example. 3600 IN RRSIG AAAA 15 2 3600 20300101000000 20240101000000 4770 example. bNjm/kEfEf8TLXw3iJ2Y1zYzcrp7WDlUvCbexCdfFQ0tbhHEcY26BYW8y8noJOhX4iXoopOgkPh5lXF3cbP0AQ==
37+
ns2.example. 86400 IN RRSIG NSEC 15 2 86400 20300101000000 20240101000000 4770 example. Pg15bpP0plpg273TqsXgV+dcnv0LzdzhEZ+5DUKPEgJri/kWXpxT2uY+mn5WusAC9ncIn1WwNCt7x8aOkzQfBw==
38+
ns2.example. 86400 IN NSEC sortme.example. AAAA RRSIG NSEC
39+
sortme.example. 3600 IN AAAA 2001:db8::1:65
40+
sortme.example. 3600 IN AAAA 2001:db8::2:64
41+
sortme.example. 3600 IN AAAA 2001:db8::3:62
42+
sortme.example. 3600 IN AAAA 2001:db8::4:63
43+
sortme.example. 3600 IN AAAA 2001:db8::5:61
44+
sortme.example. 3600 IN RRSIG AAAA 15 2 3600 20300101000000 20240101000000 4770 example. PUCqYSxrjiF7e3kFghjTb3FSmcEzo/rkun9LZUBbnm2toRIpOhnz24V1ICXo0LT/W/fiJ+WlLTfJAxqhNFO9Cg==
45+
sortme.example. 86400 IN RRSIG NSEC 15 2 86400 20300101000000 20240101000000 4770 example. fk7spWgAPgn3hq8gU29NmXUmwn6fvLLigvq73KR6+QDlURS5StDAcE8eKcnReQLI+2PNiSwG60WJ1iF0lu5WDw==
46+
sortme.example. 86400 IN NSEC sub.example. AAAA RRSIG NSEC
47+
sub.example. 7200 IN NS ns1.example.
48+
sub.example. 86400 IN RRSIG NSEC 15 2 86400 20300101000000 20240101000000 4770 example. wtugWOeQ4OMv4bDfiJmTAlTAbiQlHrGPAOkLD2B9gWdhN5otC317rPQrq4LzfXcYwJsfgIV5N9lUy3qNGYfTDQ==
49+
sub.example. 86400 IN NSEC UPPERCASE.example. NS RRSIG NSEC
50+
occluded.sub.example. 7200 IN TXT "I'm occluded but must be digested"
51+
uppercase.example. 3600 IN TXT "canonicalize uppercase owner names"
52+
uppercase.example. 3600 IN RRSIG TXT 15 2 3600 20300101000000 20240101000000 4770 example. YC7r7E6vuOSgP1XD0PDREbFPvnS+U9XGWMJ8X7jivKP0J87Otq+nc6u297/BIMoEw8e7GjQZ+onDxDekxKkEDQ==
53+
uppercase.example. 86400 IN RRSIG NSEC 15 2 86400 20300101000000 20240101000000 4770 example. yhddH1aXo0h4aK6T6v3nEo15KsHxdNbTPAc/0p4F/FtWG+vL9Ock6jls7hSGRqxbMPUq3pAhuNLQn7m1UyqeDw==
54+
uppercase.example. 86400 IN NSEC example. TXT RRSIG NSEC
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
; File written on Thu Dec 12 22:05:03 2024
2+
; dnssec_signzone version 9.18.21
3+
example. 86400 IN SOA ns1.example. admin.example. 2018031900 1800 900 604800 86400
4+
example. 86400 IN RRSIG SOA 15 1 86400 20300101000000 20240101000000 4770 example. svOcT0690Zpm13CcA6hNC216Q5zhR2nnCk0R4gdx/JBVDtInbZykWN8/ mouFnZ8aC+trgKzGgSJ4huQDYJuBBQ==
5+
; resign=20300101000000
6+
example. 86400 IN NS ns1.example.
7+
example. 86400 IN NS ns2.example.
8+
example. 86400 IN RRSIG NS 15 1 86400 20300101000000 20240101000000 4770 example. zPTka8nomsQJbTV28TSksOVXTE3HPpTlvfE/WyhWhB2eKS3OWhHtJG/6 wfRZA6GwwSoO4locWfFYWmpOLLHZDg==
9+
; resign=20300101000000
10+
example. 86400 IN NSEC *.example. NS SOA RRSIG NSEC DNSKEY ZONEMD
11+
example. 86400 IN RRSIG NSEC 15 1 86400 20300101000000 20240101000000 4770 example. WYDwzq6NEPdqFlfhEUThvDW5X4YHXhbl6LZ4CS3fn1piZhP/li/AYOhO ZFKBpgpTL7VGXRftWJoWy5Agvo0gAQ==
12+
; resign=20300101000000
13+
example. 86400 IN DNSKEY 256 3 15 mOgdbdkEVsD8svnC70BBrmgPFLE/kYGmulOm1T1xJIA=
14+
example. 86400 IN DNSKEY 257 3 15 herJaM2oMFqzpbCzD3nhFdAqFngglSg5qqDclAA6ZYM=
15+
example. 86400 IN RRSIG DNSKEY 15 1 86400 20300101000000 20240101000000 49842 example. wiHw5imE5ftrknItKf+GAn2p/ztobwKBKsNkLNnP14R4mZj/JBxdCFM9 rx8n5eu2psvymSYbFE+L+M3PxKjIAQ==
16+
; resign=20300101000000
17+
example. 86400 IN ZONEMD 2018031900 1 1 A3B69BAD980A3504E1CFFCB0FD6397F93848071C93151F552AE2F6B1 711D4BD2D8B39808226D7B9DB71E34B72077F8FE
18+
example. 86400 IN RRSIG ZONEMD 15 1 86400 20300101000000 20240101000000 4770 example. 9+UeCqpq5SNHcYwM5bS6kKsVz7t/dG37FsStlzO0hfi2GSP7flZKTQkd vHqjm2dzX9sZXom8Sco3vDb3vk1rCQ==
19+
; resign=20300101000000
20+
occluded.sub.example. 7200 IN TXT "I'm occluded but must be digested"
21+
*.example. 777 IN PTR dont-forget-about-wildcards.example.
22+
*.example. 777 IN RRSIG PTR 15 1 777 20300101000000 20240101000000 4770 example. 49tkJ4Q9Q7SP4p0SGMQ6dtlfxnUoQOh1HZbMVfNpSAK++5Kzy7wPjveK lwtKnNbFE3INr1/NXeMHkUsp+IPjBA==
23+
; resign=20300101000000
24+
*.example. 86400 IN NSEC duplicate.example. PTR RRSIG NSEC
25+
*.example. 86400 IN RRSIG NSEC 15 1 86400 20300101000000 20240101000000 4770 example. 7rZFsNYMP0s/EdM2gZYrEsnvbqnhyt2sfi69urXnJlVss8A/H8U6Sh3D kK4E/RPbAce0eEWVcdiTNUAnGIxvBg==
26+
; resign=20300101000000
27+
non-apex.example. 86400 IN NSEC ns1.example. RRSIG NSEC ZONEMD
28+
non-apex.example. 86400 IN RRSIG NSEC 15 2 86400 20300101000000 20240101000000 4770 example. EWzXDr0QDUozh5s0qOgR5UdBCEtJbWTy2DdTfBvqNbVHqSIwxOIXkiWK zgLiX1i6tTzajpkaDc63Q5fUOMFACA==
29+
; resign=20300101000000
30+
non-apex.example. 900 IN ZONEMD 2018031900 1 1 616C6C6F776564206275742069676E6F7265642E20616C6C6F776564 206275742069676E6F7265642E20616C6C6F7765
31+
non-apex.example. 900 IN RRSIG ZONEMD 15 2 900 20300101000000 20240101000000 4770 example. 25uC/CEHR39+44rBWkLOYat+wjsXMQdHoJcDS5t/5/T08VGYdcvG4WfV fkDmWHv833eaqu8kBamM/Dc+aKOgDw==
32+
; resign=20300101000000
33+
duplicate.example. 300 IN TXT "I must be digested just once"
34+
duplicate.example. 300 IN RRSIG TXT 15 2 300 20300101000000 20240101000000 4770 example. Tp/BgGKgWEWPeTt9TGBU5hCymB46otaJZUi5dmTkNpPgwB1XO/ifyXcs Kfuk/cZVOSE7FVk4VVkbMY5DA/w5Ag==
35+
; resign=20300101000000
36+
duplicate.example. 86400 IN NSEC mail.example. TXT RRSIG NSEC
37+
duplicate.example. 86400 IN RRSIG NSEC 15 2 86400 20300101000000 20240101000000 4770 example. Zo8ocFr8x04bdgD2xerMSh6zENZXf4K8psGgC+JBTC3svW/ITEtNtqHO cpO4VJM0hF07egDW8l6ldyiuLD4pBg==
38+
; resign=20300101000000
39+
NS2.example. 3600 IN AAAA 2001:db8::63
40+
NS2.example. 3600 IN RRSIG AAAA 15 2 3600 20300101000000 20240101000000 4770 example. bNjm/kEfEf8TLXw3iJ2Y1zYzcrp7WDlUvCbexCdfFQ0tbhHEcY26BYW8 y8noJOhX4iXoopOgkPh5lXF3cbP0AQ==
41+
; resign=20300101000000
42+
NS2.example. 86400 IN NSEC sortme.example. AAAA RRSIG NSEC
43+
NS2.example. 86400 IN RRSIG NSEC 15 2 86400 20300101000000 20240101000000 4770 example. Pg15bpP0plpg273TqsXgV+dcnv0LzdzhEZ+5DUKPEgJri/kWXpxT2uY+ mn5WusAC9ncIn1WwNCt7x8aOkzQfBw==
44+
; resign=20300101000000
45+
ns1.example. 3600 IN A 203.0.113.63
46+
ns1.example. 3600 IN RRSIG A 15 2 3600 20300101000000 20240101000000 4770 example. pkLaJGOE2gInA0B81mGTU0WD3GKMV3f0vensII+AO0rUBzYwwhX4PdEb rKg2Fy2U0XU1t1Ej93/WrkkcYlHLAg==
47+
; resign=20300101000000
48+
ns1.example. 86400 IN NSEC NS2.example. A RRSIG NSEC
49+
ns1.example. 86400 IN RRSIG NSEC 15 2 86400 20300101000000 20240101000000 4770 example. 2+UVtROxdUs4MyLz8OjmuYu/QiB9rng8Wqo7Lwp5A1UOEb8ROscQrkJ4 tDjZ/LPaX85YL8RbIwXvgf28FcSxCg==
50+
; resign=20300101000000
51+
mail.example. 3600 IN MX 10 Mail2.Example.
52+
mail.example. 3600 IN MX 20 MAIL1.example.
53+
mail.example. 3600 IN RRSIG MX 15 2 3600 20300101000000 20240101000000 4770 example. ltCZTP1565PjaLQ1minRaLoTeCr2wVTjjnkSoMPZDDVAGle+Nx9ZjifJ wlo33N3tltZUuPDId31yiXvxNyMXBQ==
54+
; resign=20300101000000
55+
mail.example. 86400 IN NSEC non-apex.example. MX RRSIG NSEC
56+
mail.example. 86400 IN RRSIG NSEC 15 2 86400 20300101000000 20240101000000 4770 example. ToesrgObjOL1wCtlQqZr6xW7h73xnFCtLNWhUIcpbHYcbmqF2ubGPwEv Reuc8ZnyhKAAfrrzGDNasat8CcJDCw==
57+
; resign=20300101000000
58+
sub.example. 7200 IN NS ns1.example.
59+
sub.example. 86400 IN NSEC UPPERCASE.example. NS RRSIG NSEC
60+
sub.example. 86400 IN RRSIG NSEC 15 2 86400 20300101000000 20240101000000 4770 example. wtugWOeQ4OMv4bDfiJmTAlTAbiQlHrGPAOkLD2B9gWdhN5otC317rPQr q4LzfXcYwJsfgIV5N9lUy3qNGYfTDQ==
61+
; resign=20300101000000
62+
sortme.example. 3600 IN AAAA 2001:db8::1:65
63+
sortme.example. 3600 IN AAAA 2001:db8::2:64
64+
sortme.example. 3600 IN AAAA 2001:db8::3:62
65+
sortme.example. 3600 IN AAAA 2001:db8::4:63
66+
sortme.example. 3600 IN AAAA 2001:db8::5:61
67+
sortme.example. 3600 IN RRSIG AAAA 15 2 3600 20300101000000 20240101000000 4770 example. PUCqYSxrjiF7e3kFghjTb3FSmcEzo/rkun9LZUBbnm2toRIpOhnz24V1 ICXo0LT/W/fiJ+WlLTfJAxqhNFO9Cg==
68+
; resign=20300101000000
69+
sortme.example. 86400 IN NSEC sub.example. AAAA RRSIG NSEC
70+
sortme.example. 86400 IN RRSIG NSEC 15 2 86400 20300101000000 20240101000000 4770 example. fk7spWgAPgn3hq8gU29NmXUmwn6fvLLigvq73KR6+QDlURS5StDAcE8e KcnReQLI+2PNiSwG60WJ1iF0lu5WDw==
71+
; resign=20300101000000
72+
UPPERCASE.example. 3600 IN TXT "canonicalize uppercase owner names"
73+
UPPERCASE.example. 3600 IN RRSIG TXT 15 2 3600 20300101000000 20240101000000 4770 example. YC7r7E6vuOSgP1XD0PDREbFPvnS+U9XGWMJ8X7jivKP0J87Otq+nc6u2 97/BIMoEw8e7GjQZ+onDxDekxKkEDQ==
74+
; resign=20300101000000
75+
UPPERCASE.example. 86400 IN NSEC example. TXT RRSIG NSEC
76+
UPPERCASE.example. 86400 IN RRSIG NSEC 15 2 86400 20300101000000 20240101000000 4770 example. yhddH1aXo0h4aK6T6v3nEo15KsHxdNbTPAc/0p4F/FtWG+vL9Ock6jls 7hSGRqxbMPUq3pAhuNLQn7m1UyqeDw==
77+
; resign=20300101000000

0 commit comments

Comments
 (0)