On Sun, Jan 16, 2005 at 10:57:56AM +0100, Simon Josefsson wrote: > Adam Back <adam@xxxxxxxxxxxxxxx> writes: > > > There was towards end of last year some discussion about big stamps > > being ugly. So I implemented the previously unimplemented -Z option > > to allow stamp compression and released as 1.15: > > Thanks! > > Perhaps a silly question, but will older versions understand the new > tokens? Yes. Verifying stamps is much simpler -- just hash the stamp and count the number of lsbits which are set to zero. > The slowdown is somewhat painful, though. I have changed from 23 bits > tokens to 21 bits by default. > [...] > I'd like to make the shortest header format the default in Gnus, but > if it is 2-4 times slower (which my benchmarks suggest, depending on > compile flags) I don't think it is reasonable. It is a bit better if you build with openSSL as you then benefit from the assembler SHA1 library (rather than the pure C SHA1 library included with hashcash). To do this do: make x86 CFLAGS=-DOPENSSL -LDFLAGS=-lcrypto There is scope to adapt Jonathan's fastmint code directly to make compact stamps, just more complicated, so I may make that change in future. I believe Jonathan estimated it should be only around 15% slower if done that way, and I think this slow down would be acceptable. > I was hoping the header size decrease could be achieved by simply > changing formatting somehow, instead of changing the internal hashing > mechanism. Make > > hashcash token: 1:20:050116:foo::r8TXV8BUV1CkoBcP:2xkK > > be equivalent to > > hashcash token: 1:20:050116:foo::r8TXV8BUV1CkoBcP:000000000000002xkK > > i.e., remove leading zeros. > > Can't this be done without changing the hash computation? Even if you > are willing to drop backwards compatibility? Well if one is willing to require some lossless compression pre-processing before minting and corresponding decompression prior to verification yes and one could do that without sacrificing any speed. However it will drop backwards compatibility. I think keeping backwards compatibility is more important. Especially as most of the speed loss can be recovered by adapting the fastmint code instead of falling back to the sha1 library. Try 1.16 -- it has -Z2 implemented (the -Z2 is the same as -Z1 in 1.15). Adam