On Wed, Feb 22, 2017 at 5:26 PM, Peter Todd wrote: > > A commitment scheme needs only have the property that it's not feasible to > find > two messages m1 and m2 that map to the same commitment; it is *not* > required > that it be difficult to find m given the commitment. Equally, it's not > required > that commitments always be the same size. > So a perfectly reasonable thing to do is design your scheme such that the > commitment to short messages is the message itself! This adds just a > single bit > of data to the minimum serialized size(1) of the commitment, and in > situations > where sub-digest-sized messages are common, may overall be a savings. > Yes I'm basically doing that but to make things be all the same size I'm including the bit inline, sacrificing one bit of security. Actually I'm sacrificing two bits of security, to allow for four values: terminal, middle, empty, and invalid. Invalid is used internally when a value has yet to be calculated lazily and in proofs to mean 'this is a middle node but the children are not included'. One effect of this is that the root of a set containing a single value is just that value with the two high order bits of the first byte reset to the appropriate value.