/// <summary>
		/// Read values from BER code. Inherited by 
		/// ASN.1's string types.
		/// </summary>
		/// <param name="ulazBER">BER encoded input</param>
		public override void fromBER(BEREncoding ulazBER) 
		{
			ulazBER.Decode();
			
			foreach (BEREncoding objBER in ulazBER.Decompose() ) 
			{
				Byte[] tmpByteArray = objBER.GetContents();
				int len             = tmpByteArray.Length;

				// --------------------------------------------------
				
				Char[] tmpCharArray = new Char[len];
				for(int i=0; i<len; i++) 
				{
					tmpCharArray[i]=Convert.ToChar(tmpByteArray[i]);     
				}														 
 
				this.StringValue += new String(tmpCharArray);
				
				// --------------------------------------------------
			}

			this.CheckString();
		}
Exemple #2
0
		/// <summary>
		///  ovo sam zasrao. Ovo mora ici u ASN1SetOf.fromBER()
		/// </summary>
		/// <param name="ulazBER"></param>
		/// <returns></returns>
		public override ASN1Object CreateInstance(BEREncoding ulazBER)
		{
			ASN1SetOf setOfObject = this.Instance() as ASN1SetOf;
			ulazBER.Decode();

			foreach(BEREncoding ber in ulazBER.Decompose()) 
			{
				setOfObject.Add(this.type.CreateInstance(ber));
			}
			
			/// Dolazak ovdje predstavlja gresku!
			return setOfObject;
		}
Exemple #3
0
		public virtual ASN1SetOf SubCreateInstance(ASN1SetOf setOfObject, BEREncoding ulazBER) 
		{
			/// ovo treba baciti u .fromBER od setOfObject-a !!!!!
			ulazBER.Decode();

			foreach(BEREncoding ber in ulazBER.Decompose()) 
			{
				setOfObject.Add(this.type.CreateInstance(ber));
			}
			
			/// Dolazak ovdje predstavlja gresku!
			return setOfObject;
		}
Exemple #4
0
		public override void fromBER(BEREncoding ulazBER)
		{

			/// OVO TREBA TESTIRATI!!!

			ulazBER.Decode();

			/* FIXME: Dizi exception ako je 'type==null' */

			foreach(BEREncoding ber in ulazBER.Decompose()) 
			{
				this.Add(this.type.CreateInstance(ber));
			}
				
		}
		public override ASN1Object CreateInstance(BEREncoding ulazBER)
		{
			ASN1SequenceOf asnseqof = this.Instance() as ASN1SequenceOf;


			ArrayList BERLista = new ArrayList(ulazBER.Decompose());

			/// sad imam listu BERova. 
			/// za svaki BER treba kreirati odgovarajuci objekt.
			
			ASN1Object tmpasn;

			foreach (BEREncoding tmpBER in BERLista) 
			{
				/// kreiranje odgovarajuceg objekta...
				tmpasn = type.CreateInstance(tmpBER);

				/// dodavanje objekta u SequenceOf-ov niz objekata.
				asnseqof.Add(tmpasn);				
			}

			return asnseqof;
		}
		public override void fromBER(BEREncoding ulazBER)
		{
			object[] tmpObj = ulazBER.Decompose();

			for (int i=0 ; i < tmpObj.Length; i++) 
			{
				BEREncoding ber = (tmpObj[i] as BEREncoding);
				ASN1Object ob = this.type.CreateInstance(ber);
		
				this.Add(ob);
			}
		}
		public override void fromBER(BEREncoding ulazBER) 
		{
			/// BER vraca niz BER kodova koji se 
			/// lako dekodiraju. Bitna stvar ovdje je
			/// provjeriti adekvatnost BER-a i "trenutnog" tipa:
			///     Ako BER ne odgovara ocekivanom tipu moze biti
			///     da je tip bio oznacen sa OPTIONAL ili DEFAULT.
			///  Ako je OPTIONAL, preskocimo tip i pokusamo sa 
			///  sljedecim tipom. Ako je DEFAULT, stavimo na odgovarajuce
			///  mjesto referencu na DefaultValue i u istoj 
			///  iteraciji petlje pokusamo za sljedeci tip.
		
			BEREncoding[] berArray = ulazBER.Decompose();
			BEREncoding   ber;

			ASN1ComponentTypeInfo currentTypeInfo;
		 
		
			
			int i=0,  /// i je indeks trenutnog BER koda
                j=0;  /// j je indeks trenutne komponente
					  ///  Vrijedi:   i <= j.

																		/*
						 ___        ___
			            |  0|      |  0|   
			            |___|      |___|
			     i -->  |  1|      |  1|   
			            |___|      |___|
			            |  2|      |  2| <--  j
			            |___|      |___|
						|  3|      |  3|
						       ...
																		*/

			
			// iteriraj po svim dobivenim ber-ovima.

			#region 1. Petlja po dobivenim ber-ovima
			for ( ; i < berArray.Length; i++, j++) 
			{
				ber = berArray[i];
				currentTypeInfo  = this.ComponentTypes[j];
				 

				int tag = BEREncoding.DecodeTagNumber(ber.GetIdOctets());

				/// Probaj Match-ati tag i currentTypeInfo.Type.Tag
				
				try
				{
					while (CheckThisShitUpBitch(tag, j, currentTypeInfo))
					{
						/// ako TAG ne odgovara trenutnoj komponenti, pokusaj povezati
						/// trenutni BER sa nekom od sljedecih komponenata. 
						/// 
						/// Dok skipas,
						/// provjeri da li ovaj SEQUENCE tip dozvoljava skipanje
						/// (tj. da li je komponenta markirana sa
						/// DEFAULT ili OPTIONAL)
						if(currentTypeInfo.DefaultValue != null) 
						{
							this.Components[j] = currentTypeInfo.DefaultValue;
						}
						else if (currentTypeInfo.isOptional) 
						{
							 
						}
//						else if (currentTypeInfo.DefaultValue != null)
//						{
//							this.Components[j] = currentTypeInfo.DefaultValue;
//						}
						else
						{
							throw new Exception ("A type that was not marked as optional is missing");
						}

//						j++;
//						currentTypeInfo = this.ComponentTypes[j];


						currentTypeInfo  = this.ComponentTypes[++j];
					}
				}
				catch (System.IndexOutOfRangeException) 
				{
					/* -- to znaci da je puklo pri 'skipanju' optionalnih tipova.
					 *    Moglo bi se zakljuciti da nedostaje odgovarajuci tip.
					 */
					Console.WriteLine("indeks j je pobjegao van");
					throw new Exception("Indeks j u ASN1Sequence.fromBER je pobjegao");
				}
				finally {}
				
				this.Components[j] = currentTypeInfo.CreateInstance(ber);
			
			}
			#endregion

			
			#region 2. Provjeri da li (ako) fale tipovi markirani sa DEFAULT ili OPTIONAL

			for ( ; j < this.numOfComponents; j++ ) 
			{
				/// Vise nemam BER ova, ali ako uopce 
				/// dodje do izvrsavanja ove petlje znaci da
				/// je ostalo neinicijaliziranih polja ovog tipa.
				/// Ako su polja optional - to nije problem. No - ako su 
				/// to bila Default polja DER kodiranja, te komponente treba
				/// inicijalizirati.
				/// 

				currentTypeInfo = this.ComponentTypes[j];
			 
			
				if (currentTypeInfo.isOptional) 
				{
				}
				else 
				{
					if (currentTypeInfo.DefaultValue != null)  
					{
						this.Components[j] = currentTypeInfo.DefaultValue;
					}
					else 
					{
						//FIXME
						throw new Exception("A type is missing (not default, not optional)");
					}
				 }
			}
			#endregion

			this.RegisterComponents();
		}