About 10-11 months back I'd posted the question regarding BER encoding of OID's, and now I am back, since some doubts are.

How do I decode the following octet string, using the explanation of the encoding rules as specified in X.690.

06 0c 2a 86 3a 00 89 61 33 01 00 01 00 01

I'll write here, how far I manage to do it...

Tag = 0x06
Length = 0xc (12), count of folliowing value octets
Value = {
2a = 1.2.
86 = 6.
3a = 58.
00 = 0.
89 = (10001001)2 ??? (I thought that the MSbit could be one, only for the terminal octet!!) 61 = (01100001)2 ? (.. so is this octet related to the previous one, the one above in this list ? if so, how ?)
33 = 51. ??
01 = 1. ??
00 = 0. ??
01 = 1. ??
00 = 0. ??
01 = 1. ??
}

I think this list doesn't permit HTML formatting, which is sad, because I'd colour coded the text to explain the issue in more clear terms. To me the problem is in the octet's with value 89 onwards... since it has the MSBit set. According to the explanation in X.690 & Olivier Dubuisson's books, the MSBit = 1, would occur only once ??? (Or, that's what I understood).

The difficulty is that you are misinterpreting the octets with the high order bit set. Please bear in mind that the nodes of an OID can be very large numbers and so there needs to be a way to specify the length. One could have, of course, designed it such that each node would be preceded by a length field, but that's a lot of wasted bits.

Instead since the numbers tend to be small, the method chosen is one where the high bit specifies whether (0) this is the last octet or (1) more are coming. That is, only the least significant 7 bits of each octet represent the value. The high bit, so to speak, specifies the length. By way of example (you might find the breakouts easier to read if you set this to some fixed font)

01    0xxx xxxx            this is the final octet
      x000 0001            value is 1

863A  1xxx xxxx xxxx xxxx  another octet follows
      xxxx xxxx 0xxx xxxx  this is the final octet
      x000 0110 x011 1010  these 14 bits specify the value (826)

If you squeeze out the x's and use hex representation, you'll have

        00 0011 0011 1010  033A which is 826.

You can therefore, by examining the high-order bits, see that you have the following nodes

2a       1.2
863a     826
00         0
8961    1249
33        51
01         1
00         0
01         1
00         0
01         1


=====================================================================
Conrad Sigona                    Voice Mail     : 1-732-302-9669 x400
OSS Nokalva                      Fax            : 1-614-388-4156
[EMAIL PROTECTED]                   My direct line : 1-315-845-1773
_______________________________________________
Asn1 mailing list
[email protected]
http://lists.asn1.org/mailman/listinfo/asn1

Reply via email to