I really don't know why ASN.1 BER winds me up so much, but every time I end up doing anything with it, it annoys me.
I think it may be the way it is based on telco standards not Internet standards. I have use ITU-T and ETSI based stuff in many jobs, as well as many RFC based stuff, and the IETF based standards are always so much easier to deal with.
One of this things that always drives me round the bend is when standards refer to bits as 8-1, not 7-0 (or worse, 1-8). There is only one sensible way to number a bit in a word, and that is with the power of 2 that its numeric value represents. Bits in a byte are 7-0, with values 128 to 1 respectively (2^7 to 2^0).
Essentially ASN.1 is a good idea. It has syntax that allows all values to be parsed even if you have no idea what the values are, and so allows extra values to be skipped or rejected. This is the very basis of extensible languages (like XML). The best types of extensible languages are ones where unknown types include a bit that says "comprehension required", so you know you have to know that data object or it is safe to ignore it. ASN.1 lacks that.
ASN.1 also has a machine processable syntax for the definition and hence knowing what objects exist, much like MIBs for SNMP (which also use ASN.1 BER), so this allows a meta data level to be processed in an automatic way.
But still, something about ASN.1 BER seems to bug me, and I am not 100% sure what. It is not as if the functions to parse and generate it are at all complex, really.
Latest job is a very simple and light weight LDAP server with mysql back end. Yes, openldap does this as do some others, but I am after something very simple, or rather MikeB is, who is hassling me. Should be simple enough to do.