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(); }
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; }
public MiddleDERNode(SimpleASN1TAG tag, ArrayList children):base(tag, children) {}
public TLVValueNode(SimpleASN1TAG tag, byte[] valueOctets) { TAG = tag; _ValueOctets = valueOctets; innerLength = valueOctets.Length; }
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; }
public override SimpleASN1TAG ExtractSimpleOuterTag() { SimpleASN1TAG returnTag; //TODO: returnTag = new SimpleASN1TAG(t, this.encodingClass); //+ ContextDependent return returnTag; }