Penguin

Differences between current version and predecessor to the previous major change of ASN.1.

Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History

Newer page: version 6 Last edited on Friday, August 20, 2004 8:55:26 am by JohnMcPherson
Older page: version 2 Last edited on Monday, September 1, 2003 9:44:56 am by PerryLorier Revert
@@ -1,3 +1,66 @@
-An [ISO]/[ITU-T] standard for transmitting structured data on networks. 
+An [ISO]/[ITU-T]/[CCITT ] standard for transmitting structured data on networks. 
  
-Used by [SSL] Certificates, [SNMP], [LDAP], and [IBM] Protocols. 
+Used by [SSL] Certificates, and many protocols such as [SNMP], [LDAP], various [IBM] Protocols, Z39.50, etc.  
+  
+ASN.1 is a standard for transmitting structured binary data over networks. ASN.1 also is a grammer that can be used to define PDU's to be sent over a network. It's frequently seen as [SNMP] [MIB]s.  
+  
+ASN.1 is made up of "encoding" of some chunk of data. An encoding is either:  
+  
+|Identifier Octets|Length Octets|Contents  
+(called the "Definite form")  
+  
+or  
+  
+|Identifier Octets|Length Octets|Contents|End of contets octets  
+(called the "Indefinite form")  
+  
+Definate form is in general used when you know the size of something before hand, indefinate form is used when the size of what you are encoding is unknown.  
+  
+The Identifier Octets are built up like so:  
+|1|2|3|4|5|6|7|8  
+||Class|Constructed|||||Tag  
+  
+where class is  
+|Value|Class  
+|00b|Universal  
+|01b|Application  
+|10b|Context specific  
+|11b|Private  
+  
+If constructed is 1, then it means that this is a constructed type, not a primative one.  
+  
+The tag says which type it is, if the tag is under <=31, then it's value is used directly, otherwise the tag bits above are set to "11111" and then a sequence of octets that represent the number. The 8th bit of each octet is set to 1 to mean "more octets after this one". The low bits are the 7 bits of the tag, MSB first.  
+  
+"Choice" values encode which choice was taken directly into the tag bits. I don't know why.  
+  
+In definate encodings, if the 8th bit is , then it's a "short" encoding of the length, and the length is the lower 7 bits. If the 8th bit is set, and the lower 7 bits are how many __octets__ are used to encode the length(!). This allows for lengths up to 2**1008. The lower 7 bits being set is reserved for future expansion.  
+  
+End of contents is encoded as  
+|Type|Length|Value  
+|00|00| Absent  
+  
+Boolean is encoded as an octet, 0 for false, non-zero for true.  
+Integers are encoded as a sequence of bytes, [MSB] first.  
+Sequences are encoded as a series of encodings.  
+  
+Encodings:  
+|Number|Name  
+|Universal |Reserved for encoding rules  
+|Universal 1|Boolean  
+|Universal 2|Integer  
+|Universal 3|Bitstring  
+|Universal 4|Octet String  
+|Universal 5|Null type  
+|Universal 6|Object identifier type  
+|Universal 7|Object descriptor type  
+|Universal 8|External type/Instance of type  
+|Universal 9|Real  
+|Universal 10|Enumerated Type  
+|Universal 11|Embedded PDV (Presentation Data Value) Type  
+|Universal 12-15|Reserved  
+|Universal 16|Sequence/Sequence-of types  
+|Universal 17|Set/Set-of types  
+|Universal 18-22|Charactor String types  
+|Universal 23-24|Time types  
+|Universal 25-30|Charactor String types  
+|Universal 31-. .|Reserved