Example #1
0
 /// <summary>
 /// Retrieve PEM file heading.
 /// </summary>
 /// <param name="fileName">source file name.</param>
 /// <returns>heading string.</returns>
 public static string GetPemFileHeader(string fileName)
 {
     try
     {
         FileStream fs   = new FileStream(fileName, FileMode.Open);
         byte[]     data = new byte[fs.Length];
         fs.Read(data, 0, data.Length);
         fs.Close();
         string dataStr = Asn1Util.BytesToString(data);
         return(GetPemHeader(dataStr));
     }
     catch
     {
         return("");
     }
 }
        public void LoadPemData(string fileName)
        {
            FileStream fileStream = new FileStream(fileName, FileMode.Open);

            byte[] numArray = new byte[fileStream.Length];
            fileStream.Read(numArray, 0, numArray.Length);
            fileStream.Close();
            string pemStr = Asn1Util.BytesToString(numArray);

            if (!Asn1Util.IsPemFormated(pemStr))
            {
                throw new Exception("It is a invalid PEM file: " + fileName);
            }
            Stream stream = Asn1Util.PemToStream(pemStr);

            stream.Position = 0L;
            this.LoadData(stream);
        }
Example #3
0
        /// <summary>
        /// Check if a file is PEM formated.
        /// </summary>
        /// <param name="fileName">source file name.</param>
        /// <returns>true:Yes, false:No.</returns>
        public static bool IsPemFormatedFile(string fileName)
        {
            bool retval = false;

            try
            {
                FileStream fs   = new FileStream(fileName, System.IO.FileMode.Open);
                byte[]     data = new byte[fs.Length];
                fs.Read(data, 0, data.Length);
                fs.Close();
                string dataStr = Asn1Util.BytesToString(data);
                retval = IsPemFormated(dataStr);
            }
            catch
            {
                retval = false;
            }
            return(retval);
        }
Example #4
0
        /// <summary>
        /// Load PEM formated file.
        /// </summary>
        /// <param name="fileName">PEM file name.</param>
        public void LoadPemData(string fileName)
        {
            FileStream fs = new FileStream(fileName, FileMode.Open);

            byte[] data = new byte[fs.Length];
            fs.Read(data, 0, data.Length);
            fs.Close();
            string dataStr = Asn1Util.BytesToString(data);

            if (Asn1Util.IsPemFormated(dataStr))
            {
                Stream ms = Asn1Util.PemToStream(dataStr);
                ms.Position = 0;
                LoadData(ms);
            }
            else
            {
                throw new Exception("It is a invalid PEM file: " + fileName);
            }
        }
Example #5
0
        public string GetLabel(uint mask)
        {
            string str1 = "";
            string str2 = ((int)mask & 4) == 0 ? (((int)mask & 8) == 0 ? string.Format("({0},{1})", (object)this.dataOffset, (object)this.dataLength) : string.Format("({0},{1},{2})", (object)this.tag, (object)this.dataOffset, (object)this.dataLength)) : (((int)mask & 8) == 0 ? string.Format("(0x{0:X6},0x{1:X4})", (object)this.dataOffset, (object)this.dataLength) : string.Format("(0x{0:X2},0x{1:X6},0x{2:X4})", (object)this.tag, (object)this.dataOffset, (object)this.dataLength));
            string str3;

            switch (this.tag)
            {
            case 2:
                if (((int)mask & 1) != 0)
                {
                    str1 += str2;
                }
                str3 = str1 + " " + this.TagName;
                if (((int)mask & 2) != 0)
                {
                    string str4 = this.data == null || this.dataLength >= 8L ? Asn1Util.ToHexString(this.data) : Asn1Util.BytesToLong(this.data).ToString();
                    str3 += str4.Length > 0 ? " : '" + str4 + "'" : "";
                    break;
                }
                break;

            case 3:
                if (((int)mask & 1) != 0)
                {
                    str1 += str2;
                }
                str3 = str1 + " " + this.TagName + " UnusedBits: " + this.unusedBits.ToString();
                if (((int)mask & 2) != 0)
                {
                    string hexString = Asn1Util.ToHexString(this.data);
                    str3 += hexString.Length > 0 ? " : '" + hexString + "'" : "";
                    break;
                }
                break;

            case 6:
                Oid    oid      = new Oid();
                string inOidStr = oid.Decode(this.data);
                string oidName  = oid.GetOidName(inOidStr);
                if (((int)mask & 1) != 0)
                {
                    str1 += str2;
                }
                str3 = str1 + " " + this.TagName + " : " + oidName;
                if (((int)mask & 2) != 0)
                {
                    str3 += inOidStr.Length > 0 ? " : '" + inOidStr + "'" : "";
                    break;
                }
                break;

            case 12:
            case 18:
            case 19:
            case 22:
            case 23:
            case 24:
            case 26:
            case 27:
            case 28:
            case 30:
                if (((int)mask & 1) != 0)
                {
                    str1 += str2;
                }
                str3 = str1 + " " + this.TagName;
                if (((int)mask & 2) != 0)
                {
                    string str4 = this.tag != (byte)12 ? Asn1Util.BytesToString(this.data) : new UTF8Encoding().GetString(this.data);
                    str3 += str4.Length > 0 ? " : '" + str4 + "'" : "";
                    break;
                }
                break;

            case 13:
                string str5 = new RelativeOid().Decode(this.data);
                string str6 = "";
                if (((int)mask & 1) != 0)
                {
                    str1 += str2;
                }
                str3 = str1 + " " + this.TagName + " : " + str6;
                if (((int)mask & 2) != 0)
                {
                    str3 += str5.Length > 0 ? " : '" + str5 + "'" : "";
                    break;
                }
                break;

            default:
                if (((int)mask & 1) != 0)
                {
                    str1 += str2;
                }
                str3 = str1 + " " + this.TagName;
                if (((int)mask & 2) != 0)
                {
                    string str4 = ((int)this.tag & 31) == 6 || Asn1Util.IsAsciiString(this.Data) ? Asn1Util.BytesToString(this.data) : Asn1Util.ToHexString(this.data);
                    str3 += str4.Length > 0 ? " : '" + str4 + "'" : "";
                    break;
                }
                break;
            }
            if (((int)mask & 16) != 0)
            {
                str3 = "(" + this.path + ") " + str3;
            }
            return(str3);
        }
Example #6
0
        public string GetDataStr(bool pureHexMode)
        {
            string str;

            if (pureHexMode)
            {
                str = Asn1Util.FormatString(Asn1Util.ToHexString(this.data), 32, 2);
            }
            else
            {
                switch (this.tag)
                {
                case 2:
                    str = Asn1Util.FormatString(Asn1Util.ToHexString(this.data), 32, 2);
                    break;

                case 3:
                    str = Asn1Util.FormatString(Asn1Util.ToHexString(this.data), 32, 2);
                    break;

                case 6:
                    str = new Oid().Decode((Stream) new MemoryStream(this.data));
                    break;

                case 12:
                    str = new UTF8Encoding().GetString(this.data);
                    break;

                case 13:
                    str = new RelativeOid().Decode((Stream) new MemoryStream(this.data));
                    break;

                case 18:
                case 19:
                case 22:
                case 23:
                case 24:
                case 26:
                case 27:
                case 28:
                case 30:
                    str = Asn1Util.BytesToString(this.data);
                    break;

                default:
                    str = ((int)this.tag & 31) == 6 || Asn1Util.IsAsciiString(this.Data) ? Asn1Util.BytesToString(this.data) : Asn1Util.FormatString(Asn1Util.ToHexString(this.data), 32, 2);
                    break;
                }
            }
            return(str);
        }
Example #7
0
        public string GetText(Asn1Node startNode, int lineLen)
        {
            string str1 = "";
            string str2;

            switch (this.tag)
            {
            case 2:
                if (this.data != null && this.dataLength < 8L)
                {
                    str2 = str1 + string.Format("{0,6}|{1,6}|{2,7}|{3} {4} : {5}\r\n", (object)this.dataOffset, (object)this.dataLength, (object)this.lengthFieldBytes, (object)this.GetIndentStr(startNode), (object)this.TagName, (object)Asn1Util.BytesToLong(this.data).ToString());
                    break;
                }
                string baseLine1 = string.Format("{0,6}|{1,6}|{2,7}|{3} {4} : ", (object)this.dataOffset, (object)this.dataLength, (object)this.lengthFieldBytes, (object)this.GetIndentStr(startNode), (object)this.TagName);
                str2 = str1 + this.GetHexPrintingStr(startNode, baseLine1, "      |      |       | ", lineLen);
                break;

            case 3:
                string str3      = string.Format("{0,6}|{1,6}|{2,7}|{3} {4} UnusedBits:{5} : ", (object)this.dataOffset, (object)this.dataLength, (object)this.lengthFieldBytes, (object)this.GetIndentStr(startNode), (object)this.TagName, (object)this.unusedBits);
                string hexString = Asn1Util.ToHexString(this.data);
                if (str3.Length + hexString.Length < lineLen)
                {
                    if (hexString.Length < 1)
                    {
                        str2 = str1 + str3 + "\r\n";
                        break;
                    }
                    str2 = str1 + str3 + "'" + hexString + "'\r\n";
                    break;
                }
                str2 = str1 + str3 + this.FormatLineHexString("      |      |       | ", this.GetIndentStr(startNode).Length, lineLen, hexString + "\r\n");
                break;

            case 6:
                Oid    oid      = new Oid();
                string inOidStr = oid.Decode((Stream) new MemoryStream(this.data));
                string oidName  = oid.GetOidName(inOidStr);
                str2 = str1 + string.Format("{0,6}|{1,6}|{2,7}|{3} {4} : {5} [{6}]\r\n", (object)this.dataOffset, (object)this.dataLength, (object)this.lengthFieldBytes, (object)this.GetIndentStr(startNode), (object)this.TagName, (object)oidName, (object)inOidStr);
                break;

            case 12:
            case 18:
            case 19:
            case 22:
            case 23:
            case 24:
            case 26:
            case 27:
            case 28:
            case 30:
                string str4 = string.Format("{0,6}|{1,6}|{2,7}|{3} {4} : ", (object)this.dataOffset, (object)this.dataLength, (object)this.lengthFieldBytes, (object)this.GetIndentStr(startNode), (object)this.TagName);
                string msg1 = this.tag != (byte)12 ? Asn1Util.BytesToString(this.data) : new UTF8Encoding().GetString(this.data);
                if (str4.Length + msg1.Length < lineLen)
                {
                    str2 = str1 + str4 + "'" + msg1 + "'\r\n";
                    break;
                }
                str2 = str1 + str4 + this.FormatLineString("      |      |       | ", this.GetIndentStr(startNode).Length, lineLen, msg1) + "\r\n";
                break;

            case 13:
                string str5 = new RelativeOid().Decode((Stream) new MemoryStream(this.data));
                string str6 = "";
                str2 = str1 + string.Format("{0,6}|{1,6}|{2,7}|{3} {4} : {5} [{6}]\r\n", (object)this.dataOffset, (object)this.dataLength, (object)this.lengthFieldBytes, (object)this.GetIndentStr(startNode), (object)this.TagName, (object)str6, (object)str5);
                break;

            default:
                if (((int)this.tag & 31) == 6 || Asn1Util.IsAsciiString(this.Data))
                {
                    string str7 = string.Format("{0,6}|{1,6}|{2,7}|{3} {4} : ", (object)this.dataOffset, (object)this.dataLength, (object)this.lengthFieldBytes, (object)this.GetIndentStr(startNode), (object)this.TagName);
                    string msg2 = Asn1Util.BytesToString(this.data);
                    if (str7.Length + msg2.Length < lineLen)
                    {
                        str2 = str1 + str7 + "'" + msg2 + "'\r\n";
                        break;
                    }
                    str2 = str1 + str7 + this.FormatLineString("      |      |       | ", this.GetIndentStr(startNode).Length, lineLen, msg2) + "\r\n";
                    break;
                }
                string baseLine2 = string.Format("{0,6}|{1,6}|{2,7}|{3} {4} : ", (object)this.dataOffset, (object)this.dataLength, (object)this.lengthFieldBytes, (object)this.GetIndentStr(startNode), (object)this.TagName);
                str2 = str1 + this.GetHexPrintingStr(startNode, baseLine2, "      |      |       | ", lineLen);
                break;
            }
            if (this.childNodeList.Count >= 0)
            {
                str2 += this.GetListStr(startNode, lineLen);
            }
            return(str2);
        }