Fix the unknown record sign test

Don't make up new error in msg.Pack when there are perfectly fine
errors to return.
This commit is contained in:
Miek Gieben 2013-12-06 09:43:26 +00:00
parent 6c9cc37ac3
commit 70ee966106
4 changed files with 27 additions and 26 deletions

View File

@ -244,9 +244,9 @@ func (rr *RRSIG) Sign(k PrivateKey, rrset []RR) error {
return err
}
signdata = signdata[:n]
wire := rawSignatureData(rrset, rr)
if wire == nil {
return ErrSigGen
wire, err := rawSignatureData(rrset, rr)
if err != nil {
return err
}
signdata = append(signdata, wire...)
@ -356,9 +356,9 @@ func (rr *RRSIG) Verify(k *DNSKEY, rrset []RR) error {
return err
}
signeddata = signeddata[:n]
wire := rawSignatureData(rrset, rr)
if wire == nil {
return ErrSigGen
wire, err := rawSignatureData(rrset, rr)
if err != nil {
return err
}
signeddata = append(signeddata, wire...)
@ -628,16 +628,16 @@ func dsaToBuf(_Q, _P, _G, _Y *big.Int) []byte {
type wireSlice [][]byte
func (p wireSlice) Len() int { return len(p) }
func (p wireSlice) Len() int { return len(p) }
func (p wireSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
func (p wireSlice) Less(i, j int) bool {
_, ioff, _ := UnpackDomainName(p[i], 0)
_, joff, _ := UnpackDomainName(p[j], 0)
return bytes.Compare(p[i][ioff+10:], p[j][joff+10:]) < 0
}
func (p wireSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
// Return the raw signature data.
func rawSignatureData(rrset []RR, s *RRSIG) (buf []byte) {
func rawSignatureData(rrset []RR, s *RRSIG) (buf []byte, err error) {
wires := make(wireSlice, len(rrset))
for i, r := range rrset {
r1 := r.copy()
@ -685,10 +685,10 @@ func rawSignatureData(rrset []RR, s *RRSIG) (buf []byte) {
x.Target = strings.ToLower(x.Target)
}
// 6.2. Canonical RR Form. (5) - origTTL
wire := make([]byte, r.len()*2) // TODO(mg): *2 ?
wire := make([]byte, r1.len()*2) // TODO(mg): *2 ?
off, err1 := PackRR(r1, wire, 0, nil, false)
if err1 != nil {
return nil
return nil, err1
}
wire = wire[:off]
wires[i] = wire
@ -697,7 +697,7 @@ func rawSignatureData(rrset []RR, s *RRSIG) (buf []byte) {
for _, wire := range wires {
buf = append(buf, wire...)
}
return
return buf, nil
}
// Map for algorithm names.

View File

@ -197,19 +197,19 @@ func TestSignVerify(t *testing.T) {
}
}
func test65534(t *testing.T) {
func Test65534(t *testing.T) {
t6 := new(RFC3597)
t6.Hdr = RR_Header{"miek.nl.", 65534, ClassINET, 14400, 0}
t6.Rdata = `\# 505D8700001`
t6.Rdata = "505D870001"
key := new(DNSKEY)
key.Hdr.Rrtype = TypeDNSKEY
key.Hdr.Name = "miek.nl."
key.Hdr.Rrtype = TypeDNSKEY
key.Hdr.Class = ClassINET
key.Hdr.Ttl = 14400
key.Flags = 256
key.Protocol = 3
key.Algorithm = RSASHA256
privkey, _ := key.Generate(512)
privkey, _ := key.Generate(1024)
sig := new(RRSIG)
sig.Hdr = RR_Header{"miek.nl.", TypeRRSIG, ClassINET, 14400, 0}
@ -218,7 +218,7 @@ func test65534(t *testing.T) {
sig.OrigTtl = t6.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.KeyTag = key.KeyTag()
sig.SignerName = key.Hdr.Name
sig.Algorithm = RSASHA256
if err := sig.Sign(privkey, []RR{t6}); err != nil {
@ -230,8 +230,9 @@ func test65534(t *testing.T) {
t.Log(err)
t.Log("Failure to validate")
t.Fail()
} else {
t.Logf("Validated: %s\n", t6.Header().Name)
}
t.Logf("Validated: %s\n", t6.Header().Name)
}
func TestDnskey(t *testing.T) {

14
msg.go
View File

@ -653,9 +653,9 @@ func packStructValue(val reflect.Value, msg []byte, off int, compression map[str
default:
return lenmsg, &Error{"bad tag packing string: " + val.Type().Field(i).Tag.Get("dns")}
case `dns:"base64"`:
b64, err := packBase64([]byte(s))
if err != nil {
return lenmsg, &Error{err: "overflow packing base64"}
b64, e := packBase64([]byte(s))
if e != nil {
return lenmsg, e
}
copy(msg[off:off+len(b64)], b64)
off += len(b64)
@ -674,9 +674,9 @@ func packStructValue(val reflect.Value, msg []byte, off int, compression map[str
msg[off-1] = 20
fallthrough
case `dns:"base32"`:
b32, err := packBase32([]byte(s))
if err != nil {
return lenmsg, &Error{err: "overflow packing base32"}
b32, e := packBase32([]byte(s))
if e != nil {
return lenmsg, e
}
copy(msg[off:off+len(b32)], b32)
off += len(b32)
@ -686,7 +686,7 @@ func packStructValue(val reflect.Value, msg []byte, off int, compression map[str
// There is no length encoded here
h, e := hex.DecodeString(s)
if e != nil {
return lenmsg, &Error{err: "overflow packing hex"}
return lenmsg, e
}
if off+hex.DecodedLen(len(s)) > lenmsg {
return lenmsg, &Error{err: "overflow packing hex"}

View File

@ -1197,7 +1197,7 @@ func (rr *RFC3597) String() string {
}
func (rr *RFC3597) len() int {
return rr.Hdr.len() + len(rr.Rdata)/2
return rr.Hdr.len() + len(rr.Rdata)/2 + 2
}
type URI struct {