code: func responseAuthenticator(rp *radiusPacket, requestAuthenticator *radiusAuthenticator, secret string) (*radiusAuthenticator, error) {
  	hash := md5.New()
  	hash.Write([]byte{byte(rp.Code), byte(rp.Identifier)})
  	if err := binary.Write(hash, binary.BigEndian, rp.Length); err != nil {
  		return nil, err
  	}
  	hash.Write(requestAuthenticator[:])
  	for _, ra := range rp.attributes {
  		hash.Write(ra.encode())
  	}
  	hash.Write([]byte(secret))
  	h := hash.Sum(nil)
  	var authenticator radiusAuthenticator
  	copy(authenticator[:], h[:])
  	return &authenticator, nil
  }
docs: // responseAuthenticator calculates the response authenticator for a RADIUS
  // response packet, as per RFC2865 section 3.