Fix (*HINFO).len() and HINFO canonicalization in rawSignatureData

This commit is contained in:
Filippo Valsorda 2015-10-05 14:37:42 +01:00
parent 9a6a6448f5
commit e9635cc83b
3 changed files with 19 additions and 5 deletions

View File

@ -638,6 +638,9 @@ func rawSignatureData(rrset []RR, s *RRSIG) (buf []byte, err error) {
x.Target = strings.ToLower(x.Target)
case *DNAME:
x.Target = strings.ToLower(x.Target)
case *HINFO:
x.Os = strings.ToLower(x.Os)
x.Cpu = strings.ToLower(x.Cpu)
}
// 6.2. Canonical RR Form. (5) - origTTL
wire := make([]byte, r1.len()+1) // +1 to be safe(r)

View File

@ -171,6 +171,17 @@ func TestSignVerify(t *testing.T) {
srv.Weight = 800
srv.Target = "web1.miek.nl."
hinfo := &HINFO{
Hdr: RR_Header{
Name: "miek.nl.",
Rrtype: TypeHINFO,
Class: ClassINET,
Ttl: 3789,
},
Cpu: "X",
Os: "Y",
}
// With this key
key := new(DNSKEY)
key.Hdr.Rrtype = TypeDNSKEY
@ -194,12 +205,12 @@ func TestSignVerify(t *testing.T) {
sig.SignerName = key.Hdr.Name
sig.Algorithm = RSASHA256
for _, r := range []RR{soa, soa1, srv} {
if sig.Sign(privkey.(*rsa.PrivateKey), []RR{r}) != nil {
t.Error("failure to sign the record")
for _, r := range []RR{soa, soa1, srv, hinfo} {
if err := sig.Sign(privkey.(*rsa.PrivateKey), []RR{r}); err != nil {
t.Error("failure to sign the record:", err)
continue
}
if sig.Verify(key, []RR{r}) != nil {
if err := sig.Verify(key, []RR{r}); err != nil {
t.Error("failure to validate")
continue
}

View File

@ -260,7 +260,7 @@ func (rr *HINFO) copy() RR { return &HINFO{*rr.Hdr.copyHeader(), rr.Cp
func (rr *HINFO) String() string {
return rr.Hdr.String() + sprintTxt([]string{rr.Cpu, rr.Os})
}
func (rr *HINFO) len() int { return rr.Hdr.len() + len(rr.Cpu) + len(rr.Os) }
func (rr *HINFO) len() int { return rr.Hdr.len() + len(rr.Cpu) + 1 + len(rr.Os) + 1 }
type MB struct {
Hdr RR_Header