Esempio n. 1
0
 private IAsn1Element ParseSequence(Asn1ParsedElement element)
 {
     using (var dataStream = new MemoryStream(element.Data))
     {
         var childElements = Parse(dataStream).ToArray();
         var sequence      = new Sequence(childElements);
         return(sequence);
     }
 }
Esempio n. 2
0
 private IAsn1Element ParseSequence(Asn1ParsedElement element)
 {
     using (var dataStream = new MemoryStream(element.Data))
     {
         var childElements = Parse(dataStream).ToArray();
         var sequence = new Sequence(childElements);
         return sequence;
     }
 }
Esempio n. 3
0
        private static Asn1ParsedElement GetAsn1ParsedElement(BinaryReader reader)
        {
            var  tag    = reader.ReadByte();
            uint length = (uint)reader.ReadByte();

            if (length > 128)
            {
                length = length - 128;
                switch (length)
                {
                case 1:
                    length = reader.ReadByte();
                    break;

                case 2:
                    length = (uint)reader.ReadByte() * 256 + (uint)reader.ReadByte();
                    break;

                case 3:
                    length = (uint)reader.ReadByte() * 256 * 256 + (uint)reader.ReadByte() * 256 + (uint)reader.ReadByte();
                    break;

                case 4:
                    length = (uint)reader.ReadByte() * 256 * 256 * 256 + (uint)reader.ReadByte() * 256 * 256 + (uint)reader.ReadByte() * 256 + (uint)reader.ReadByte();
                    break;

                default:
                    throw new NotImplementedException(
                              "asn elements with more than 4 length bytes are not supported");
                }
            }
            if (length > int.MaxValue)
            {
                throw new NotImplementedException("asn elements with length > int.MaxValue are not supported");
            }
            var data = new byte[length];

            reader.Read(data, 0, (int)length);
            var element = new Asn1ParsedElement()
            {
                Tag = tag, Data = data
            };

            return(element);
        }
Esempio n. 4
0
 private IAsn1Element ParseInteger(Asn1ParsedElement element)
 {
     if (element.Data.Length == 0)
     {
         return(new Integer(new byte[0]));
     }
     if (element.Data[0] == 0)
     {
         if (element.Data.Length == 1)
         {
             return(new Integer(new byte[] { 0 }));
         }
         if (element.Data[1] <= 127)
         {
             return(new Integer(element.Data));
         }
         return(new Integer(element.Data.Skip(1).ToArray()));
     }
     return(new Integer(element.Data));
 }
Esempio n. 5
0
 private IAsn1Element ParseInteger(Asn1ParsedElement element)
 {
     if (element.Data.Length == 0)
     {
         return new Integer(new byte[0]);
     }
     if (element.Data[0] == 0)
     {
         if (element.Data.Length == 1)
         {
             return new Integer(new byte[] { 0 });
         }
         if (element.Data[1] <= 127)
         {
             return new Integer(element.Data);
         }
         return new Integer(element.Data.Skip(1).ToArray());
     }
     return new Integer(element.Data);
 }
Esempio n. 6
0
 private IAsn1Element ParseOctetString(Asn1ParsedElement element)
 {
     return(new OctetString(element.Data));
 }
Esempio n. 7
0
 private static Asn1ParsedElement GetAsn1ParsedElement(BinaryReader reader)
 {
     var tag = reader.ReadByte();
     uint length = (uint) reader.ReadByte();
                 
     if (length > 128)
     {            
         length = length - 128;    
         switch (length)
         {
             case 1:
                 length = reader.ReadByte();
                 break;
             case 2:
                 length = (uint)reader.ReadByte() * 256 + (uint)reader.ReadByte();
                 break;
             case 3:
                 length = (uint)reader.ReadByte() * 256 * 256 + (uint)reader.ReadByte() * 256 + (uint)reader.ReadByte();
                 break;
             case 4:
                 length = (uint)reader.ReadByte() * 256 * 256 * 256 + (uint)reader.ReadByte() * 256 * 256 + (uint)reader.ReadByte() * 256 + (uint)reader.ReadByte();
                 break;
             default:
                 throw new NotImplementedException(
                     "asn elements with more than 4 length bytes are not supported");
         }
     }
     if (length > int.MaxValue)
     {
         throw new NotImplementedException("asn elements with length > int.MaxValue are not supported");
     }
     var data = new byte[length];
     reader.Read(data, 0, (int) length);
     var element = new Asn1ParsedElement() {Tag = tag, Data = data};
     return element;
 }
Esempio n. 8
0
 private IAsn1Element ParseOctetString(Asn1ParsedElement element)
 {
     return new OctetString(element.Data);
 }