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:
parent
6c9cc37ac3
commit
70ee966106
24
dnssec.go
24
dnssec.go
|
@ -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.
|
||||
|
|
|
@ -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
14
msg.go
|
@ -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"}
|
||||
|
|
Loading…
Reference in New Issue