示例#1
0
        public List <string> GetRuTokens()
        {
            // Вывод списка токенов, установленных в системе
            var manager = new PCSCReadersManager();

            manager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER);
            var tokens         = manager.OfType <ISCard>().Where(device => device.ReaderName.ToLower().Contains("tok")).ToList();
            var activeDevsName = new List <string>();

            foreach (var token in tokens)
            {
                PolicySmartcardBase testConnect = null;
                try
                {
                    testConnect = new PolicySmartcardBase(token);
                    testConnect.Connect();
                }
                catch
                {
                    testConnect = null;
                }
                finally
                {
                    if (testConnect != null)
                    {
                        activeDevsName.Add(testConnect.BaseCard.ReaderName);
                        testConnect.Disconnect();
                    }
                }
            }

            manager.ReleaseContext();
            return(activeDevsName);
        }
示例#2
0
        void SearchReaders()
        {
            PCSCReadersManager manager = new PCSCReadersManager();

            try
            {
                ReadersComboBox.Items.Clear();

                manager.EstablishContext(SmartCard.PCSC.READERSCONTEXTSCOPE.SCOPE_USER);
                manager.OfType <ISCard>().ToList().ForEach(reader =>
                {
                    ReadersComboBox.Items.Add(reader.ReaderName);
                });

                if (ReadersComboBox.Items.Count > 0)
                {
                    ReadersComboBox.Text = ReadersComboBox.Items[0].ToString();
                }

                manager.ReleaseContext();
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message, "Ошибка получения списка ридеров");
            }
        }
示例#3
0
        public List <string> GetCardReaders()
        {
            // Вывод списка кард-ридеров, установленных в системе
            var manager = new PCSCReadersManager();

            manager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER);
            var cards          = manager.OfType <ISCard>().ToList();
            var activeDevsName = new List <string>();

            foreach (var card in cards)
            {
                PolicySmartcardBase testConnect = null;
                try
                {
                    testConnect = new PolicySmartcardBase(card);
                }
                catch (Exception)
                {
                    testConnect = null;
                }
                finally
                {
                    if (testConnect != null)
                    {
                        activeDevsName.Add(testConnect.BaseCard.ReaderName);
                    }
                }
            }

            manager.ReleaseContext();
            return(activeDevsName);
        }
示例#4
0
        public CardInfoStrings GetCardInfo()
        {
            var manager = new PCSCReadersManager();

            // Установление соединения с смарт-карт API
            manager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER);

            // Вывод списка ридеров в консоль
            if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ActiveCardReader))
            {
                // Получение объекта ридера
                var card = manager[ActiveCardReader];

                // Создание объекта для работы с картой полиса ОМС
                var policy = new PolicySmartcardBase(card);

                // Подключение к карте полиса ОМС
                policy.Connect();

                // Чтение информации о карте полиса ОМС ( Идентификационные данные )
                var cid = policy.GetCardID();

                // Чтение информации о карте полиса ОМС ( Информация о микросхеме от производителя )
                var ccd = policy.GetICCD();

                CardInfoStrings cardInfo = null;
                if (cid != null)
                {
                    cardInfo = new CardInfoStrings
                    {
                        CardHexNum = cid.SerialNumber.ToHexString(),
                        CardType   = cid.CardType,
                        Vers       = cid.CardVersion,
                        InstitId   = cid.InstitutionID.ToHexString(),
                        AddInfo    = cid.AdditionalInfo.ToHexString()
                    };
                }

                if (ccd != null)
                {
                    cardInfo            = cardInfo ?? new CardInfoStrings();
                    cardInfo.IssuerCode = ccd.IssuerCode;
                    cardInfo.IssuerData = ccd.IssuerData.ToHexString();
                }

                // Отключение от карты полиса ОМС
                policy.Disconnect();

                // Отключение от смарт-карт API
                manager.ReleaseContext();
                return(cardInfo);
            }

            manager.ReleaseContext();
            return(null);
        }
示例#5
0
        /// <summary>
        /// Инициализация карты
        /// </summary>
        public bool InitializeCard(PCSCReadersManager cardManager, PolicySmartcardBase policy)
        {
            bool flag;

            try
            {
                ISCard card = cardManager[cardManager.OfType <ISCard>().ToList().First().ReaderName];
                policy = new PolicySmartcardBase(card);
                policy.Connect();
                flag = true;
            }
            catch (Exception ex)
            {
                flag = false;
                throw ex;
            }
            return(flag);
        }
示例#6
0
        /// <summary>
        /// Инициализация считывателя карт
        /// </summary>
        public bool InitializeReader(PCSCReadersManager cardManager)
        {
            bool flag = false;

            try
            {
                cardManager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER);
                if (cardManager.ReadersCount > 0)
                {
                    flag = true;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(flag);
        }
示例#7
0
 private Task ReadInfo()
 {
     while (true)
     {
         System.Threading.Thread.Sleep(1000);
         PCSCReadersManager  CardManager = new PCSCReadersManager();
         PolicySmartcardBase policy      = null;
         try
         {
             if (!_policyService.InitializeReader(ref CardManager))
             {
                 continue;
             }
             else if (!_policyService.InitializeCard(ref CardManager, ref policy))
             {
                 continue;
             }
             else
             {
                 StatusLabel = CardManager.OfType <ISCard>().ToList().First().ReaderName;
                 if (!_isCardInserted)
                 {
                     Information     = _policyService.ReadInformation(ref policy);
                     _isCardInserted = true;
                 }
                 policy.Disconnect();
             }
         }
         catch (Exception ex)
         {
             Information     = _emptyInfoModel;
             StatusLabel     = ex.Message.ToString();
             _isCardInserted = false;
         }
     }
 }
示例#8
0
        public List <SmoInfoStrings> GetSmoHistory()
        {
            const string pinCard = "5473";

            // Чтение информации о владельце карты полиса ОМС
            var manager = new PCSCReadersManager();

            try
            {
                // Установление соединения с смарт-карт API
                manager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER);

                // Вывод списка ридеров в консоль
                if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ActiveCardReader) == false)
                {
                    ////printf("Устройство чтения смарт-карт с именем [{0}] не найдено в системе.");
                    manager.ReleaseContext();
                    return(null);
                }

                if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ActiveToken) == false)
                {
                    ////printf("Устройство чтения смарт-карт с именем [{0}] не найдено в системе.");
                    manager.ReleaseContext();
                    return(null);
                }

                // Получение объекта ридера
                var policyCard = manager[ActiveCardReader];
                var tokenCard  = manager[ActiveToken];

                // Создание объекта для работы с картой полиса ОМС
                var policy = new PolicySmartcard(policyCard, tokenCard);

                // Подключение к карте полиса ОМС
                policy.Connect();


                // Аутентификация с картой модуля безопасности
                policy.Authentificate_External(pinCard);
                policy.Authentificate_External(pinCard, true);

                // Чтение истории СМО
                var historyList = policy.GetSMOHistory();
                var histSmos    = new List <SmoInfoStrings>();
                historyList.ForEach(smo =>
                {
                    if (smo != null)
                    {
                        var smoInfo = new SmoInfoStrings
                        {
                            OgrnSmo            = smo.OGRN,
                            Okato              = smo.OKATO,
                            InsuranceStartDate =
                                FormatPolicyDate(
                                    smo.InsuranceStartDate, "Отсутствует"),
                            InsuranceEndDate =
                                FormatPolicyDate(
                                    smo.InsuranceExpireDate, "Не ограничено"),
                            Eds = smo.EDS == null
                                                            ? null
                                                            : new Eds
                            {
                                Certificate =
                                    new X509Certificate2(smo.EDS.Certificate).Subject,
                                Ecp = smo.EDS.Signature.ToHexString()
                            }
                        };

                        histSmos.Add(smoInfo);
                    }
                });

                // Отключение от карты полиса ОМС
                policy.Disconnect();

                // Отключение от смарт-карт API
                manager.ReleaseContext();
                return(histSmos);
            }
            catch
            {
                return(null);
            }
        }
示例#9
0
        public bool ChangeSmo(string ogrnSmo, string okatoSmo, string dateFrom, string dateTo, string securityModulePin, string cardPin)
        {
            // Чтение информации о владельце карты полиса ОМС
            var manager = new PCSCReadersManager();

            try
            {
                // Установление соединения с смарт-карт API
                manager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER);

                // Вывод списка ридеров в консоль
                if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ActiveCardReader) == false)
                {
                    manager.ReleaseContext();
                    return(false);
                }

                if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ActiveToken) == false)
                {
                    manager.ReleaseContext();
                    return(false);
                }

                // Получение объекта ридера
                var policyCard = manager[ActiveCardReader];
                var tokenCard  = manager[ActiveToken];

                // Создание объекта для работы с картой полиса ОМС
                var policy = new PolicySmartcard(policyCard, tokenCard);

                // Подключение к карте полиса ОМС
                policy.Connect();

                // Аутентификация с картой модуля безопасности
                // Пин-код модуля безопасности 12345678
                policy.Authentificate_Mutual(securityModulePin, true);
                var verifyArgs = new VerifyPINArguments
                {
                    // Данный параметр устанавливает признак использования пин-пада для
                    // предъявления пин-кода с помощью выносной клавиатуры. В случае установки данного параметра в значение false
                    // требуется заполнение параметра 'PinValue'
                    // Использование пин-пада возможно только в случае, если карта полиса ОМС установлена
                    // в устройство с поддержкой функции выносной клавиатуры.
                    // Проверить наличие функций выносной клавиатуры у устройства можно с помощью метода
                    // 'PolicyPinpad.IsDeviceSupported(policy_card, false
                    // Не выполнять подключение к карте если подключение было выполнено внешними средствами
                    UsePinpad = PolicyPinpad.IsDeviceSupported(policyCard, false),

                    // Значение пин-кода. Данный параметр используется только если UsePinpad = false
                    PinValue = "1234",

                    // Ссылка на метод для отмены ввода пин-кода программным способом в случае использовании выносной клавиатуры
                    // Инициализация происходит на стороне метода VerifyPIN
                    CancelHandler = null,

                    // Ссылка на метод для обработки события нажатия кнопок на выносной клавиатуре
                    // Можно не инициализировать - используется только в случае использовании выносной клавиатуры
                    EnteredDigitHandler = key =>
                    {
                        // Тело метода, обработчика
                    }
                };

                // Проверка пина
                policy.VerifyPIN(ref verifyArgs);

                // Парсим даты
                DateTime dtFrom = DateTime.Now;
                DateTime.TryParse(dateFrom, out dtFrom);

                // Парсим даты
                DateTime dtTo = DateTime.Now.AddYears(5);
                DateTime.TryParse(dateTo, out dtTo);

                // Создание объекта нового СМО
                var smo = new SMOInformation
                {
                    OGRN  = ogrnSmo,
                    OKATO = okatoSmo,
                    InsuranceStartDate  = dtFrom,
                    InsuranceExpireDate = dtTo,
                    EDS = null   /*ЭЦП будет инициализирована позже после ее создания*/
                };

                // [Формирование ЭЦП нового СМО]
                // Открытие хранилища сертификатов текущего пользователя
                var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
                store.Open(OpenFlags.ReadOnly);

                // Выбор сертификата с помощью строенного диалога
                var selected = X509Certificate2UI.SelectFromCollection(
                    store.Certificates,
                    "Сертификата",
                    "Выберите сертификат для формирования ЭЦП СМО",
                    X509SelectionFlag.SingleSelection);
                if (selected.Count > 0)
                {
                    // Создание объекта формирования подписи
                    var signatureEncoder = new SignatureEncoder(selected[0]);

                    // Формирование ЭЦП
                    smo.EDS = new SMOInformationEDS
                    {
                        Signature   = signatureEncoder.CreateSignHash(smo.EncodeBER()), // Преобразование объекта к формату BER-TLV
                        Certificate = selected[0].Export(X509ContentType.Cert)
                    };
                }

                // Запись информации о новом СМО на карту полиса ОМС
                policy.CreateNewSMO(smo);

                // Отключение от карты полиса ОМС
                policy.Disconnect();

                // Отключение от смарт-карт API
                manager.ReleaseContext();

                return(true);
            }
            catch
            {
                return(false);
            }
        }
示例#10
0
        public OwnerInfo GetOwnerInfo()
        {
            // Чтение информации о владельце карты полиса ОМС
            var manager = new PCSCReadersManager();

            try
            {
                // Установление соединения с смарт-карт API
                manager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER);

                // Вывод списка ридеров в консоль
                if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ActiveCardReader))
                {
                    // Получение объекта ридера
                    var card = manager[ActiveCardReader];

                    // Создание объекта для работы с картой полиса ОМС
                    var policy = new PolicySmartcardBase(card);

                    // Подключение к карте полиса ОМС
                    policy.Connect();

                    // Чтение информации о владельце полиса ОМС
                    var ownerInfoCard = policy.GetOwnerInformation();
                    if (ownerInfoCard != null)
                    {
                        var ownerInfo = new OwnerInfo
                        {
                            LastName   = FormatPolicyText(ownerInfoCard.Identity_1, string.Empty),
                            FirstName  = FormatPolicyText(ownerInfoCard.Identity_2, string.Empty),
                            MiddleName = FormatPolicyText(ownerInfoCard.Identity_3, string.Empty),
                            Sex        =
                                ownerInfoCard.Sex == 1 ? "273" : ownerInfoCard.Sex == 2 ? "274" : string.Empty,
                            Birthday   = FormatPolicyDate(ownerInfoCard.BirthDate, string.Empty),
                            BirthPlace = FormatPolicyText(ownerInfoCard.BirthPlace, string.Empty)
                        };

                        if (ownerInfoCard.Citizenship != null)
                        {
                            ownerInfo.CitizenschipCode = FormatPolicyText(ownerInfoCard.Citizenship.CoutryCode, string.Empty);
                            ownerInfo.CitizenschipName = FormatPolicyText(ownerInfoCard.Citizenship.CoutryCyrillicName, string.Empty);
                        }

                        ownerInfo.PolisNumber   = ownerInfoCard.PolicyNumber;
                        ownerInfo.PolisDateFrom = FormatPolicyDate(ownerInfoCard.IssueDate, string.Empty);
                        ownerInfo.PolisDateTo   = FormatPolicyDate(ownerInfoCard.ExpireDate, string.Empty);

                        ownerInfo.Snils = FormatPolicyText(ownerInfoCard.SNILS, string.Empty);

                        try
                        {
                            // Чтение атрибутов безопасности карты полиса ОМС
                            var sod = policy.GetSecurityInformation();
                            ownerInfo.StateEcp = ownerInfoCard.VerifyEDS(sod) ? "Верна" : "Неверна";
                        }
                        catch
                        {
                        }

                        // Отключение от карты полиса ОМС
                        policy.Disconnect();

                        // Отключение от смарт-карт API
                        manager.ReleaseContext();
                        return(ownerInfo);
                    }

                    // Отключение от карты полиса ОМС
                    policy.Disconnect();

                    // Отключение от смарт-карт API
                    manager.ReleaseContext();
                    return(null);
                }

                manager.ReleaseContext();
                return(null);
            }
            catch
            {
                manager.ReleaseContext();
                throw;
            }
        }
示例#11
0
        public SmoInfoStrings GetCurrentSmo()
        {
            // Чтение информации о владельце карты полиса ОМС
            var manager = new PCSCReadersManager();

            // Установление соединения с смарт-карт API
            manager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER);

            // Вывод списка ридеров в консоль
            if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ActiveCardReader))
            {
                // Получение объекта ридера
                var card = manager[ActiveCardReader];

                // Создание объекта для работы с картой полиса ОМС
                var policy = new PolicySmartcardBase(card);

                // Подключение к карте полиса ОМС
                policy.Connect();

                // Чтение информации о владельце полиса ОМС
                var smo = policy.GetCurrentSMOInformation();
                if (smo != null)
                {
                    var smoInfo = new SmoInfoStrings
                    {
                        OgrnSmo            = smo.OGRN,
                        Okato              = smo.OKATO,
                        InsuranceStartDate =
                            FormatPolicyDate(smo.InsuranceStartDate, "Отсутствует"),
                        InsuranceEndDate =
                            FormatPolicyDate(smo.InsuranceExpireDate, "Не ограничено")
                    };

                    if (smo.EDS != null)
                    {
                        smoInfo.Eds = new Eds
                        {
                            Certificate = new X509Certificate2(smo.EDS.Certificate).Subject,
                            Ecp         = smo.EDS.Signature.ToHexString()
                        };

                        try
                        {
                            smoInfo.Eds.StateEcp = smo.VerifyEDS() ? "Верна" : "Неверна";
                        }
                        catch
                        {
                        }
                    }

                    policy.Disconnect();
                    manager.ReleaseContext();
                    return(smoInfo);
                }

                // Отключение от карты полиса ОМС
                policy.Disconnect();

                // Отключение от смарт-карт API
                manager.ReleaseContext();
                return(null);
            }

            manager.ReleaseContext();
            return(null);
        }
示例#12
0
        void GetCardData()
        {
            if (ReadersComboBox.Items.Count == 0)
            {
                MessageBox.Show("Не обнаружено подключенных ридеров!");
                return;
            }

            ClearForm();

            PCSCReadersManager manager = new PCSCReadersManager();

            var SA = ReadersComboBox.Items[0].ToString();

            manager.EstablishContext(SmartCard.PCSC.READERSCONTEXTSCOPE.SCOPE_USER);
            if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(SA))
            {
                ISCard card = manager[SA];
                PolicySmartcardBase policy = new PolicySmartcardBase(card);
                policy.Connect();

                try
                {
                    OwnerInformation owner_info = policy.GetOwnerInformation();
                    if (owner_info != null)
                    {
                        textBoxFIO.Text          = FormatPolicyText(owner_info.Identity_1, "") + " " + FormatPolicyText(owner_info.Identity_2, "") + " " + FormatPolicyText(owner_info.Identity_1, "");
                        textBoxSex.Text          = owner_info.Sex == 1 ? "Мужской" : owner_info.Sex == 2 ? "Женский" : "Неизвестно";
                        textBoxDateOfBirth.Text  = FormatPolicyDate(owner_info.BirthDate, "Отсутствует");
                        textBoxPlaceOfBirth.Text = FormatPolicyText(owner_info.BirthPlace, "Отсутствует");

                        if (owner_info.Citizenship != null)
                        {
                            textBoxCountryCode.Text = FormatPolicyText(owner_info.Citizenship.CoutryCode, "Отсутствует");
                            textBoxCountryName.Text = FormatPolicyText(owner_info.Citizenship.CoutryCyrillicName, "Отсутствует");
                        }

                        textBoxPolisNumber.Text = owner_info.PolicyNumber;
                        textBoxPolisDate.Text   = FormatPolicyDate(owner_info.ExpireDate, "Отсутствует");
                        textBoxPolisExpire.Text = FormatPolicyDate(owner_info.ExpireDate, "Не ограничено");
                        textBoxSNILS.Text       = FormatPolicyText(owner_info.SNILS, "Отсутствует");
                    }
                }
                catch (Exception exception)
                {
                    MessageBox.Show(exception.Message, "Ошибка: ");
                }
                try
                {
                    CardID cid = policy.GetCardID();
                    if (cid != null)
                    {
                        textBoxCardSerial.Text  = cid.SerialNumber.ToHexString();
                        textBoxCardType.Text    = cid.CardType.ToString();
                        textBoxCardVersion.Text = cid.CardVersion.ToString();
                        textBoxCompanyID.Text   = cid.InstitutionID.ToHexString();
                        textBoxInformation.Text = cid.AdditionalInfo.ToHexString();
                    }
                }
                catch (Exception exception)
                {
                    MessageBox.Show(exception.Message, "Ошибка: ");
                }
                try
                {
                    ICCID ccd = policy.GetICCD();
                    if (ccd != null)
                    {
                        textBoxManufacturerCode.Text = ccd.IssuerCode.ToString();
                        textBoxManufacturerData.Text = ccd.IssuerData.ToHexString();
                    }
                }
                catch (Exception exception)
                {
                    MessageBox.Show(exception.Message, "Ошибка: ");
                }

                try
                {
                    SMOInformation smo = policy.GetCurrentSMOInformation();
                    if (smo != null)
                    {
                        textBoxOGRN.Text  = smo.OGRN;
                        textBoxOKATO.Text = smo.OKATO;
                        textBoxInsuranceStartDate.Text = FormatPolicyDate(smo.InsuranceStartDate, "Отсутствует");
                        textBoxExpire.Text             = FormatPolicyDate(smo.InsuranceExpireDate, "Не ограничено");
                        textBoxCert.Text = new X509Certificate2(smo.EDS.Certificate).Subject;
                        textBoxECP.Text  = smo.EDS.Signature.ToHexString();
                        //textBoxECPStatus.Text = smo.VerifyEDS() == true ? "Верна" : "Неверна";
                    }
                }
                catch (Exception exception)
                {
                    MessageBox.Show(exception.Message, "Ошибка: ");
                }
                policy.Disconnect();
            }
            manager.ReleaseContext();
        }
示例#13
0
        public static void GetData(string args = "")
        {
            PCSCReadersManager manager = new PCSCReadersManager();

            try
            {
                manager.EstablishContext(SmartCard.PCSC.READERSCONTEXTSCOPE.SCOPE_USER);
                if (args != "")
                {
                    ReaderName = args;
                }
                else
                {
                    var list = manager.OfType <ISCard>().ToList();

                    if (list.Count > 0)
                    {
                        ReaderName = list[0].ReaderName;
                    }
                    else
                    {
                        ContentFile += "Не найдены ридеры!";
                    }
                }

                if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ReaderName))
                {
                    //Получение объекта ридера
                    ISCard card = manager[ReaderName];
                    //Создание объекта для работы с картой полиса ОМС
                    PolicySmartcardBase policy = new PolicySmartcardBase(card);
                    //Подключение к карте полиса ОМС
                    policy.Connect();
                    //Чтение информации о владельце полиса ОМС
                    OwnerInformation owner_info = policy.GetOwnerInformation();
                    if (owner_info != null)
                    {
                        printf("Информация о владельце:");
                        printf("{0} = {1}", "Фамилия".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.Identity_1, "Отсутствует"));
                        printf("{0} = {1}", "Имя".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.Identity_2, "Отсутствует"));
                        printf("{0} = {1}", "Отчество".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.Identity_3, "Отсутствует"));
                        printf("{0} = {1}", "Пол".PadRight(35, ' '), owner_info.Sex == 1 ? "Мужской" : owner_info.Sex == 2 ? "Женский" : "Неизвестно");
                        printf("{0} = {1}", "Дата рождения".PadRight(35, ' '), MainForm.FormatPolicyDate(owner_info.BirthDate, "Отсутствует"));
                        printf("{0} = {1}", "Место рождения".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.BirthPlace, "Отсутствует"));

                        if (owner_info.Citizenship != null)
                        {
                            printf("Гражданство:");
                            printf("{0} = {1}", "Код страны".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.Citizenship.CoutryCode, "Отсутствует"));
                            printf("{0} = {1}", "Кириллическое название".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.Citizenship.CoutryCyrillicName, "Отсутствует"));
                        }
                        else
                        {
                            printf("{0} = {1}", "Гражданство".PadRight(35, ' '), "Отсутствует");
                        }

                        printf("Информация о полисе:");
                        printf("{0} = {1:D16}", "Номер полиса".PadRight(35, ' '), owner_info.PolicyNumber);
                        printf("{0} = {1}", "Дата выпуска".PadRight(35, ' '), MainForm.FormatPolicyDate(owner_info.ExpireDate, "Отсутствует"));
                        printf("{0} = {1}", "Срок действия".PadRight(35, ' '), MainForm.FormatPolicyDate(owner_info.ExpireDate, "Не ограничено"));
                        printf("{0} = {1}", "СНИЛС".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.SNILS, "Отсутствует"));
                        //printf("Чтение атрибутов безопасности карты полиса ОМС");
                        //SecurityInformation SOD = policy.GetSecurityInformation();
                        //printf("{0} = {1}", "Статус ЭЦП".PadRight(35, ' '), owner_info.VerifyEDS(SOD) ? "Верна" : "Неверна");
                    }
                    else
                    {
                        printf("Данные о владельце отсутствуют на карте!");
                    }

                    SMOInformation smo = policy.GetCurrentSMOInformation();
                    if (smo != null)
                    {
                        printf("Данные страхового приложения:");
                        printf("{0} = {1}", "ОГРН".PadRight(35, ' '), smo.OGRN);
                        printf("{0} = {1}", "ОКАТО".PadRight(35, ' '), smo.OKATO);
                        printf("{0} = {1}", "Дата начала страхования".PadRight(35, ' '), MainForm.FormatPolicyDate(smo.InsuranceStartDate, "Отсутствует"));
                        printf("{0} = {1}", "Окончание срока действия".PadRight(35, ' '), MainForm.FormatPolicyDate(smo.InsuranceExpireDate, "Не ограничено"));
                        if (smo.EDS != null)
                        {
                            printf("Данные ЭЦП");
                            printf("{0} = {1}", "Сертификат".PadRight(35, ' '), new X509Certificate2(smo.EDS.Certificate).Subject);
                            printf("{0} = {1}", "ЭЦП".PadRight(35, ' '), smo.EDS.Signature.ToHexString());
                            //printf("{0} = {1}", "Статус ЭЦП".PadRight(35, ' '), smo.VerifyEDS() == true ? "Верна" : "Неверна");
                        }
                        else
                        {
                            printf("{0} = {1}", "Данные ЭЦП".PadRight(35, ' '), "Отсутствуют");
                        }
                    }
                    else
                    {
                        printf("Данные о смо отсутствуют на карте!");
                    }

                    CardID cid = policy.GetCardID();
                    ICCID  ccd = policy.GetICCD();
                    if (cid != null)
                    {
                        printf("Идентификационные данные карты:");
                        printf("{0} = {1}", "Серийный номер карты".PadRight(35, ' '), cid.SerialNumber.ToHexString());
                        printf("{0} = {1}", "Тип карты".PadRight(35, ' '), cid.CardType);
                        printf("{0} = {1}", "Версия".PadRight(35, ' '), cid.CardVersion);
                        printf("{0} = {1}", "Идентификатор учреждения".PadRight(35, ' '), cid.InstitutionID.ToHexString());
                        printf("{0} = {1}", "Дополнительные сведения о карте".PadRight(35, ' '), cid.AdditionalInfo.ToHexString());
                    }
                    else
                    {
                        printf("Идентификационные данные отсутствуют на карте!");
                    }

                    if (ccd != null)
                    {
                        printf("Информация о микросхеме от производителя:");
                        printf("{0} = {1}", "Код производителя карты".PadRight(35, ' '), ccd.IssuerCode);
                        printf("{0} = {1}", "Данные производителя карты".PadRight(35, ' '), ccd.IssuerData.ToHexString());
                    }
                    else
                    {
                        printf("Информация о микросхеме от производителя отсутствует на карте!");
                    }
                    //Отключение от карты полиса ОМС
                    policy.Disconnect();
                    //Отключение от смарт-карт API
                    manager.ReleaseContext();
                }
                else
                {
                    printf("Устройство чтения смарт-карт с именем [{0}] не найдено в системе.");
                    manager.ReleaseContext();
                }
            }
            catch (Exception exception)
            {
                ContentFile += "Ошибка получения списка ридеров: " + exception.Message;
            }

            StreamWriter wf;

            wf = new StreamWriter("infofile.txt", false, Encoding.GetEncoding(1251));
            wf.Write(ContentFile);
            wf.Close();
        }