id,summary,reporter,owner,description,type,status,priority,milestone,component,version,resolution,keywords,cc 60,add extension room in furls,Brian Warner,Brian Warner,"Zooko pointed out that we would benefit in the long run by adding some extension-tolerance into the current release of foolscap. Specifically, there are certain places in the FURL that could be extended in the future if we were to make the next release ignore the extensions: * tubid: allow use of other hash algorithms, by extending the definition of the tubid field. * for 0.2.6, we declare that we'll read the first 32 characters of the tubid, assert that they are valid base32 characters, treat them as a tubid, '''and ignore the rest of the string''' * in the future, we can allow the tubid to be a comma-separated list of tubid hashes, and we can declare a format like 'sha256d.abcdef' to indicate the use of a different hash. When we actually start implementing this, we need to be careful to not open up protocol-rollback attacks or other vulneratibilities that result from two different versions of the code interpreting the string differently. In particular, the client should probably assert that '''all''' given hashes match, rather than just a single one. * during a transition period, host which wish their FURLs to be useable by 0.2.6 clients (and also want to provide better security for newer clients) must make sure to put the undecorated sha1 hash first. * connection hints: allow the use of other protocols, by adding elements to the connection hints * split the connection hints field on commas, then look for anything that matches host:port, i.e. {{{^([^:]+):(\d+)$}}} . Ignore anything that doesn't match this. * I'd like to accept IPv6 addresses too, which means if the leading character is {{{[}}}, then expect to see {{{]:(\d+)$}}} . * In the future, we can add host:port:protocol, and trigger on the presence of three colons. Or, we could do protocol:host:port, but that is slightly harder to distinguish. * Zooko is interested in alternative protocols with fewer roundtrips, and possibly UDP based instead of TCP. For example, if the tub had an ECDSA public key (perhaps instead of the tubid), then we could use a "":udp"" protocol that encrypts the method name and arguments and performs the entire request in a single roundtrip (with suitable replay protection, which might require the maintenance of some local persistent state). In general, I'm not completely convinced that useful changes can be made within the limits that we establish on the format now, but from what I can tell we don't lose or risk anything by making these changes now. ",enhancement,closed,major,0.2.6,unknown,0.2.5,fixed,furl,