public void Test_DER_HighTagNumberForm() 
		{
			Console.WriteLine("TODO");

			// 129 je  (1, 1)_128
			// 16385 je (1, 0, 1)_128
			SimpleASN1TAG t = new SimpleASN1TAG(16385);

			byte[] tmp = DERMethods.MakeTagOctets(t);

			Console.Write("\n16385 => ");
			foreach(byte b in tmp) 
			{
				Console.Write(String.Format("{0}:", b.ToString("X")).PadLeft(3, '0'));
			}

			// 2097153 je (1, 0, 0, 1)_128
			t = new SimpleASN1TAG(2097153);
			tmp = DERMethods.MakeTagOctets(t);

			Console.Write("\n2097153 => ");
			foreach(byte b in tmp) 
			{
				Console.Write(String.Format("{0}:", b.ToString("X")).PadLeft(3, '0'));
			}

			//98238472 

			t = new SimpleASN1TAG(98238472);
			tmp = DERMethods.MakeTagOctets(t);

			Console.Write("\n98238472 (2e, 6c, 00, 08)_128 => ");
			foreach(byte b in tmp) 
			{
				Console.Write(String.Format("{0}:", b.ToString("X")).PadLeft(3, '0'));
			}
			
			Console.WriteLine();
		}
Example #2
0
		private bool MatchWithSimpleTag(SimpleASN1TAG simpleTag) 
		{
			byte[] tmpTagOctets = DERMethods.MakeTagOctets(simpleTag);

			for(int i=0; i<this.lenStart; i++) 
			{
				if (tmpTagOctets[i]!=this.derBytes[i]) { 
					return false;
				}
			}
			return true;
		}
Example #3
0
		public MiddleDERNode(SimpleASN1TAG tag, ArrayList children):base(tag, children) {}
Example #4
0
		public TLVValueNode(SimpleASN1TAG tag, byte[] valueOctets) 
		{
			TAG = tag;
			_ValueOctets = valueOctets;
			innerLength = valueOctets.Length;
		}
Example #5
0
		protected TLVNode(SimpleASN1TAG tag, ArrayList children) 
		{
			TAG = tag;
			Children = children;
		}
		public static byte[] MakeTagOctets(SimpleASN1TAG tag) 
		{
			
			/// treba odrediti koliki je int.
			/// Za ("tagnumber<32") dovoljan je prvi oktet,
			/// (to je 5 raspolozivih bitova)
	
			byte[] returnByteArray;
				
			if (tag.tagValue < 0x1f) 
			{
				returnByteArray = new byte[]{Convert.ToByte(tag.tagValue)};
			}
			else
			{	
				/* nisam siguran da sam ikad usao u ovu granu koda... */
				
				/// high tag number form
				/// zapisan u bazi 128, pocevsi od drugog byte-a.d
				/// Prvi byte je oblika "---1 1111"
				/// Svi osim zadnjeg od drugog nadalje su oblika
				/// "0--- ----"
				/// Zadnji je oblika
				/// "1--- ----"
				/// 

				/// Zasad pretpostavljam da je tag number MaxInt
				int ulazTagNumber = tag.tagValue;

				ArrayList b = new ArrayList();
				
				//HACK: jednom to ljepse srediti..
				b.Insert(0, Convert.ToByte((ulazTagNumber & 0x0000007f) | 0x80));  // ovo je zadnji...
				b.Insert(0, Convert.ToByte((ulazTagNumber>> 7) & (0x7f))); 
				b.Insert(0, Convert.ToByte((ulazTagNumber>>14) & (0x7f)));
				b.Insert(0, Convert.ToByte((ulazTagNumber>>21) & (0x7f)));
				b.Insert(0, Convert.ToByte((ulazTagNumber>>28) & (0x7f)));
				
				while ((byte)b[0]==0)  
				{
					b.RemoveAt(0);
				}

				b.Insert(0, (byte)0x1f);


				// Ovo je najjednostavniji nacin - koliko znam - za prepisati
				// ArrayList u odgovarajuce polje.
				returnByteArray = b.ToArray(typeof(byte)) as byte[];
			}

			
			/// apply encoding class number:
	
			returnByteArray[0] |= (byte) tag.encodingClass;

			if (tag.ConstructedBitOn) 
			{
				returnByteArray[0]|= (byte) 0x20;
			}

			return returnByteArray;
		}
Example #7
0
		public override SimpleASN1TAG ExtractSimpleOuterTag() 
		{
			SimpleASN1TAG returnTag;

			//TODO:
			returnTag = new SimpleASN1TAG(t, this.encodingClass); //+ ContextDependent

			return returnTag;
		}