#Область ОписаниеПеременных
&НаКлиенте
Перем ВнутренниеДанные, КлиентскиеПараметры, СвойстваПароля, ПараметрыВыполненияКонтекста;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭлектроннаяПодписьСлужебный.НастроитьПояснениеВводаПароля(
ЭтотОбъект, , Элементы.ПояснениеУсиленногоПароля.Имя);
Сертификат = Параметры.Сертификат;
ПроверкаПриВыборе = Параметры.ПроверкаПриВыборе;
Если ЗначениеЗаполнено(Параметры.ЗаголовокФормы) Тогда
АвтоЗаголовок = Ложь;
Заголовок = Параметры.ЗаголовокФормы;
КонецЕсли;
Если ПроверкаПриВыборе Тогда
Элементы.ФормаЗакрыть.Заголовок = НСтр("ru = 'Отмена'");
Элементы.ФормаПроверить.Заголовок = НСтр("ru = 'Проверить и продолжить'");
КонецЕсли;
ВводитьПароль = Истина;
СтандартныеПроверки = Истина;
ОбъединятьРезультаты = ?(Параметры.ОбъединятьРезультаты = "ОбъединятьПоИ"
Или Параметры.ОбъединятьРезультаты = "ОбъединятьПоИли",
Параметры.ОбъединятьРезультаты, "НеОбъединять");
Если Параметры.РезультатПроверки <> Неопределено Тогда
ПроверкаВыполнена = Истина;
ПроверкиНаКлиенте = Параметры.РезультатПроверки.ПроверкиНаКлиенте;
ПроверкиНаСервере = Параметры.РезультатПроверки.ПроверкиНаСервере;
ДополнительныеДанныеПроверокНаСервере = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(
Параметры.РезультатПроверки, "ДополнительныеДанныеПроверокНаСервере", Новый Структура);
ДополнительныеДанныеПроверокНаКлиенте = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(
Параметры.РезультатПроверки, "ДополнительныеДанныеПроверокНаКлиенте", Новый Структура);
КонецЕсли;
Проверки = Новый ТаблицаЗначений;
Проверки.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка"));
Проверки.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Проверки.Колонки.Добавить("Подсказка", Новый ОписаниеТипов("Строка"));
ЭлектроннаяПодписьПереопределяемый.ПриСозданииФормыПроверкаСертификата(
Параметры.Сертификат, Проверки, Параметры.ПараметрыДополнительныхПроверок,
СтандартныеПроверки, ВводитьПароль);
Если Не СтандартныеПроверки И Проверки.Количество() = 0 Тогда
ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Для проверки сертификата отключены стандартные проверки,
|при этом дополнительных проверок не указано в %1.'"),
"ЭлектроннаяПодписьПереопределяемый.ПриСозданииФормыПроверкаСертификата"),
КатегорияОшибки.ОшибкаКонфигурации);
КонецЕсли;
Если ЗначениеЗаполнено(Параметры.ТипПодписи) Тогда
ТипПодписи = Параметры.ТипПодписи;
КонецЕсли;
ИгнорироватьПроверкуВСпискеОтозванныхСертификатов = Параметры.ИгнорироватьПроверкуВСпискеОтозванныхСертификатов;
ВыполнятьПроверкуУдостоверяющегоЦентра = Параметры.ВыполнятьПроверкуУдостоверяющегоЦентра;
Если ПустаяСтрока(ВыполнятьПроверкуУдостоверяющегоЦентра) Тогда
ВыполнятьПроверкуУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные();
КонецЕсли;
Элементы.ГруппаСтраницы.Видимость = ПроверкиНаКлиенте <> Неопределено Или ПроверкиНаСервере <> Неопределено;
ПроверкиУспешны = Истина;
Для каждого Проверка Из Проверки Цикл
Группа = ГруппаФормыБезОтображения("Группа" + Проверка.Имя, Элементы.ГруппаДополнительныеПроверки);
Группа.Видимость = Ложь;
ДобавитьКартинку(Проверка.Имя + "НаКлиентеКартинка", Группа);
ДобавитьКартинку(Проверка.Имя + "НаСервереКартинка", Группа);
ГруппаРезультатИРешение = ГруппаФормыБезОтображения(Проверка.Имя + "РезультатИРешение", Группа,
ГруппировкаПодчиненныхЭлементовФормы.Вертикальная);
Надпись = Элементы.Добавить(Проверка.Имя + "Надпись", Тип("ДекорацияФормы"), ГруппаРезультатИРешение);
Надпись.Заголовок = Проверка.Представление;
Надпись.РасширеннаяПодсказка.Заголовок = Проверка.Подсказка;
Надпись.УстановитьДействие("Нажатие", "Подключаемый_НадписьНажатие");
ДобавитьЭлементыОписанияОшибок(Проверка.Имя, ГруппаРезультатИРешение);
ДобавитьЭлементыОписанияОшибок(Проверка.Имя, ГруппаРезультатИРешение, Истина);
ЗаполнитьЗначенияСвойств(ДополнительныеПроверки.Добавить(), Проверка);
Если ПроверкиНаКлиенте <> Неопределено Тогда
ВывестиРезультатПроверки(Проверка.Имя);
КонецЕсли;
Если ПроверкиНаСервере <> Неопределено Тогда
ВывестиРезультатПроверки(Проверка.Имя, Истина);
КонецЕсли;
КонецЦикла;
Если Не СтандартныеПроверки Тогда
Элементы.ГруппаОбщиеПроверки.Видимость = Ложь;
Элементы.ГруппаПроверкиОпераций.Видимость = Ложь;
СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "НестандартныеПроверки");
Иначе
ИменаГруппПоНазваниямПроверок = ИменаГруппПоНазваниямПроверок(Элементы);
Для Каждого Проверка Из СтандартныеПроверки() Цикл
Элементы[ИменаГруппПоНазваниямПроверок[Проверка]].Видимость = Ложь;
Элементы[Проверка + "ОшибкаКлиент"].Видимость = Ложь;
Элементы[Проверка + "РешениеКлиентНадпись"].Видимость = Ложь;
Элементы[Проверка + "ОшибкаСервер"].Видимость = Ложь;
Элементы[Проверка + "РешениеСерверНадпись"].Видимость = Ложь;
Элементы[Проверка + "Надпись"].Заголовок = СтандартныйЗаголовокЭлемента(Проверка + "Надпись", ТипПодписи);
Если ПроверкиНаКлиенте <> Неопределено Тогда
ВывестиРезультатПроверки(Проверка);
КонецЕсли;
Если ПроверкиНаСервере <> Неопределено Тогда
ВывестиРезультатПроверки(Проверка, Истина);
КонецЕсли;
КонецЦикла;
КонецЕсли;
ВидимостьСтраниц(ЭтотОбъект);
СвойстваСертификата = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Сертификат,
"ДанныеСертификата, Программа, ВводитьПарольВПрограммеЭлектроннойПодписи, Отпечаток, Отозван");
Отозван = СвойстваСертификата.Отозван;
Программа = СвойстваСертификата.Программа;
АдресСертификата = ПоместитьВоВременноеХранилище(
СвойстваСертификата.ДанныеСертификата.Получить(), УникальныйИдентификатор);
СертификатВводитьПарольВПрограммеЭлектроннойПодписи = СвойстваСертификата.ВводитьПарольВПрограммеЭлектроннойПодписи;
ЭтоУчетнаяЗаписьСервиса = ТипЗнч(Программа) = ЭлектроннаяПодписьСлужебный.ТипПрограммыСервисаПодписи()
И ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи();
ЭтоВстроенныйКриптопровайдер = Программа = ЭлектроннаяПодписьСлужебный.ВстроенныйКриптопровайдер();
ЕстьУчетнаяЗаписьСервиса = ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи()
И ЭлектроннаяПодписьСлужебныйВызовСервера.НастроенСервисОблачнойПодписи();
ЕстьВстроенныйКриптопровайдер = ЭлектроннаяПодписьСлужебный.ИспользоватьЭлектроннуюПодписьВМоделиСервиса();
Если ЭтоУчетнаяЗаписьСервиса Тогда
МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный");
МодульСервисКриптографииDSSКлиентСервер = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSКлиентСервер");
ДанныеСертификата = МодульСервисКриптографииDSSСлужебный.ПолучитьДанныеСертификатаПоОтпечатку(
МодульСервисКриптографииDSSКлиентСервер.ТрансформироватьОтпечаток(СвойстваСертификата.Отпечаток));
Если ДанныеСертификата = Неопределено ИЛИ ДанныеСертификата.УчетнаяЗапись <> Программа Тогда
ВызватьИсключение МодульСервисКриптографииDSSСлужебный.ПолучитьОписаниеОшибки(Неопределено, "ЧужойСертификат");
КонецЕсли;
МодульСервисКриптографииDSSПодтверждениеСервер = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSПодтверждениеСервер");
МодульСервисКриптографииDSSПодтверждениеСервер.ПодготовитьГруппуПодтверждения(ЭтотОбъект, "Проверка", "", "");
МодульСервисКриптографииDSSПодтверждениеСервер.ПодтверждениеПриИзмененииСертификата(ЭтотОбъект, Сертификат);
ИначеЕсли ЭтоВстроенныйКриптопровайдер Или (Не СтандартныеПроверки И Не ВводитьПароль) Тогда
Элементы.ГруппаВводаПароля.Видимость = Ложь;
КонецЕсли;
ОбновитьВидимостьНаСервере();
Если СтандартныеПроверки Тогда
ИмяПервойПроверки = ?(Элементы.ГруппаЗаконныйСертификат.Видимость,
"ЗаконныйСертификат", "НаличиеСертификата");
КонецЕсли;
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
Элементы.ГруппаТребуетсяПомощь.Поведение = ПоведениеОбычнойГруппы.Свертываемая;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда
МодульОбращенияВТехническуюПоддержкуСлужебный = ОбщегоНазначения.ОбщийМодуль(
"ОбращенияВТехническуюПоддержкуСлужебный");
МодульОбращенияВТехническуюПоддержкуСлужебный.ПриСозданииНаСервере(ЭтотОбъект);
Иначе
Элементы.ГруппаТребуетсяПомощь.Видимость = Ложь;
КонецЕсли;
СтандартныеПодсистемыСервер.СброситьРазмерыИПоложениеОкна(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ВнутренниеДанные = Неопределено Тогда
Отказ = Истина;
КонецЕсли;
Если ЭтоУчетнаяЗаписьСервиса Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеПриОткрытии(ЭтотОбъект, Отказ, ЗначениеЗаполнено(Пароль) И ЗапомнитьПароль);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ВРег(ИмяСобытия) = ВРег("Запись_СертификатыКлючейЭлектроннойПодписиИШифрования") И Источник = Сертификат Тогда
ОбновитьДанныеСертификата();
Возврат;
КонецЕсли;
Если ВРег(ИмяСобытия) = ВРег("БСП_ВыполнитьПроверкуСертификата")
И Параметр = АдресСертификата Или ВРег(ИмяСобытия) = ВРег("Установка_КомпонентаExtraCryptoAPI") Тогда
Проверить(Неопределено);
КонецЕсли;
Если ВРег(ИмяСобытия) <> ВРег("Запись_НаборКонстант") Тогда
Возврат;
КонецЕсли;
Если ВРег(Источник) = ВРег("ПроверятьЭлектронныеПодписиНаСервере")
Или ВРег(Источник) = ВРег("СоздаватьЭлектронныеПодписиНаСервере") Тогда
ПодключитьОбработчикОжидания("ПриИзмененияИспользованияПодписанияИлиШифрования", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ПарольНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЭлектроннаяПодписьСлужебныйКлиент.ПолеПароляНачалоВыбора(ЭтотОбъект,
ВнутренниеДанные, СвойстваПароля, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НадписьНажатие(Элемент)
ИмяЭлемента = Лев(Элемент.Имя, СтрДлина(Элемент.Имя) - СтрДлина("Надпись"));
ИмяОшибки = ИмяЭлемента + "Ошибка";
ПараметрыПредупреждения = Новый Структура;
ПараметрыПредупреждения.Вставить("ЗаголовокПредупреждения", СтандартныйЗаголовокЭлемента(Элемент.Имя, ТипПодписи));
ПараметрыПредупреждения.Вставить("ТекстОшибкиКлиент", ПроверкиНаКлиенте[ИмяОшибки]);
ПараметрыПредупреждения.Вставить("ТекстОшибкиСервер",
?(ОперацииНаСервере Или ЕстьВстроенныйКриптопровайдер Или ЕстьУчетнаяЗаписьСервиса,
ПроверкиНаСервере[ИмяОшибки], ""));
ПараметрыПредупреждения.Вставить("ДополнительныеДанные", ДополнительныеДанные(ИмяЭлемента));
ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыПредупреждения, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НадписьОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
Если СтрЗаканчиваетсяНа(Элемент.Имя, "ОшибкаСерверНадпись") Или СтрЗаканчиваетсяНа(Элемент.Имя, "ОшибкаКлиентНадпись") Тогда
Возврат;
КонецЕсли;
ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьНавигационнуюСсылкуКлассификатора(Элемент,
НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка, ДополнительныеДанные());
КонецПроцедуры
&НаКлиенте
Процедура ПарольПриИзменении(Элемент)
ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьПарольВФорме(ЭтотОбъект,
ВнутренниеДанные, СвойстваПароля, Новый Структура("ПриИзмененииРеквизитаПароль", Истина));
КонецПроцедуры
&НаКлиенте
Процедура ЗапомнитьПарольПриИзменении(Элемент)
ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьПарольВФорме(ЭтотОбъект,
ВнутренниеДанные, СвойстваПароля, Новый Структура("ПриИзмененииРеквизитаЗапомнитьПароль", Истина));
КонецПроцедуры
&НаКлиенте
Процедура ПояснениеУстановленногоПароляНажатие(Элемент)
ЭлектроннаяПодписьСлужебныйКлиент.ПояснениеУстановленногоПароляНажатие(ЭтотОбъект, Элемент, СвойстваПароля);
КонецПроцедуры
&НаКлиенте
Процедура ПояснениеУстановленногоПароляРасширеннаяПодсказкаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
ЭлектроннаяПодписьСлужебныйКлиент.ПояснениеУстановленногоПароляОбработкаНавигационнойСсылки(
ЭтотОбъект, Элемент, НавигационнаяСсылка, СтандартнаяОбработка, СвойстваПароля);
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияСертификатМеткиВремениОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьСертификат(НавигационнаяСсылкаФорматированнойСтроки);
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияПроверкиУспешныНажатие(Элемент)
Если СтандартныеПроверки Тогда
ИменаГруппПоНазваниямПроверок = ИменаГруппПоНазваниямПроверок(Элементы);
ОсновныеПроверки = СтандартныеПроверки();
Если Не ЭтоВстроенныйКриптопровайдер Тогда
ОсновныеПроверки.Добавить("НаличиеПрограммы");
КонецЕсли;
Для каждого Проверка Из ОсновныеПроверки Цикл
Если Проверка = "ЗаконныйСертификат" Тогда
Продолжить;
КонецЕсли;
Элементы[ИменаГруппПоНазваниямПроверок[Проверка]].Видимость = Истина;
КонецЦикла;
КонецЕсли;
Для каждого Проверка Из ДополнительныеПроверки Цикл
Элементы["Группа" + Проверка.Имя].Видимость = Истина;
КонецЦикла;
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаПроверки;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Проверить(Команда)
ПроверкиУспешны = Истина;
Элементы.ГруппаСтраницы.Видимость = Истина;
Элементы.ФормаПроверить.Доступность = Ложь;
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаВыполняетсяПроверка;
ПроверитьСертификат(Новый ОписаниеОповещения("ПроверитьЗавершение", ЭтотОбъект));
КонецПроцедуры
&НаКлиенте
Процедура ВопросВПоддержку(Команда)
ВыгрузитьТехническуюИнформацию(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ИнформацияДляОтправкиВПоддержку(Команда)
Элементы.ГруппаТребуетсяПомощь.Скрыть();
ВыгрузитьТехническуюИнформацию(Истина);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиентеНаСервереБезКонтекста
Функция ИменаГруппПоНазваниямПроверок(ЭлементыФормы)
ИменаГруппПоНазваниямПроверок = Новый Соответствие;
ИменаГруппПоНазваниямПроверок.Вставить("ЗаконныйСертификат", ЭлементыФормы.ГруппаЗаконныйСертификат.Имя);
ИменаГруппПоНазваниямПроверок.Вставить("НаличиеСертификата", ЭлементыФормы.ГруппаНаличиеСертификата.Имя);
ИменаГруппПоНазваниямПроверок.Вставить("ДанныеСертификата", ЭлементыФормы.ГруппаДанныеСертификата.Имя);
ИменаГруппПоНазваниямПроверок.Вставить("НаличиеПрограммы", ЭлементыФормы.ГруппаНаличиеПрограммы.Имя);
ИменаГруппПоНазваниямПроверок.Вставить("Подписание", ЭлементыФормы.ГруппаПодписание.Имя);
ИменаГруппПоНазваниямПроверок.Вставить("Шифрование", ЭлементыФормы.ГруппаШифрование.Имя);
ИменаГруппПоНазваниямПроверок.Вставить("Расшифровка", ЭлементыФормы.ГруппаРасшифровка.Имя);
ИменаГруппПоНазваниямПроверок.Вставить("ПроверкаПодписи", ЭлементыФормы.ГруппаПроверкаПодписи.Имя);
Возврат ИменаГруппПоНазваниямПроверок;
КонецФункции
&НаКлиенте
Процедура ВыгрузитьТехническуюИнформацию(ВыгрузитьАрхив)
Если Не ПроверкаВыполнена Тогда
ПоказатьПредупреждение(,
НСтр("ru = 'Для сбора технической информации о возникшей проблеме выполните проверку сертификата.'"));
Возврат;
КонецЕсли;
СоставПроверок = СтандартныеПроверки();
Для Каждого Проверка Из ДополнительныеПроверки Цикл
СоставПроверок.Добавить(Проверка.Имя);
КонецЦикла;
ТекстОшибок = "";
ОписаниеФайлов = Новый Массив;
Сертификаты = Новый Массив;
Сертификаты.Добавить(Сертификат);
Для Каждого СертификатМеткиВремени Из СертификатыМетокВремени Цикл
Сертификаты.Добавить(СертификатМеткиВремени.АдресСертификата);
КонецЦикла;
ЭлектроннаяПодписьСлужебныйВызовСервера.ДобавитьОписаниеДополнительныхДанных(
Новый Структура("Сертификат", Сертификаты), ОписаниеФайлов, ТекстОшибок);
ТемаСообщения = "";
ТекстОшибок = ТекстОшибок + НСтр("ru = 'Результат проверки на клиенте'") + ":" + Символы.ПС;
ДополнитьТекстОшибками(ТекстОшибок, СоставПроверок, Ложь, ТемаСообщения);
ТекстОшибок = ТекстОшибок + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Результат проверки на сервере ""%1"":'"), ИмяСервера) + Символы.ПС;
ДополнитьТекстОшибками(ТекстОшибок, СоставПроверок, Истина, ТемаСообщения);
Если ВыгрузитьАрхив Тогда
ЭлектроннаяПодписьСлужебныйКлиент.СформироватьТехническуюИнформацию(
ТекстОшибок, Неопределено, , ОписаниеФайлов);
Иначе
ЭлектроннаяПодписьСлужебныйКлиент.СформироватьТехническуюИнформацию(
ТекстОшибок, Новый Структура("Тема, Сообщение",
?(ПустаяСтрока(ТемаСообщения), НСтр("ru = 'Проблема при проверке сертификата электронной подписи'"), ТемаСообщения),
ЭлектроннаяПодписьСлужебныйКлиент.ТекстОбращенияВТехническуюПоддержкуПриПроверкеСертификата()),
Неопределено, ОписаниеФайлов);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьЗавершение(Неопределен, Контекст) Экспорт
Элементы.ФормаПроверить.Доступность = Истина;
ВидимостьСтраниц(ЭтотОбъект);
Если СертификатыМетокВремени.Количество() = 0 Тогда
Элементы.ДекорацияСертификатМеткиВремени.Видимость = Ложь;
Иначе
Массив = Новый Массив;
Для Каждого СертификатМеткиВремени Из СертификатыМетокВремени Цикл
Если Не СертификатМеткиВремени.ПолученНаКлиенте Тогда
Массив.Добавить(СтроковыеФункцииКлиент.ФорматированнаяСтрока(
НСтр("ru = 'Сертификат метки времени, полученной на сервере: <a href = %1>%2</a>.'"),
СертификатМеткиВремени.АдресСертификата, СертификатМеткиВремени.Представление));
ИначеЕсли Не СертификатМеткиВремени.ПолученНаСервере Тогда
Массив.Добавить(СтроковыеФункцииКлиент.ФорматированнаяСтрока(
НСтр("ru = 'Сертификат метки времени, полученной на компьютере: <a href = %1>%2</a>.'"),
СертификатМеткиВремени.АдресСертификата, СертификатМеткиВремени.Представление));
Иначе
Массив.Добавить(СтроковыеФункцииКлиент.ФорматированнаяСтрока(
НСтр("ru = 'Сертификат полученной метки времени: <a href = %1>%2</a>.'"),
СертификатМеткиВремени.АдресСертификата, СертификатМеткиВремени.Представление));
КонецЕсли;
КонецЦикла;
Элементы.ДекорацияСертификатМеткиВремени.Заголовок = Новый ФорматированнаяСтрока(Массив);
Элементы.ДекорацияСертификатМеткиВремени.Видимость = Истина;
КонецЕсли;
Если Не ПроверкаПриВыборе Тогда
Возврат;
КонецЕсли;
Если КлиентскиеПараметры.Результат.ПроверкиПройдены Тогда
Закрыть(Истина);
Иначе
ПоказатьПредупреждениеОНевозможностиПродолжения();
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ВидимостьСтраниц(Форма)
Если Форма.ПроверкиУспешны = Истина Тогда
Форма.Элементы.ГруппаСтраницы.ТекущаяСтраница = Форма.Элементы.СтраницаПроверкиУспешны;
Форма.Элементы.ФормаЗакрыть.КнопкаПоУмолчанию = Истина;
Иначе
Форма.Элементы.ГруппаСтраницы.ТекущаяСтраница = Форма.Элементы.СтраницаПроверки;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПродолжитьОткрытие(Оповещение, ОбщиеВнутренниеДанные, ВходящиеКлиентскиеПараметры) Экспорт
ВнутренниеДанные = ОбщиеВнутренниеДанные;
КлиентскиеПараметры = ВходящиеКлиентскиеПараметры;
КлиентскиеПараметры.Вставить("Результат");
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ПриОткрытии", Истина);
Если КлиентскиеПараметры.Свойство("УказанКонтекстДругойОперации") Тогда
СвойстваСертификата = ОбщиеВнутренниеДанные;
КлиентскиеПараметры.КонтекстОперации.ПродолжитьОткрытие(
Неопределено, Неопределено, СвойстваСертификата);
Если СвойстваСертификата.Сертификат = Сертификат Тогда
СвойстваПароля = СвойстваСертификата.СвойстваПароля;
КонецЕсли;
ДополнительныеПараметры.Вставить("ПарольУказан");
ДополнительныеПараметры.Вставить("ПриУстановкеПароляИзДругойОперации", Истина);
КонецЕсли;
ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьПарольВФорме(ЭтотОбъект,
ВнутренниеДанные, СвойстваПароля, ДополнительныеПараметры);
Элементы.ЗапомнитьПароль.Доступность = Элементы.Пароль.Доступность;
Если Не Элементы.Пароль.Доступность Тогда
ТекущийЭлемент = Элементы.ФормаПроверить;
КонецЕсли;
Если КлиентскиеПараметры.Свойство("БезПодтверждения")
И КлиентскиеПараметры.БезПодтверждения
И (ДополнительныеПараметры.ПарольУказан
Или ДополнительныеПараметры.ВводитьПарольВПрограммеЭлектроннойПодписи) Тогда
Если Не КлиентскиеПараметры.Свойство("ОбработкаРезультата")
Или ТипЗнч(КлиентскиеПараметры.ОбработкаРезультата) <> Тип("ОписаниеОповещения") Тогда
Открыть();
КонецЕсли;
Контекст = Новый Структура("Оповещение", Оповещение);
ПроверитьСертификат(Новый ОписаниеОповещения(
"ПродолжитьОткрытиеПослеПроверкиСертификата", ЭтотОбъект, Контекст));
Возврат;
КонецЕсли;
Открыть();
ВыполнитьОбработкуОповещения(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПродолжитьОткрытиеПослеПроверкиСертификата(Результат, Контекст) Экспорт
Если КлиентскиеПараметры.Результат.ПроверкиПройдены Тогда
ВыполнитьОбработкуОповещения(Контекст.Оповещение, Истина);
Возврат;
КонецЕсли;
Если Не Открыта()
И Не (КлиентскиеПараметры.Свойство("НеПоказыватьРезультаты")
И КлиентскиеПараметры.НеПоказыватьРезультаты) Тогда
Открыть();
КонецЕсли;
Если ПроверкаПриВыборе Тогда
ПоказатьПредупреждениеОНевозможностиПродолжения();
КонецЕсли;
ВыполнитьОбработкуОповещения(Контекст.Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПриИзмененияИспользованияПодписанияИлиШифрования()
ОбновитьВидимостьНаСервере()
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьПредупреждениеОНевозможностиПродолжения()
ПоказатьПредупреждение(,
НСтр("ru = 'Не удалось продолжить, т.к. пройдены не все требуемые проверки.'"));
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьСертификат(Оповещение)
ПарольПринят = Ложь;
ПроверкиНаКлиенте = Новый Структура;
ПроверкиНаСервере = Новый Структура;
ДополнительныеДанныеПроверокНаКлиенте = Новый Структура;
ДополнительныеДанныеПроверокНаСервере = Новый Структура;
СертификатыМетокВремени.Очистить();
Элементы.ДекорацияСертификатМеткиВремени.Видимость = Ложь;
Если СтандартныеПроверки Тогда
ОсновныеПроверки = СтандартныеПроверки();
Если Не ЭтоВстроенныйКриптопровайдер Тогда
ОсновныеПроверки.Добавить("НаличиеПрограммы");
КонецЕсли;
Для каждого Проверка Из ОсновныеПроверки Цикл
УстановитьЭлемент(ЭтотОбъект, Проверка, Ложь, , , ОбъединятьРезультаты);
УстановитьЭлемент(ЭтотОбъект, Проверка, Истина, , , ОбъединятьРезультаты);
КонецЦикла;
КонецЕсли;
Для каждого Проверка Из ДополнительныеПроверки Цикл
УстановитьЭлемент(ЭтотОбъект, Проверка.Имя, Ложь, , , ОбъединятьРезультаты);
УстановитьЭлемент(ЭтотОбъект, Проверка.Имя, Истина, , , ОбъединятьРезультаты);
КонецЦикла;
Контекст = Новый Структура("Оповещение", Оповещение);
ПроверитьНаСторонеКлиента(Новый ОписаниеОповещения(
"ПроверитьСертификатПослеПроверкиНаКлиенте", ЭтотОбъект, Контекст));
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьСертификатПослеПроверкиНаКлиенте(Результат, Контекст) Экспорт
Если ЭтоВстроенныйКриптопровайдер Или ЭтоУчетнаяЗаписьСервиса Тогда
Если ОперацииНаСервере Тогда
ПроверитьНаСторонеСервераДополнительныеПроверки(СвойстваПароля.Значение);
КонецЕсли;
Если СтандартныеПроверки Тогда
Оповещение = Новый ОписаниеОповещения("ПроверитьСертификатПослеПроверкиНаКлиентеИСервере", ЭтотОбъект,
Контекст);
НовыйКонтекст = Новый Структура;
НовыйКонтекст.Вставить("ПроверкаНаКлиентеСертификатаСервиса", Истина);
НовыйКонтекст.Вставить("ПроверкаВСервисеВместоПроверкиНаСервере", Ложь);
ПроверитьНаСторонеКлиента(Оповещение, НовыйКонтекст);
Иначе
ПроверитьСертификатПослеПроверкиНаКлиентеИСервере(Результат, Контекст);
КонецЕсли;
Иначе
ПроверитьВСервисеВместоПроверкиНаСервере = СтандартныеПроверки
И ПроверятьЭлектронныеПодписиНаСервере
И (ЕстьВстроенныйКриптопровайдер Или ЕстьУчетнаяЗаписьСервиса)
И Не ОперацииНаСервере;
Если ПроверитьВСервисеВместоПроверкиНаСервере Тогда
Если ОперацииНаСервере Тогда
ПроверитьНаСторонеСервераДополнительныеПроверки(СвойстваПароля.Значение);
КонецЕсли;
Если СтандартныеПроверки И ОперацияАктивна() Тогда
Оповещение = Новый ОписаниеОповещения("ПроверитьСертификатПослеПроверкиНаКлиентеИСервере", ЭтотОбъект,
Контекст);
НовыйКонтекст = Новый Структура;
НовыйКонтекст.Вставить("ПроверкаВСервисеВместоПроверкиНаСервере", Истина);
НовыйКонтекст.Вставить("ПроверкаНаКлиентеСертификатаСервиса", Ложь);
ПроверитьНаСторонеКлиента(Оповещение, НовыйКонтекст);
Иначе
ПроверитьСертификатПослеПроверкиНаКлиентеИСервере(Результат, Контекст);
КонецЕсли;
Иначе
Если ОперацииНаСервере Тогда
Если СтандартныеПроверки Тогда
ПроверитьНаСторонеСервера(СвойстваПароля.Значение);
Иначе
ПроверитьНаСторонеСервераДополнительныеПроверки(СвойстваПароля.Значение);
КонецЕсли;
КонецЕсли;
ПроверитьСертификатПослеПроверкиНаКлиентеИСервере(Результат, Контекст);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьСертификатПослеПроверкиНаКлиентеИСервере(Результат, Контекст) Экспорт
Если ПарольПринят Тогда
ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьПарольВФорме(ЭтотОбъект,
ВнутренниеДанные, СвойстваПароля, Новый Структура("ПриУспешномВыполненииОперации", Истина));
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("ПроверкиПройдены", Ложь);
Результат.Вставить("ПроверкиНаКлиенте", ПроверкиНаКлиенте);
Результат.Вставить("ПроверкиНаСервере", ПроверкиНаСервере);
Результат.Вставить("ДополнительныеДанныеПроверокНаКлиенте", ДополнительныеДанныеПроверокНаКлиенте);
Результат.Вставить("ДополнительныеДанныеПроверокНаСервере", ДополнительныеДанныеПроверокНаСервере);
КлиентскиеПараметры.Вставить("Результат", Результат);
Если КлиентскиеПараметры.Свойство("ОбработкаРезультата")
И ТипЗнч(КлиентскиеПараметры.ОбработкаРезультата) = Тип("ОписаниеОповещения") Тогда
ВыполнитьОбработкуОповещения(КлиентскиеПараметры.ОбработкаРезультата, Результат.ПроверкиПройдены);
КонецЕсли;
ВыполнитьОбработкуОповещения(Контекст.Оповещение);
КонецПроцедуры
#Область ПроверкаНаКлиенте
&НаКлиенте
Процедура ПроверитьНаСторонеКлиента(Оповещение, Контекст = Неопределено)
ПроверкаВыполнена = Истина;
Если Контекст = Неопределено Тогда
Контекст = Новый Структура;
Контекст.Вставить("ПроверкаВСервисеВместоПроверкиНаСервере", Ложь);
Контекст.Вставить("ПроверкаНаКлиентеСертификатаСервиса", Ложь);
КонецЕсли;
Контекст.Вставить("Оповещение", Оповещение);
Если СтандартныеПроверки Тогда
ЭлектроннаяПодписьКлиент.УстановитьРасширение(Ложь, Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПодключенияРасширенияРаботыСКриптографией", ЭтотОбъект, Контекст),
НСтр("ru = 'Для продолжения установите расширение для работы с 1С:Предприятием.'"));
Иначе
Контекст.Вставить("МенеджерКриптографии", Неопределено);
ПроверитьНаСторонеКлиентаДополнительныеПроверки(Контекст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПодключенияРасширенияРаботыСКриптографией(Подключено, Контекст) Экспорт
ДанныеСертификата = ПолучитьИзВременногоХранилища(АдресСертификата);
Контекст.Вставить("АлгоритмПодписи",
ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(ДанныеСертификата));
Если Подключено <> Истина Тогда
ПараметрыСоздания = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.ПоказатьОшибку = Ложь;
ПараметрыСоздания.АлгоритмПодписи = Контекст.АлгоритмПодписи;
ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПопыткиСозданияМенеджераКриптографии", ЭтотОбъект, Контекст),
"ПроверкаСертификата", ПараметрыСоздания);
Возврат;
КонецЕсли;
Контекст.Вставить("ДанныеСертификата", ДанныеСертификата);
СертификатКриптографии = Новый СертификатКриптографии;
СертификатКриптографии.НачатьИнициализацию(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеИнициализацииСертификата", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиИнициализацииСертификата", ЭтотОбъект),
Контекст.ДанныеСертификата);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПопыткиСозданияМенеджераКриптографии(Результат, Контекст) Экспорт
УстановитьЭлемент(ЭтотОбъект, ИмяПервойПроверки, Ложь, Результат, Ложь, ОбъединятьРезультаты);
ВыполнитьОбработкуОповещения(Контекст.Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеОшибкиИнициализацииСертификата(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт
СтандартнаяОбработка = Ложь;
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
УстановитьЭлемент(ЭтотОбъект, ИмяПервойПроверки, Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
ВыполнитьОбработкуОповещения(Контекст.Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеИнициализацииСертификата(СертификатКриптографии, Контекст) Экспорт
Контекст.Вставить("СертификатКриптографии", СертификатКриптографии);
ПроверитьЗаконныйСертификатНаКлиенте(Контекст);
Контекст.Вставить("ЭтоОперацияВСервисе", Ложь);
Если ЭтоУчетнаяЗаписьСервиса И Не Контекст.ПроверкаНаКлиентеСертификатаСервиса Тогда
Контекст.Вставить("ЭтоОперацияВСервисе", Истина);
ОповещениеСледующее = Новый ОписаниеОповещения("ПроверитьНаСторонеКлиентаПослеАвторизацииВОблачнойПодписи", ЭтотОбъект, Контекст);
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
МодульСервисКриптографииDSSКлиент.ПроверкаАутентификацииПользователя(ОповещениеСледующее, Программа);
ИначеЕсли ЕстьУчетнаяЗаписьСервиса И Контекст.ПроверкаВСервисеВместоПроверкиНаСервере Тогда
Контекст.Вставить("ЭтоОперацияВСервисе", Истина);
Контекст.Вставить("НастройкиПользователя", Неопределено);
ОповещениеСледующее = Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПроверкиСертификатаОблачнойПодписи", ЭтотОбъект, Контекст);
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
МодульСервисКриптографииDSSКлиент.ПроверитьСертификат(ОповещениеСледующее, Контекст.НастройкиПользователя, Контекст.ДанныеСертификата);
ИначеЕсли ЭтоВстроенныйКриптопровайдер И Не Контекст.ПроверкаНаКлиентеСертификатаСервиса Тогда
Контекст.Вставить("ЭтоОперацияВСервисе", Истина);
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Отпечаток", Контекст.СертификатКриптографии.Отпечаток);
МодульХранилищеСертификатовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ХранилищеСертификатовКлиент");
МодульХранилищеСертификатовКлиент.НайтиСертификат(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПоискаСертификатаВМоделиСервиса", ЭтотОбъект, Контекст), СтруктураПоиска);
ИначеЕсли ЕстьВстроенныйКриптопровайдер И Контекст.ПроверкаВСервисеВместоПроверкиНаСервере Тогда
Контекст.Вставить("ЭтоОперацияВСервисе", Истина);
МодульСервисКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииКлиент");
МодульСервисКриптографииКлиент.ПроверитьСертификат(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПроверкиСертификатаВМоделиСервиса", ЭтотОбъект, Контекст),
Контекст.ДанныеСертификата);
Иначе
Если Контекст.ПроверкаНаКлиентеСертификатаСервиса Тогда
ПараметрыСоздания = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.АлгоритмПодписи = Контекст.АлгоритмПодписи;
ПараметрыСоздания.ПоказатьОшибку = Ложь;
ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии(
Новый ОписаниеОповещения("ПроверитьНаСторонеКлиентаПослеСозданияЛюбогоМенеджераКриптографии",
ЭтотОбъект, Контекст), "ПроверкаСертификата", ПараметрыСоздания);
Иначе
ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьСертификатПоОтпечатку(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПоискаСертификата", ЭтотОбъект, Контекст),
Base64Строка(Контекст.СертификатКриптографии.Отпечаток), Истина, Неопределено);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьЗаконныйСертификатНаКлиенте(Контекст)
Если Не Элементы.ГруппаЗаконныйСертификат.Видимость
Или Контекст.СертификатКриптографии.Субъект.Свойство("SN") Тогда
ОписаниеОшибки = "";
Иначе
ОписаниеОшибки = НСтр("ru = 'В описании субъекта сертификата не найдено поле ""SN"".'");
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "ЗаконныйСертификат", Ложь, ОписаниеОшибки, , ОбъединятьРезультаты);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПоискаСертификата(Результат, Контекст) Экспорт
Если ТипЗнч(Результат) = Тип("СертификатКриптографии") Тогда
УстановитьЭлемент(ЭтотОбъект, "НаличиеСертификата", Ложь, "", , ОбъединятьРезультаты);
Иначе
УстановитьЭлемент(ЭтотОбъект, "НаличиеСертификата", Ложь,
?(ТипЗнч(Результат) = Тип("Строка"), Результат, Результат.ОписаниеОшибки) + Символы.ПС + Символы.ПС
+ НСтр("ru = 'Проверка подписания, созданной подписи и расшифровки не могут быть выполнены.'"),
Истина, ОбъединятьРезультаты);
КонецЕсли;
ПараметрыСоздания = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.АлгоритмПодписи = Контекст.АлгоритмПодписи;
ПараметрыСоздания.ПоказатьОшибку = Ложь;
ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеСозданияЛюбогоМенеджераКриптографии", ЭтотОбъект, Контекст),
"ПроверкаСертификата", ПараметрыСоздания);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПоискаСертификатаВМоделиСервиса(Результат, Контекст) Экспорт
ОписаниеОшибки = "";
Если Не Результат.Выполнено Тогда
ОписаниеОшибки = Результат.ОписаниеОшибки.Описание;
ИначеЕсли Не ЗначениеЗаполнено(Результат.Сертификат) Тогда
ОписаниеОшибки = НСтр("ru = 'Сертификат отсутствует в сервисе (возможно удален).'");
КонецЕсли;
Если Не ПустаяСтрока(ОписаниеОшибки) Тогда
ОписаниеОшибки = ОписаниеОшибки + Символы.ПС
+ НСтр("ru = 'Проверка подписания, созданной подписи и расшифровки не могут быть выполнены.'");
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "НаличиеСертификата", Истина, ОписаниеОшибки, , ОбъединятьРезультаты);
Если Не ПустаяСтрока(ОписаниеОшибки) Тогда
ВыполнитьОбработкуОповещения(Контекст.Оповещение);
Возврат;
КонецЕсли;
МодульСервисКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииКлиент");
МодульСервисКриптографииКлиент.ПроверитьСертификат(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПроверкиСертификатаВМоделиСервиса", ЭтотОбъект, Контекст),
Результат.Сертификат.Сертификат);
КонецПроцедуры
&НаКлиенте
Асинх Процедура ПроверитьНаСторонеКлиентаПослеСозданияЛюбогоМенеджераКриптографии(Результат, Контекст) Экспорт
Если ТипЗнч(Результат) = Тип("МенеджерКриптографии") Тогда
ДополнительныеПараметрыПроверок = ЭлектроннаяПодписьСлужебныйКлиент.ДополнительныеПараметрыПроверкиСертификата();
ДополнительныеПараметрыПроверок.ВыполнятьПроверкуУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат();
ДополнительныеПараметрыПроверок.ОбъединитьОшибкиДанныхСертификата = Ложь;
ДополнительныеПараметрыПроверок.ПроверитьВСервисеПослеОшибки = Ложь;
ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьСертификат(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПроверкиСертификата", ЭтотОбъект, Контекст),
Контекст.СертификатКриптографии, Результат,,ДополнительныеПараметрыПроверок);
Возврат;
КонецЕсли;
Токен = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьТокенПоСертификату(Контекст.СертификатКриптографии);
Если Токен = Неопределено Тогда
ПроверитьНаСторонеКлиентаПослеПроверкиСертификата(Результат, Контекст);
Возврат;
КонецЕсли;
Контекст.Вставить("МенеджерКриптографии", Неопределено);
Токен.Вставить("Пароль", СвойстваПароля.Значение);
Контекст.Вставить("Токен", Токен);
Если Результат = Истина Тогда
ОписаниеОшибкиНаКлиенте = "";
ИначеЕсли ТипЗнч(Результат) = Тип("Структура") Тогда
ОписаниеОшибкиНаКлиенте = Результат.ОписаниеОшибкиНаКлиенте;
Иначе
ОписаниеОшибкиНаКлиенте = Результат;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "ДанныеСертификата", Ложь,
НСтр("ru = 'Проверка корректности сертификата средствами токена появится в следующих версиях приложения.'"),
Истина, ОбъединятьРезультаты);
УстановитьЭлемент(ЭтотОбъект, "НаличиеПрограммы", Ложь, НСтр("ru = 'Проверка сертификата выполняется средствами токена.'" + Символы.ПС + ОписаниеОшибкиНаКлиенте),
Ложь, ОбъединятьРезультаты);
ОписаниеОшибки = Ждать ДополнительнаяПроверкаНаВозможностьПодписания(Контекст.СертификатКриптографии, Ложь);
ДанныеПодписи = Неопределено;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ПараметрыПодписи = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыПодписиНаТокене(Токен,
Контекст.СертификатКриптографии, ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES"));
ДанныеПодписи = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ПодписьНаТокене(ПараметрыПодписи, Контекст.ДанныеСертификата);
Если ТипЗнч(ДанныеПодписи) = Тип("Строка") Тогда
ОписаниеОшибки = ДанныеПодписи;
Иначе
Если ЗначениеЗаполнено(ТипПодписи) И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
ПараметрыПодписи.ТипПодписи = ТипПодписи;
ДанныеПодписи = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ПодписьНаТокене(ПараметрыПодписи, Контекст.ДанныеСертификата);
Если ТипЗнч(ДанныеПодписи) = Тип("Строка") Тогда
ОписаниеОшибки = ДанныеПодписи;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "Подписание", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Если ТипЗнч(ДанныеПодписи) = Тип("ДвоичныеДанные") Тогда
ПараметрыПроверкиПодписи = Новый Структура;
ПараметрыПроверкиПодписи.Вставить("Подпись", ДанныеПодписи);
ПараметрыПроверкиПодписи.Вставить("АлгоритмПодписи", Контекст.АлгоритмПодписи);
ПараметрыПроверкиПодписи.Вставить("РезультатПроверки", ЭлектроннаяПодписьКлиентСервер.РезультатПроверкиПодписи());
ПараметрыПроверкиПодписи.Вставить("Оповещение", Новый ОписаниеОповещения("ПослеПроверкиПодписиНаТокене", ЭтотОбъект, Контекст));
ПараметрыПроверкиПодписи.Вставить("ПроверятьСертификат",
ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат());
ПараметрыПроверкиПодписи.Вставить("ИсходныеДанные", Контекст.ДанныеСертификата);
ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьПодписьСредствамиТокена(ПараметрыПроверкиПодписи);
Иначе
ПослеПроверкиПодписиНаТокене(Неопределено, Контекст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Асинх Процедура ПослеПроверкиПодписиНаТокене(Результат, Контекст) Экспорт
Если Результат <> Неопределено Тогда
Если Не Результат.ПодписьВерна Тогда
ОписаниеОшибки = ?(ЗначениеЗаполнено(Результат.ОшибкаМатематическойПроверкиПодписи),
Результат.ОшибкаМатематическойПроверкиПодписи, Результат.ОшибкаПроверкиДополнительныхАтрибутов);
УстановитьЭлемент(ЭтотОбъект, "ПроверкаПодписи", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Иначе
УстановитьЭлемент(ЭтотОбъект, "ПроверкаПодписи", Ложь, "", Ложь, ОбъединятьРезультаты);
КонецЕсли;
КонецЕсли;
ПараметрыШифрования = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыШифрованияНаТокене(Контекст.Токен,
Контекст.СертификатКриптографии);
ЗашифрованныеДанные = Ждать ЭлектроннаяПодписьКлиентЛокализация.ШифрованиеНаТокене(ПараметрыШифрования, Контекст.ДанныеСертификата);
Если ТипЗнч(ЗашифрованныеДанные) = Тип("Строка") Тогда
УстановитьЭлемент(ЭтотОбъект, "Шифрование", Ложь, ЗашифрованныеДанные, Истина, ОбъединятьРезультаты);
Иначе
Если ТипЗнч(ЗашифрованныеДанные) <> Тип("ДвоичныеДанные") Тогда
УстановитьЭлемент(ЭтотОбъект, "Шифрование", Ложь, НСтр(
"ru = 'Не удалось зашифровать данные средствами токена.'"), Истина, ОбъединятьРезультаты);
Иначе
УстановитьЭлемент(ЭтотОбъект, "Шифрование", Ложь, "", Ложь, ОбъединятьРезультаты);
ПараметрыРасшифровки = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыРасшифровкиНаТокене(Контекст.Токен,
Контекст.СертификатКриптографии);
РасшифрованныеДанные = Ждать ЭлектроннаяПодписьКлиентЛокализация.РасшифровкаНаТокене(ПараметрыРасшифровки, ЗашифрованныеДанные);
Если ТипЗнч(РасшифрованныеДанные) = Тип("Строка") Тогда
УстановитьЭлемент(ЭтотОбъект, "Расшифровка", Ложь, РасшифрованныеДанные, Истина, ОбъединятьРезультаты);
Иначе
УстановитьЭлемент(ЭтотОбъект, "Расшифровка", Ложь, "", Ложь, ОбъединятьРезультаты);
КонецЕсли;
КонецЕсли;
КонецЕсли;
ПроверитьНаСторонеКлиентаДополнительныеПроверки(Контекст);
КонецПроцедуры
&НаКлиенте
Асинх Процедура ПроверитьНаСторонеКлиентаПослеПроверкиСертификата(Результат, Контекст) Экспорт
Если Результат = Истина Тогда
ОписаниеОшибкиНаКлиенте = "";
ИначеЕсли ТипЗнч(Результат) = Тип("Структура") Тогда
ОписаниеОшибкиНаКлиенте = Результат.ОписаниеОшибкиНаКлиенте;
Иначе
ОписаниеОшибкиНаКлиенте = Результат;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "ДанныеСертификата", Ложь, ОписаниеОшибкиНаКлиенте, Истина, ОбъединятьРезультаты);
Если Контекст.ПроверкаНаКлиентеСертификатаСервиса Тогда
ВыполнитьОбработкуОповещения(Контекст.Оповещение);
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(Программа) Тогда
ПараметрыСоздания = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.Программа = Программа;
ПараметрыСоздания.ПоказатьОшибку = Ложь;
ПараметрыСоздания.ИнтерактивныйРежим = СертификатВводитьПарольВПрограммеЭлектроннойПодписи;
ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеСозданияМенеджераКриптографии", ЭтотОбъект, Контекст),
"ПроверкаСертификата", ПараметрыСоздания);
Иначе
ПрограммаАвтоНаКлиентеРезультат = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ПрограммаПоСертификату(
АдресСертификата);
ПрограммаАвтоНаКлиенте = ПрограммаАвтоНаКлиентеРезультат.Программа;
Если ПрограммаАвтоНаКлиентеРезультат.Программа = Неопределено Тогда
ОписаниеОшибки = ЭлектроннаяПодписьСлужебныйКлиентСервер.ТекстОшибкиНеУдалосьОпределитьПрограмму(
ПрограммаАвтоНаКлиентеРезультат.Ошибка);
ПроверитьНаСторонеКлиентаПослеСозданияМенеджераКриптографии(ОписаниеОшибки, Контекст);
Иначе
ПараметрыСоздания = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.Программа = ПрограммаАвтоНаКлиенте;
ПараметрыСоздания.ПоказатьОшибку = Ложь;
ПараметрыСоздания.ИнтерактивныйРежим = СертификатВводитьПарольВПрограммеЭлектроннойПодписи;
ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии(
Новый ОписаниеОповещения("ПроверитьНаСторонеКлиентаПослеСозданияМенеджераКриптографии", ЭтотОбъект,
Контекст), "ПроверкаСертификата", ПараметрыСоздания);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПроверкиСертификатаВМоделиСервиса(Результат, Контекст) Экспорт
Если Результат.Выполнено И Результат.Действителен Тогда
ОписаниеОшибки = "";
Иначе
ОписаниеОшибки = Результат.ИнформацияОбОшибке.Описание;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "ДанныеСертификата", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Если Контекст.ПроверкаВСервисеВместоПроверкиНаСервере Тогда
ВыполнитьОбработкуОповещения(Контекст.Оповещение);
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(Программа) Тогда
ПроверитьНаСторонеКлиентаВМоделиСервиса("СервисКриптографии", Контекст);
Иначе
ОписаниеОшибки = НСтр("ru = 'В сертификате не указано приложение для использования закрытого ключа.'");
ПроверитьНаСторонеКлиентаПослеСозданияМенеджераКриптографии(ОписаниеОшибки, Контекст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Асинх Процедура ПроверитьНаСторонеКлиентаПослеСозданияМенеджераКриптографии(Результат, Контекст) Экспорт
Контекст.Вставить("МенеджерКриптографии", Неопределено);
Если ТипЗнч(Результат) = Тип("МенеджерКриптографии") Тогда
Контекст.МенеджерКриптографии = Результат;
ОписаниеОшибки = "";
Иначе
ОписаниеОшибки = Результат + Символы.ПС + Символы.ПС
+ НСтр("ru = 'Проверка подписания, созданной подписи, шифрования и
|расшифровки не могут быть выполнены.'");
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "НаличиеПрограммы", Контекст.ЭтоОперацияВСервисе, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Если Контекст.МенеджерКриптографии = Неопределено Тогда
ВыполнитьОбработкуОповещения(Контекст.Оповещение);
Возврат;
КонецЕсли;
Если Не ЭлектроннаяПодписьСлужебныйКлиент.ИспользуетсяИнтерактивныйРежимКриптографии(Контекст.МенеджерКриптографии) Тогда
Контекст.МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = СвойстваПароля.Значение;
КонецЕсли;
ОписаниеОшибки = Ждать ДополнительнаяПроверкаНаВозможностьПодписания(Контекст.СертификатКриптографии, Ложь);
Если ПроверкиНаКлиенте.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
Попытка
ДанныеПодписи = Ждать Контекст.МенеджерКриптографии.ПодписатьАсинх(Контекст.ДанныеСертификата, Контекст.СертификатКриптографии);
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ОписаниеОшибки);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
УстановитьЭлемент(ЭтотОбъект, "Подписание", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
ПроверитьНаСторонеКлиентаПослеПодписания(Null, Контекст);
Возврат;
Иначе
ПарольПринят = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(ТипПодписи) И ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES")
И ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
Попытка
НастройкиПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.НастройкиСозданияПодписи(ТипПодписи,
ЭлектроннаяПодписьКлиент.ОбщиеНастройки().АдресаСерверовМетокВремени);
Контекст.МенеджерКриптографии.АдресаСерверовМетокВремени = НастройкиПодписи.АдресаСерверовМетокВремени;
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ОписаниеОшибки);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
УстановитьЭлемент(ЭтотОбъект, "Подписание", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
ПроверитьНаСторонеКлиентаПослеПодписания(Null, Контекст);
Возврат;
КонецЕсли;
Попытка
ДанныеПодписи = Ждать Контекст.МенеджерКриптографии.ПодписатьАсинх(Контекст.ДанныеСертификата, Контекст.СертификатКриптографии,
НастройкиПодписи.ТипПодписи);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
УстановитьЭлемент(ЭтотОбъект, "Подписание", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
ПроверитьНаСторонеКлиентаПослеПодписания(Null, Контекст);
Возврат;
КонецЕсли;
КонецЕсли;
ПроверитьНаСторонеКлиентаПослеПодписания(ДанныеПодписи, Контекст);
Иначе
ПроверитьНаСторонеКлиентаПослеПодписания(Null, Контекст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Асинх Процедура ПроверитьНаСторонеКлиентаВМоделиСервиса(Результат, Контекст)
Контекст.Вставить("МенеджерКриптографии", Неопределено);
Если ТипЗнч(Результат) = Тип("Строка") И Результат = "СервисКриптографии" Тогда
Контекст.МенеджерКриптографии = Результат;
ОписаниеОшибки = "";
Иначе
ОписаниеОшибки = Результат + Символы.ПС + Символы.ПС
+ НСтр("ru = 'Проверка подписания, созданной подписи, шифрования и
|расшифровки не могут быть выполнены.'");
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "НаличиеПрограммы", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Если Контекст.МенеджерКриптографии = Неопределено Тогда
ВыполнитьОбработкуОповещения(Контекст.Оповещение);
Возврат;
КонецЕсли;
ОписаниеОшибки = Ждать ДополнительнаяПроверкаНаВозможностьПодписания(Контекст.СертификатКриптографии, Истина);
Если ПроверкиНаКлиенте.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
МодульСервисКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииКлиент");
МодульСервисКриптографииКлиент.Подписать(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПодписанияВМоделиСервиса", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиПодписания", ЭтотОбъект),
Контекст.ДанныеСертификата, Контекст.ДанныеСертификата);
Иначе
ПроверитьНаСторонеКлиентаПослеПодписанияВМоделиСервиса(Null, Контекст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеОшибкиПодписания(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт
СтандартнаяОбработка = Ложь;
ПроверитьНаСторонеКлиентаПослеПодписания(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке), Контекст);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПодписания(ДанныеПодписи, Контекст)
Если ДанныеПодписи <> Null Тогда
Если ТипЗнч(ДанныеПодписи) = Тип("Строка") Тогда
ОписаниеОшибки = ДанныеПодписи;
Иначе
ОписаниеОшибки = "";
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ОписаниеОшибки);
КонецЕсли;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ПарольПринят = Истина;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "Подписание", Контекст.ЭтоОперацияВСервисе, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
КонецЕсли;
Если ДанныеПодписи <> Null И ПроверкиНаКлиенте.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
Контекст.Вставить("ДанныеПодписи", ДанныеПодписи);
Контекст.МенеджерКриптографии.НачатьПроверкуПодписи(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПроверкиПодписи", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиПроверкиПодписи", ЭтотОбъект),
Контекст.ДанныеСертификата, ДанныеПодписи);
Иначе
ПроверитьНаСторонеКлиентаПослеПроверкиПодписи(Null, Контекст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПодписанияВМоделиСервиса(ДанныеПодписи, Контекст) Экспорт
Если ТипЗнч(ДанныеПодписи) = Тип("Структура") Тогда
Если Не ДанныеПодписи.Выполнено Тогда
ОписаниеОшибки = ДанныеПодписи.ИнформацияОбОшибке.Описание;
Иначе
ОписаниеОшибки = "";
ДанныеПодписи = ДанныеПодписи.Подпись;
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ОписаниеОшибки);
КонецЕсли;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ПарольПринят = Истина;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "Подписание", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
КонецЕсли;
Если ДанныеПодписи <> Null И ПроверкиНаСервере.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
МодульСервисКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииКлиент");
МодульСервисКриптографииКлиент.ПроверитьПодпись(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПроверкиПодписиВМоделиСервиса", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиПроверкиПодписи", ЭтотОбъект),
ДанныеПодписи, Контекст.ДанныеСертификата);
Иначе
ПроверитьНаСторонеКлиентаПослеПроверкиПодписиВМоделиСервиса(Null, Контекст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеОшибкиПроверкиПодписи(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт
СтандартнаяОбработка = Ложь;
ПроверитьНаСторонеКлиентаПослеПроверкиПодписи(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке), Контекст);
КонецПроцедуры
&НаКлиенте
Асинх Процедура ПроверитьНаСторонеКлиентаПослеПроверкиПодписи(Сертификат, Контекст) Экспорт
Если Сертификат <> Null Тогда
Если ТипЗнч(Сертификат) = Тип("Строка") Тогда
ОписаниеОшибки = Сертификат;
Иначе
ОписаниеОшибки = "";
КонецЕсли;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) И ЗначениеЗаполнено(ТипПодписи) И ТипПодписи
<> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
Попытка
СвойстваПодписи = Ждать ЭлектроннаяПодписьСлужебныйКлиент.СвойстваПодписиЧтениеМенеджеромКриптографии(
Контекст.ДанныеПодписи, Контекст.МенеджерКриптографии, Истина);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) И ЗначениеЗаполнено(СвойстваПодписи.ТекстОшибки) Тогда
ОписаниеОшибки = СвойстваПодписи.ТекстОшибки;
ИначеЕсли Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ДанныеСертификатаМеткиВремени = СвойстваПодписи.Сертификаты[СвойстваПодписи.Сертификаты.ВГраница()];
СертификатМеткиВремени = Новый СертификатКриптографии();
Ждать СертификатМеткиВремени.ИнициализироватьАсинх(ДанныеСертификатаМеткиВремени);
СвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(
СертификатМеткиВремени, ЭлектроннаяПодписьСлужебныйКлиент.РазницаСУниверсальнымВременем());
Найдено = СертификатыМетокВремени.НайтиСтроки(Новый Структура("Отпечаток",
СвойстваСертификата.Отпечаток));
Если Найдено.Количество() = 0 Тогда
НоваяСтрока = СертификатыМетокВремени.Добавить();
НоваяСтрока.АдресСертификата = ПоместитьВоВременноеХранилище(ДанныеСертификатаМеткиВремени,
УникальныйИдентификатор);
НоваяСтрока.Отпечаток = СвойстваСертификата.Отпечаток;
НоваяСтрока.ПолученНаКлиенте = Истина;
НоваяСтрока.Представление = СвойстваСертификата.Представление;
Иначе
Найдено[0].ПолученНаКлиенте = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "ПроверкаПодписи", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
КонецЕсли;
Контекст.МенеджерКриптографии.НачатьШифрование(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеШифрования", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиШифрования", ЭтотОбъект),
Контекст.ДанныеСертификата, Контекст.СертификатКриптографии);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПроверкиПодписиВМоделиСервиса(Результат, Контекст) Экспорт
Если ТипЗнч(Результат) = Тип("Структура") Тогда
Если Не Результат.Выполнено Тогда
ОписаниеОшибки = Результат.ИнформацияОбОшибке.Описание;
Иначе
ОписаниеОшибки = "";
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "ПроверкаПодписи", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
КонецЕсли;
МодульСервисКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииКлиент");
МодульСервисКриптографииКлиент.Зашифровать(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеШифрованияВМоделиСервиса", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиШифрования", ЭтотОбъект),
Контекст.ДанныеСертификата, Контекст.ДанныеСертификата);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеОшибкиШифрования(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт
СтандартнаяОбработка = Ложь;
ПроверитьНаСторонеКлиентаПослеШифрования(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке), Контекст);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеШифрования(ЗашифрованныеДанные, Контекст) Экспорт
Если ТипЗнч(ЗашифрованныеДанные) = Тип("Строка") Тогда
ОписаниеОшибки = ЗашифрованныеДанные;
Иначе
ОписаниеОшибки = "";
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеЗашифрованныеДанные(ЗашифрованныеДанные, ОписаниеОшибки);
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "Шифрование", Контекст.ЭтоОперацияВСервисе, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Если ПроверкиНаКлиенте.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
Контекст.МенеджерКриптографии.НачатьРасшифровку(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеРасшифровки", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиРасшифровки", ЭтотОбъект),
ЗашифрованныеДанные);
Иначе
ПроверитьНаСторонеКлиентаПослеРасшифровки(Null, Контекст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеШифрованияВМоделиСервиса(Результат, Контекст) Экспорт
Если ТипЗнч(Результат) = Тип("Структура") Тогда
Если Не Результат.Выполнено Тогда
ОписаниеОшибки = Результат.ИнформацияОбОшибке.Описание;
Иначе
ОписаниеОшибки = "";
ЗашифрованныеДанные = Результат.ЗашифрованныеДанные;
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеЗашифрованныеДанные(ЗашифрованныеДанные, ОписаниеОшибки);
КонецЕсли;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "Шифрование", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Если ПроверкиНаСервере.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
МодульСервисКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииКлиент");
МодульСервисКриптографииКлиент.Расшифровать(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеРасшифровкиВМоделиСервиса", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиРасшифровки", ЭтотОбъект),
Результат.ЗашифрованныеДанные);
Иначе
ПроверитьНаСторонеКлиентаПослеРасшифровкиВМоделиСервиса(Null, Контекст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеОшибкиРасшифровки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт
СтандартнаяОбработка = Ложь;
ПроверитьНаСторонеКлиентаПослеРасшифровки(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке), Контекст);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеРасшифровки(РасшифрованныеДанные, Контекст) Экспорт
Если РасшифрованныеДанные <> Null Тогда
Если ТипЗнч(РасшифрованныеДанные) = Тип("Строка") Тогда
ОписаниеОшибки = РасшифрованныеДанные;
Иначе
ОписаниеОшибки = "";
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеРасшифрованныеДанные(РасшифрованныеДанные, ОписаниеОшибки);
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "Расшифровка", Контекст.ЭтоОперацияВСервисе, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
КонецЕсли;
ПроверитьНаСторонеКлиентаДополнительныеПроверки(Контекст);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеРасшифровкиВМоделиСервиса(Результат, Контекст) Экспорт
Если ТипЗнч(Результат) = Тип("Структура") Тогда
Если Не Результат.Выполнено Тогда
ОписаниеОшибки = Результат.ИнформацияОбОшибке.Описание;
Иначе
ОписаниеОшибки = "";
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеРасшифрованныеДанные(Результат.РасшифрованныеДанные, ОписаниеОшибки);
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "Расшифровка", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
КонецЕсли;
ПроверитьНаСторонеКлиентаДополнительныеПроверки(Контекст);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаДополнительныеПроверки(Контекст)
Контекст.Вставить("Индекс", -1);
ПроверитьНаСторонеКлиентаЦиклНачало(Контекст);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеДополнительнойПроверки(Неопределен, Контекст) Экспорт
ПараметрыВыполнения = ПараметрыВыполненияКонтекста.Получить(Контекст);
ПараметрыВыполненияКонтекста.Удалить(Контекст);
УстановитьЭлемент(ЭтотОбъект, Контекст.ЭлементСписка.Имя, Ложь,
ПараметрыВыполнения.ОписаниеОшибки,
ПараметрыВыполнения.ЭтоПредупреждение <> Истина,
ОбъединятьРезультаты);
ПроверитьНаСторонеКлиентаЦиклНачало(Контекст);
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаЦиклНачало(Контекст)
Если ДополнительныеПроверки.Количество() <= Контекст.Индекс + 1 Тогда
ВыполнитьОбработкуОповещения(Контекст.Оповещение);
Возврат;
КонецЕсли;
Контекст.Индекс = Контекст.Индекс + 1;
Контекст.Вставить("ЭлементСписка", ДополнительныеПроверки[Контекст.Индекс]);
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("Сертификат", Сертификат);
ПараметрыВыполнения.Вставить("Проверка", Контекст.ЭлементСписка.Имя);
ПараметрыВыполнения.Вставить("МенеджерКриптографии", Контекст.МенеджерКриптографии);
ПараметрыВыполнения.Вставить("ОписаниеОшибки", "");
ПараметрыВыполнения.Вставить("ЭтоПредупреждение", Ложь);
ПараметрыВыполнения.Вставить("ОжидатьПродолжения", Ложь);
ПараметрыВыполнения.Вставить("Пароль", ?(ВводитьПароль, СвойстваПароля.Значение, Неопределено));
ПараметрыВыполнения.Вставить("РезультатыПроверок", ПроверкиНаКлиенте);
ПараметрыВыполнения.Вставить("Оповещение", Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеДополнительнойПроверки", ЭтотОбъект, Контекст));
Если ТипЗнч(ПараметрыВыполненияКонтекста) <> Тип("Соответствие") Тогда
ПараметрыВыполненияКонтекста = Новый Соответствие;
КонецЕсли;
ПараметрыВыполненияКонтекста.Вставить(Контекст, ПараметрыВыполнения);
Попытка
ЭлектроннаяПодписьКлиентПереопределяемый.ПриДополнительнойПроверкеСертификата(ПараметрыВыполнения);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПараметрыВыполнения.ОжидатьПродолжения = Ложь;
ПараметрыВыполнения.ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
КонецПопытки;
Если ПараметрыВыполнения.ОжидатьПродолжения <> Истина Тогда
ПроверитьНаСторонеКлиентаПослеДополнительнойПроверки(Неопределено, Контекст);
КонецЕсли;
КонецПроцедуры
#Область ПроверкаНаКлиентеОблачнаяПодпись
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеАвторизацииВОблачнойПодписи(РезультатВызова, Контекст) Экспорт
Если Не РезультатВызова.Выполнено Тогда
ОписаниеОшибки = РезультатВызова.Ошибка;
КонецЕсли;
Если Не ПустаяСтрока(ОписаниеОшибки) Тогда
Возврат;
КонецЕсли;
Контекст.Вставить("НастройкиПользователя", РезультатВызова.НастройкиПользователя);
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
МодульСервисКриптографииDSSКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиентСервер");
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Отпечаток", МодульСервисКриптографииDSSКлиентСервер.ТрансформироватьОтпечаток(Контекст.СертификатКриптографии.Отпечаток));
МодульСервисКриптографииDSSКлиент.НайтиСертификат(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПоискаСертификатаОблачнойПодписи", ЭтотОбъект, Контекст), СтруктураПоиска);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПоискаСертификатаОблачнойПодписи(РезультатВызова, Контекст) Экспорт
ОписаниеОшибки = "";
Если Не ОперацияАктивна() Тогда
ОписаниеОшибки = НСтр("ru = 'Форма проверки закрыта.'");
ИначеЕсли Не РезультатВызова.Выполнено Тогда
ОписаниеОшибки = РезультатВызова.Ошибка;
ИначеЕсли Не ЗначениеЗаполнено(РезультатВызова.ДанныеСертификата) Тогда
ОписаниеОшибки = НСтр("ru = 'Сертификат отсутствует в сервисе (возможно удален).'");
КонецЕсли;
Если Не ПустаяСтрока(ОписаниеОшибки) Тогда
ОписаниеОшибки = ОписаниеОшибки + Символы.ПС
+ НСтр("ru = 'Проверка подписания, созданной подписи и расшифровки не могут быть выполнены.'");
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "НаличиеСертификата", Истина, ОписаниеОшибки, , ОбъединятьРезультаты);
Если Не ПустаяСтрока(ОписаниеОшибки) Тогда
ВыполнитьОбработкуОповещения(Контекст.Оповещение);
Возврат;
КонецЕсли;
ОбработчикСледующий = Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПроверкиСертификатаОблачнойПодписи", ЭтотОбъект, Контекст);
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
МодульСервисКриптографииDSSКлиент.ПроверитьСертификат(ОбработчикСледующий, Контекст.НастройкиПользователя,
РезультатВызова.ДанныеСертификата.Сертификат);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПроверкиСертификатаОблачнойПодписи(Результат, Контекст) Экспорт
Если Не ОперацияАктивна() Тогда
ОписаниеОшибки = НСтр("ru = 'Форма проверки закрыта.'");
ИначеЕсли Результат.Выполнено И Результат.Результат Тогда
ОписаниеОшибки = "";
Иначе
ОписаниеОшибки = ЭлектроннаяПодписьСлужебныйКлиент.ТекстОшибкиОблачнаяПодпись("ПроверкаСертификата",
Результат, Истина);
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "ДанныеСертификата", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Если Контекст.ПроверкаВСервисеВместоПроверкиНаСервере Тогда
ВыполнитьОбработкуОповещения(Контекст.Оповещение);
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(Программа) Тогда
ПроверитьНаСторонеКлиентаОблачнаяПодпись("ОблачнаяПодпись", Контекст);
Иначе
ОписаниеОшибки = НСтр("ru = 'В сертификате не указано приложение для использования закрытого ключа.'");
ПроверитьНаСторонеКлиентаПослеСозданияМенеджераКриптографии(ОписаниеОшибки, Контекст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Асинх Процедура ПроверитьНаСторонеКлиентаОблачнаяПодпись(Результат, Контекст)
Контекст.Вставить("МенеджерКриптографии", Неопределено);
Если Не ОперацияАктивна() Тогда
ОписаниеОшибки = НСтр("ru = 'Форма проверки закрыта.'");
ИначеЕсли ТипЗнч(Результат) = Тип("Строка") И Результат = "ОблачнаяПодпись" Тогда
Контекст.МенеджерКриптографии = Результат;
ОписаниеОшибки = "";
Иначе
ОписаниеОшибки = Результат + Символы.ПС + Символы.ПС
+ НСтр("ru = 'Проверка подписания, созданной подписи, шифрования и
|расшифровки не могут быть выполнены.'");
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "НаличиеПрограммы", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Если Контекст.МенеджерКриптографии = Неопределено Тогда
ВыполнитьОбработкуОповещения(Контекст.Оповещение);
Возврат;
КонецЕсли;
ОписаниеОшибки = Ждать ДополнительнаяПроверкаНаВозможностьПодписания(Контекст.СертификатКриптографии, Истина);
Если ПроверкиНаСервере.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
МодульСервисКриптографииDSSКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиентСервер");
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
ОбработчикСледующий = Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПодписанияОблачнаяПодпись", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиПодписания", ЭтотОбъект);
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Отпечаток", МодульСервисКриптографииDSSКлиентСервер.ТрансформироватьОтпечаток(Контекст.СертификатКриптографии.Отпечаток));
ЗначениеПинКода = ?(ЗначениеЗаполнено(СвойстваПароля.Значение), СвойстваПароля.Значение, Неопределено);
ПараметрыОперации = Новый Структура;
ПараметрыОперации.Вставить("ПинКод", МодульСервисКриптографииDSSКлиент.ПодготовитьОбъектПароля(ЗначениеПинКода));
МодульСервисКриптографииDSSКлиент.Подписать(
ОбработчикСледующий,
Контекст.НастройкиПользователя,
Контекст.ДанныеСертификата,
,
СтруктураПоиска,
ПараметрыОперации);
Иначе
ПроверитьНаСторонеКлиентаПослеПодписанияОблачнаяПодпись(Неопределено, Контекст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПодписанияОблачнаяПодпись(РезультатВызова, Контекст) Экспорт
ОписаниеОшибки = Неопределено;
Если Не ОперацияАктивна() Тогда
ОписаниеОшибки = НСтр("ru = 'Форма проверки закрыта.'");
ИначеЕсли РезультатВызова <> Неопределено Тогда
Если Не РезультатВызова.Выполнено Тогда
ОписаниеОшибки = РезультатВызова.Ошибка;
Иначе
ДанныеПодписи = РезультатВызова.Результат;
ОписаниеОшибки = "";
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ОписаниеОшибки);
КонецЕсли;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ПарольПринят = Истина;
КонецЕсли;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "Подписание", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Если РезультатВызова <> Неопределено И ПроверкиНаСервере.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ОбработчикСледующий = Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПроверкиПодписиОблачнаяПодпись", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиПроверкиПодписи", ЭтотОбъект);
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
МодульСервисКриптографииDSSКлиент.ПроверитьПодпись(ОбработчикСледующий,
Контекст.НастройкиПользователя,
ДанныеПодписи,
Контекст.ДанныеСертификата,
"CMS");
Иначе
ПроверитьНаСторонеКлиентаПослеПроверкиПодписиОблачнаяПодпись(Неопределено, Контекст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПроверкиПодписиОблачнаяПодпись(РезультатВызова, Контекст) Экспорт
ОписаниеОшибки = Неопределено;
Если Не ОперацияАктивна() Тогда
ОписаниеОшибки = НСтр("ru = 'Форма проверки закрыта.'");
ИначеЕсли РезультатВызова <> Неопределено Тогда
Если Не РезультатВызова.Выполнено Тогда
ОписаниеОшибки = ЭлектроннаяПодписьСлужебныйКлиент.ТекстОшибкиОблачнаяПодпись(
"ПроверкаПодписи", РезультатВызова, Истина);
Иначе
ОписаниеОшибки = "";
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "ПроверкаПодписи", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
КонецЕсли;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ОбработчикСледующий = Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеШифрованияОблачнаяПодпись", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиШифрования", ЭтотОбъект);
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
МодульСервисКриптографииDSSКлиент.Зашифровать(ОбработчикСледующий,
Контекст.НастройкиПользователя,
Контекст.ДанныеСертификата,
Контекст.ДанныеСертификата);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеШифрованияОблачнаяПодпись(РезультатВызова, Контекст) Экспорт
ОписаниеОшибки = Неопределено;
Если Не ОперацияАктивна() Тогда
ОписаниеОшибки = НСтр("ru = 'Форма проверки закрыта.'");
ИначеЕсли РезультатВызова <> Неопределено Тогда
Если Не РезультатВызова.Выполнено Тогда
ОписаниеОшибки = РезультатВызова.Ошибка;
Иначе
ОписаниеОшибки = "";
КонецЕсли;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "Шифрование", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Если ПроверкиНаСервере.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ОбработчикСледующий = Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеРасшифровкиОблачнаяПодпись", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиРасшифровки", ЭтотОбъект);
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
МодульСервисКриптографииDSSКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиентСервер");
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Отпечаток", МодульСервисКриптографииDSSКлиентСервер.ТрансформироватьОтпечаток(Контекст.СертификатКриптографии.Отпечаток));
ЗначениеПинКода = ?(ЗначениеЗаполнено(СвойстваПароля.Значение), СвойстваПароля.Значение, Неопределено);
ПараметрыОперации = Новый Структура;
ПараметрыОперации.Вставить("ПинКод", МодульСервисКриптографииDSSКлиент.ПодготовитьОбъектПароля(ЗначениеПинКода));
МодульСервисКриптографииDSSКлиент.Расшифровать(ОбработчикСледующий, Контекст.НастройкиПользователя, РезультатВызова.Результат, , СтруктураПоиска, ПараметрыОперации);
Иначе
ПроверитьНаСторонеКлиентаПослеРасшифровкиОблачнаяПодпись(Неопределено, Контекст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеРасшифровкиОблачнаяПодпись(РезультатВызова, Контекст) Экспорт
ОписаниеОшибки = Неопределено;
Если Не ОперацияАктивна() Тогда
ОписаниеОшибки = НСтр("ru = 'Форма проверки закрыта.'");
ИначеЕсли РезультатВызова <> Неопределено Тогда
Если Не РезультатВызова.Выполнено Тогда
ОписаниеОшибки = РезультатВызова.Ошибка;
Иначе
ОписаниеОшибки = "";
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеРасшифрованныеДанные(РезультатВызова.Результат, ОписаниеОшибки);
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "Расшифровка", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
КонецЕсли;
ПроверитьНаСторонеКлиентаДополнительныеПроверки(Контекст);
КонецПроцедуры
&НаКлиенте
Функция ОперацияАктивна()
Результат = Открыта();
Возврат Результат;
КонецФункции
#КонецОбласти
#Область ПроверкаНаСервере
&НаСервере
Процедура ПроверитьНаСторонеСервера(Знач ЗначениеПароля)
ПроверкаВыполнена = Истина;
ИмяСервера = ИмяКомпьютера();
ДанныеСертификата = ПолучитьИзВременногоХранилища(АдресСертификата);
Попытка
СертификатКриптографии = Новый СертификатКриптографии(ДанныеСертификата);
Исключение
УстановитьЭлемент(ЭтотОбъект, ИмяПервойПроверки, Истина,
ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), Истина, ОбъединятьРезультаты);
Возврат;
КонецПопытки;
ПроверитьЗаконныйСертификатНаСервере(СертификатКриптографии);
Результат = Новый Структура;
ЭлектроннаяПодписьСлужебный.ПолучитьСертификатПоОтпечатку(
Base64Строка(СертификатКриптографии.Отпечаток), Истина, Ложь, , Результат);
ОписаниеОшибки = "";
Если ЗначениеЗаполнено(Результат) Тогда
ОписаниеОшибки = Результат.ОписаниеОшибки + Символы.ПС + Символы.ПС
+ НСтр("ru = 'Проверка подписания, созданной подписи и расшифровки не могут быть выполнены.'");
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "НаличиеСертификата", Истина, ОписаниеОшибки, , ОбъединятьРезультаты);
ПараметрыСоздания = ЭлектроннаяПодписьСлужебный.ПараметрыСозданияМенеджераКриптографии();
Если ЭлектроннаяПодписьСлужебныйКлиентСервер.ДоступныДополнительныеСвойстваСертификата() Тогда
ПараметрыСоздания.АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеАлгоритмаПодписи(
СертификатКриптографии.АлгоритмОткрытогоКлюча, Истина, Ложь);
Иначе
ПараметрыСоздания.АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(ДанныеСертификата);
КонецЕсли;
МенеджерКриптографии = ЭлектроннаяПодписьСлужебный.МенеджерКриптографии(
"ПроверкаСертификата", ПараметрыСоздания);
ОписаниеОшибки = ПараметрыСоздания.ОписаниеОшибки;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ДополнительныеПараметрыПроверкиСертификата =
ЭлектроннаяПодписьСлужебный.ДополнительныеПараметрыПроверкиСертификата();
ДополнительныеПараметрыПроверкиСертификата.ВыполнятьПроверкуУдостоверяющегоЦентра = Ложь;
ЭлектроннаяПодписьСлужебный.ПроверитьСертификат(МенеджерКриптографии, СертификатКриптографии, ОписаниеОшибки,,ДополнительныеПараметрыПроверкиСертификата);
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "ДанныеСертификата", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Если ЗначениеЗаполнено(Программа) Тогда
ПараметрыСоздания = ЭлектроннаяПодписьСлужебный.ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.Программа = Программа;
МенеджерКриптографии = ЭлектроннаяПодписьСлужебный.МенеджерКриптографии("ПроверкаСертификата", ПараметрыСоздания);
ОписаниеОшибки = ПараметрыСоздания.ОписаниеОшибки;
Иначе
ПрограммаАвтоНаСервереРезультат = ЭлектроннаяПодписьСлужебный.ПрограммаПоСертификату(АдресСертификата);
ПрограммаАвтоНаСервере = ПрограммаАвтоНаСервереРезультат.Программа;
Если ПрограммаАвтоНаСервереРезультат.Программа = Неопределено Тогда
ОписаниеОшибки = ЭлектроннаяПодписьСлужебныйКлиентСервер.ТекстОшибкиНеУдалосьОпределитьПрограмму(
ПрограммаАвтоНаСервереРезультат.Ошибка);
МенеджерКриптографии = Неопределено;
Иначе
ПараметрыСоздания = ЭлектроннаяПодписьСлужебный.ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.Программа = ПрограммаАвтоНаСервере;
МенеджерКриптографии = ЭлектроннаяПодписьСлужебный.МенеджерКриптографии("ПроверкаСертификата", ПараметрыСоздания);
ОписаниеОшибки = ПараметрыСоздания.ОписаниеОшибки;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + Символы.ПС
+ НСтр("ru = 'Проверка подписания, созданной подписи, шифрования и
|расшифровки не могут быть выполнены.'");
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "НаличиеПрограммы", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Если МенеджерКриптографии = Неопределено Тогда
Возврат;
КонецЕсли;
МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = ЗначениеПароля;
ОписаниеОшибки = "";
Если Отозван Тогда
ОписаниеОшибки = ЭлектроннаяПодписьСлужебный.ОшибкаСертификатПомеченКакОтозванный();
УстановитьЭлемент(ЭтотОбъект, "Подписание", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Иначе
Если ВыполнятьПроверкуУдостоверяющегоЦентра <> ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат() Тогда
ПараметрыПроверки = Новый Структура;
ПараметрыПроверки.Вставить("ЭтоПроверкаПодписи", Ложь);
ПараметрыПроверки.Вставить("ПроверятьСертификат", ВыполнятьПроверкуУдостоверяющегоЦентра);
РезультатПроверкиУЦ = ЭлектроннаяПодписьСлужебный.РезультатПроверкиУдостоверяющегоЦентраСертификата(
СертификатКриптографии,, ПараметрыПроверки);
Если Не РезультатПроверкиУЦ.Действует Тогда
Если ВыполнятьПроверкуУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйКлиентСервер.ТолькоКвалифицированные() Тогда
ПодписаниеРазрешено = Ложь;
Иначе
ПодписаниеРазрешено = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
Сертификат, "РазрешитьПодписание", Неопределено);
КонецЕсли;
Если ПодписаниеРазрешено = Неопределено Или Не ПодписаниеРазрешено Тогда
ОписаниеОшибки = РезультатПроверкиУЦ.Предупреждение.ТекстОшибки;
УстановитьЭлемент(ЭтотОбъект, "Подписание", Истина, РезультатПроверкиУЦ.Предупреждение, Истина,
ОбъединятьРезультаты);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ПроверкиНаСервере.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ДанныеПодписи = ПроверитьПодписаниеНаСервере(МенеджерКриптографии, ДанныеСертификата, СертификатКриптографии, ОписаниеОшибки);
КонецЕсли;
Если ПроверкиНаСервере.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ПроверитьПодписьНаСервере(МенеджерКриптографии, ДанныеСертификата, ДанныеПодписи);
КонецЕсли;
ОписаниеОшибки = "";
ЗашифрованныеДанные = ПроверитьШифрованиеНаСервере(МенеджерКриптографии, ДанныеСертификата, СертификатКриптографии, ОписаниеОшибки);
Если ПроверкиНаСервере.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ПроверитьРасшифрованиеНаСервере(МенеджерКриптографии, ЗашифрованныеДанные);
КонецЕсли;
ПроверитьНаСторонеСервераДополнительныеПроверки(ЗначениеПароля, МенеджерКриптографии);
КонецПроцедуры
&НаСервере
Процедура ПроверитьЗаконныйСертификатНаСервере(СертификатКриптографии)
ОписаниеОшибки = "";
Если Элементы.ГруппаЗаконныйСертификат.Видимость
И Не СертификатКриптографии.Субъект.Свойство("SN") Тогда
ОписаниеОшибки = НСтр("ru = 'В описании субъекта сертификата не найдено поле ""SN"".'");
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "ЗаконныйСертификат", Истина, ОписаниеОшибки, , ОбъединятьРезультаты);
КонецПроцедуры
&НаСервере
Функция ПроверитьПодписаниеНаСервере(МенеджерКриптографии, ДанныеСертификата, СертификатКриптографии, ОписаниеОшибки)
Попытка
ДанныеПодписи = МенеджерКриптографии.Подписать(ДанныеСертификата, СертификатКриптографии);
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ОписаниеОшибки);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
ПарольПринят = Не ЗначениеЗаполнено(ОписаниеОшибки);
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
УстановитьЭлемент(ЭтотОбъект, "Подписание", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Возврат ДанныеПодписи;
КонецЕсли;
Если ЗначениеЗаполнено(ТипПодписи) И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
Попытка
НастройкиПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.НастройкиСозданияПодписи(ТипПодписи,
ЭлектроннаяПодпись.ОбщиеНастройки().АдресаСерверовМетокВремени);
МенеджерКриптографии.АдресаСерверовМетокВремени = НастройкиПодписи.АдресаСерверовМетокВремени;
ДанныеПодписи = МенеджерКриптографии.Подписать(ДанныеСертификата, СертификатКриптографии,
НастройкиПодписи.ТипПодписи);
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ОписаниеОшибки);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "Подписание", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Возврат ДанныеПодписи;
КонецФункции
&НаСервере
Процедура ПроверитьПодписьНаСервере(МенеджерКриптографии, ДанныеСертификата, ДанныеПодписи)
ОписаниеОшибки = "";
Попытка
МенеджерКриптографии.ПроверитьПодпись(ДанныеСертификата, ДанныеПодписи);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) И ЗначениеЗаполнено(ТипПодписи) И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
Попытка
СвойстваПодписи = ЭлектроннаяПодписьСлужебный.СвойстваПодписиЧтениеМенеджеромКриптографии(
ДанныеПодписи, МенеджерКриптографии, Истина);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) И ЗначениеЗаполнено(СвойстваПодписи.ТекстОшибки) Тогда
ОписаниеОшибки = СвойстваПодписи.ТекстОшибки;
ИначеЕсли Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ДанныеСертификатаМеткиВремени = СвойстваПодписи.Сертификаты[СвойстваПодписи.Сертификаты.ВГраница()];
СертификатМеткиВремени = Новый СертификатКриптографии(ДанныеСертификатаМеткиВремени);
СвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(
СертификатМеткиВремени, ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем());
Найдено = СертификатыМетокВремени.НайтиСтроки(Новый Структура("Отпечаток", СвойстваСертификата.Отпечаток));
Если Найдено.Количество() = 0 Тогда
НоваяСтрока = СертификатыМетокВремени.Добавить();
НоваяСтрока.АдресСертификата = ПоместитьВоВременноеХранилище(ДанныеСертификатаМеткиВремени,
УникальныйИдентификатор);
НоваяСтрока.Отпечаток = СвойстваСертификата.Отпечаток;
НоваяСтрока.ПолученНаСервере = Истина;
Иначе
Найдено[0].ПолученНаСервере = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "ПроверкаПодписи", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
КонецПроцедуры
&НаСервере
Функция ПроверитьШифрованиеНаСервере(МенеджерКриптографии, ДанныеСертификата, СертификатКриптографии, ОписаниеОшибки)
Попытка
ЗашифрованныеДанные = МенеджерКриптографии.Зашифровать(ДанныеСертификата, СертификатКриптографии);
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеЗашифрованныеДанные(ЗашифрованныеДанные, ОписаниеОшибки);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
УстановитьЭлемент(ЭтотОбъект, "Шифрование", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Возврат ЗашифрованныеДанные;
КонецФункции
&НаСервере
Процедура ПроверитьРасшифрованиеНаСервере(МенеджерКриптографии, ЗашифрованныеДанные)
ОписаниеОшибки = "";
Попытка
РасшифрованныеДанные = МенеджерКриптографии.Расшифровать(ЗашифрованныеДанные);
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеРасшифрованныеДанные(РасшифрованныеДанные, ОписаниеОшибки);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
УстановитьЭлемент(ЭтотОбъект, "Расшифровка", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
КонецПроцедуры
&НаСервере
Процедура ПроверитьНаСторонеСервераДополнительныеПроверки(ЗначениеПароля, МенеджерКриптографии = Неопределено)
ИмяСервера = ИмяКомпьютера();
Для Каждого ЭлементСписка Из ДополнительныеПроверки Цикл
ОписаниеОшибки = "";
ЭтоПредупреждение = Ложь;
Попытка
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("Сертификат", Сертификат);
ПараметрыВыполнения.Вставить("Проверка", ЭлементСписка.Имя);
ПараметрыВыполнения.Вставить("МенеджерКриптографии", МенеджерКриптографии);
ПараметрыВыполнения.Вставить("ОписаниеОшибки", ОписаниеОшибки);
ПараметрыВыполнения.Вставить("ЭтоПредупреждение", ЭтоПредупреждение);
ПараметрыВыполнения.Вставить("Пароль", ?(ВводитьПароль, ЗначениеПароля, Неопределено));
ПараметрыВыполнения.Вставить("РезультатыПроверок", ПроверкиНаСервере);
ЭлектроннаяПодписьПереопределяемый.ПриДополнительнойПроверкеСертификата(ПараметрыВыполнения);
ОписаниеОшибки = ПараметрыВыполнения.ОписаниеОшибки;
ЭтоПредупреждение = ПараметрыВыполнения.ЭтоПредупреждение;
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
УстановитьЭлемент(ЭтотОбъект, ЭлементСписка.Имя, Истина,
ОписаниеОшибки, ЭтоПредупреждение <> Истина, ОбъединятьРезультаты);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область УправлениеЭлементамиФормы
&НаСервере
Процедура ДобавитьКартинку(ИмяЭлемента, Родитель, Картинка = Неопределено)
Декорация = Элементы.Добавить(ИмяЭлемента, Тип("ДекорацияФормы"), Родитель);
Декорация.Вид = ВидДекорацииФормы.Картинка;
Декорация.Ширина = 2;
Декорация.Высота = 1;
Декорация.Картинка = ?(Картинка = Неопределено, Новый Картинка, Картинка);
Декорация.РазмерКартинки = РазмерКартинки.АвтоРазмер;
КонецПроцедуры
&НаСервере
Процедура ДобавитьЭлементыОписанияОшибок(ИмяПроверки, Родитель, НаСервере = Ложь)
ГруппаОшибкаКлиент = ГруппаФормыБезОтображения(
ИмяПроверки + ?(НаСервере, "ОшибкаСервер", "ОшибкаКлиент"), Родитель,
ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда);
ГруппаОшибкаКлиент.Видимость = Ложь;
ДобавитьКартинку(ИмяПроверки + ?(НаСервере, "ОшибкаСерверКартинка", "ОшибкаКлиентКартинка"),
ГруппаОшибкаКлиент, БиблиотекаКартинок[?(НаСервере, "КомпьютерСервер", "КомпьютерКлиент")]);
Надпись = Элементы.Добавить(ИмяПроверки + ?(НаСервере, "ОшибкаСерверНадпись", "ОшибкаКлиентНадпись"),
Тип("ДекорацияФормы"), ГруппаОшибкаКлиент);
Надпись.ЦветТекста = ЦветаСтиля.ПоясняющийТекст;
Надпись = Элементы.Добавить(ИмяПроверки + ?(НаСервере, "РешениеСерверНадпись", "РешениеКлиентНадпись"),
Тип("ДекорацияФормы"), Родитель);
Надпись.ЦветТекста = ЦветаСтиля.ПоясняющийТекст;
Надпись.УстановитьДействие("ОбработкаНавигационнойСсылки", "Подключаемый_НадписьОбработкаНавигационнойСсылки");
КонецПроцедуры
&НаСервере
Функция ГруппаФормыБезОтображения(ИмяГруппы, Родитель, Группировка = Неопределено)
Группа = Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"), Родитель);
Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
Группа.Отображение = ОтображениеОбычнойГруппы.Нет;
Группа.ОтображатьЗаголовок = Ложь;
Группа.Группировка = ?(Группировка = Неопределено,
ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда, Группировка);
Возврат Группа;
КонецФункции
&НаСервере
Процедура ОбновитьВидимостьНаСервере()
ОперацииНаСервере = (ЭлектроннаяПодпись.ПроверятьЭлектронныеПодписиНаСервере()
Или ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере());
ПроверятьЭлектронныеПодписиНаСервере = Константы.ПроверятьЭлектронныеПодписиНаСервере.Получить();
ПроверкаВСервисе = (ЭтоВстроенныйКриптопровайдер Или ЭтоУчетнаяЗаписьСервиса
Или ПроверятьЭлектронныеПодписиНаСервере И (ЕстьУчетнаяЗаписьСервиса Или ЕстьВстроенныйКриптопровайдер));
ВидимостьПроверкиНаСервере = ОперацииНаСервере Или ПроверкаВСервисе;
ВидимостьКолонкиНаСервере = ВидимостьПроверкиНаСервере И ОбъединятьРезультаты <> "ОбъединятьПоИ" И ОбъединятьРезультаты <> "ОбъединятьПоИли";
Элементы.ГруппаШапка.Видимость = ВидимостьПроверкиНаСервере;
Для Каждого Проверка Из СтандартныеПроверки() Цикл
Элементы[Проверка + "ОшибкаКлиентКартинка"].Видимость = ВидимостьПроверкиНаСервере;
Элементы[Проверка + "НаСервереКартинка"].Видимость = ВидимостьКолонкиНаСервере;
КонецЦикла;
Для каждого Проверка Из ДополнительныеПроверки Цикл
Элементы[Проверка.Имя + "ОшибкаКлиентКартинка"].Видимость = ВидимостьПроверкиНаСервере;
Элементы[Проверка.Имя + "НаСервереКартинка"].Видимость = ВидимостьКолонкиНаСервере;
КонецЦикла;
Элементы.ПроверкиНаСервереКартинка.Видимость = ВидимостьКолонкиНаСервере;
Элементы.ПроверкиНаКлиентеКартинка.Видимость = ВидимостьКолонкиНаСервере;
КонецПроцедуры
&НаСервере
Процедура ВывестиРезультатПроверки(Проверка, НаСервере = Ложь)
РезультатыПроверок = ЭтотОбъект[?(НаСервере, "ПроверкиНаСервере", "ПроверкиНаКлиенте")];
ДополнительныеДанныеПроверок = ЭтотОбъект[?(НаСервере, "ДополнительныеДанныеПроверокНаСервере", "ДополнительныеДанныеПроверокНаКлиенте")];
Если РезультатыПроверок = Неопределено Тогда
Возврат;
КонецЕсли;
РезультатПроверки = РезультатыПроверок[Проверка];
Если РезультатПроверки = Неопределено Тогда
УстановитьЭлемент(ЭтотОбъект, Проверка, НаСервере, , , ОбъединятьРезультаты);
Возврат;
КонецЕсли;
ОшибкиПриПроверке = ?(РезультатыПроверок.Свойство(Проверка + "Ошибка"),
РезультатыПроверок[Проверка + "Ошибка"], "");
Если ДополнительныеДанныеПроверок.Свойство(Проверка) Тогда
Структура = ДополнительныеДанныеПроверок[Проверка];
Структура.Вставить("ТекстОшибки", ОшибкиПриПроверке);
УстановитьЭлемент(ЭтотОбъект, Проверка, НаСервере,
Структура, Не РезультатПроверки, ОбъединятьРезультаты);
Иначе
УстановитьЭлемент(ЭтотОбъект, Проверка, НаСервере,
ОшибкиПриПроверке, Не РезультатПроверки, ОбъединятьРезультаты);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьЭлемент(Форма, Действие, НаСервере,
ОписаниеОшибки = Неопределено, ЭтоОшибка = Ложь, ОбъединятьРезультаты = "НеОбъединять")
ИмяЭлементаНадпись = Действие + "Надпись";
ИмяЭлементаНаКлиентеКартинка = Действие + "НаКлиентеКартинка";
ИмяЭлементаНаСервереКартинка = Действие + "НаСервереКартинка";
ИмяСвойстваОшибка = Действие + "Ошибка";
ЭлементНадпись = Форма.Элементы[ИмяЭлементаНадпись];
ТребуетсяОбъединятьРезультаты = (ОбъединятьРезультаты = "ОбъединятьПоИ" Или ОбъединятьРезультаты = "ОбъединятьПоИли");
Если ТребуетсяОбъединятьРезультаты Тогда
ЭлементКартинка = Форма.Элементы[ИмяЭлементаНаКлиентеКартинка];
Иначе
ЭлементКартинка = Форма.Элементы[?(НаСервере, ИмяЭлементаНаСервереКартинка, ИмяЭлементаНаКлиентеКартинка)];
КонецЕсли;
Проверки = Форма[?(НаСервере, "ПроверкиНаСервере", "ПроверкиНаКлиенте")];
ПроверкиВторогоКонтекста = Форма[?(НаСервере, "ПроверкиНаКлиенте", "ПроверкиНаСервере")];
ЗначениеПроверкиВторогоКонтекста = Неопределено;
Если ТипЗнч(ПроверкиВторогоКонтекста) = Тип("Структура") И ПроверкиВторогоКонтекста.Свойство(Действие) Тогда
ЗначениеПроверкиВторогоКонтекста = ПроверкиВторогоКонтекста[Действие];
КонецЕсли;
ИзвестнаяОшибкаБезКлассификатора = Неопределено;
Если ТипЗнч(ОписаниеОшибки) = Тип("Структура") Тогда
ИзвестнаяОшибкаБезКлассификатора = ОписаниеОшибки;
ОписаниеОшибки = ИзвестнаяОшибкаБезКлассификатора.ТекстОшибки;
КонецЕсли;
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ЗначениеПроверки = Ложь;
РезультатПроверки = ЗначениеПроверки;
Если ОбъединятьРезультаты = "ОбъединятьПоИли" И ЗначениеПроверкиВторогоКонтекста <> Неопределено Тогда
РезультатПроверки = Ложь Или ЗначениеПроверкиВторогоКонтекста;
КонецЕсли;
Иначе
ЗначениеПроверки = ?(ОписаниеОшибки = Неопределено, Неопределено, Истина);
Если ЗначениеПроверки <> Неопределено И ЗначениеПроверкиВторогоКонтекста <> Неопределено
И ТребуетсяОбъединятьРезультаты Тогда
РезультатПроверки = ?(ОбъединятьРезультаты = "ОбъединятьПоИ",
ЗначениеПроверки И ЗначениеПроверкиВторогоКонтекста,
ЗначениеПроверки Или ЗначениеПроверкиВторогоКонтекста);
КонецЕсли;
КонецЕсли;
Проверки.Вставить(Действие, ЗначениеПроверки);
ИмяГруппыПоНазваниямПроверки = ИменаГруппПоНазваниямПроверок(Форма.Элементы)[Действие];
Если ИмяГруппыПоНазваниямПроверки = Неопределено Тогда
ИмяГруппыПоНазваниямПроверки = "Группа" + Действие;
КонецЕсли;
Форма.Элементы[ИмяГруппыПоНазваниямПроверки].Видимость =
ЗначениеПроверки = Ложь Или ЗначениеПроверкиВторогоКонтекста = Ложь;
Проверки.Вставить(ИмяСвойстваОшибка, ?(ОписаниеОшибки = Неопределено, "", ОписаниеОшибки));
ИмяГруппыОшибкаСервер = Действие + "ОшибкаСервер";
ИмяГруппыОшибкаКлиент = Действие + "ОшибкаКлиент";
ИмяЭлементаНадписьОшибкаСервер = Действие + "ОшибкаСерверНадпись";
ИмяЭлементаНадписьОшибкаКлиент = Действие + "ОшибкаКлиентНадпись";
ИмяЭлементаНадписьРешениеСервер = Действие + "РешениеСерверНадпись";
ИмяЭлементаНадписьРешениеКлиент = Действие + "РешениеКлиентНадпись";
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
Если РезультатПроверки Тогда
Возврат;
КонецЕсли;
Форма.ПроверкиУспешны = Ложь;
ГруппаОшибка = Форма.Элементы[?(НаСервере, ИмяГруппыОшибкаСервер, ИмяГруппыОшибкаКлиент)];
ГруппаОшибка.Видимость = Истина;
ЭлементКартинка.Картинка = ?(ЭтоОшибка,
БиблиотекаКартинок.Предупреждение,
БиблиотекаКартинок.ПроверкаСертификатаПредупреждение);
ЭлементКартинка.Подсказка = ОписаниеОшибки;
ЭлементНадпись.Гиперссылка = Истина;
ЭлементНадписьОшибка = Форма.Элементы[?(НаСервере, ИмяЭлементаНадписьОшибкаСервер, ИмяЭлементаНадписьОшибкаКлиент)];
ЭлементНадписьОшибка.Заголовок = ОписаниеОшибки;
ИмяНадписиРешение = ?(НаСервере, ИмяЭлементаНадписьРешениеСервер, ИмяЭлементаНадписьРешениеКлиент);
ЭлементФормыНадписьРешение = Форма.Элементы[ИмяНадписиРешение];
ИмяЭлементаНадписьОшибкаПодписание = "Подписание" + ?(НаСервере, "ОшибкаСерверНадпись", "ОшибкаКлиентНадпись");
ЭлементФормыНадписьОшибкаПодписание = Форма.Элементы[ИмяЭлементаНадписьОшибкаПодписание];
ОписаниеИзвестнойОшибки = ОшибкаПоКлассификатору(ОписаниеОшибки, НаСервере, Действие = "ПроверкаПодписи", ЗначениеЗаполнено(Форма.Сертификат));
ЭтоИзвестнаяОшибка = ОписаниеИзвестнойОшибки <> Неопределено;
Форма.Элементы[ИмяНадписиРешение].Видимость = ЭтоИзвестнаяОшибка;
Если Не ЭтоИзвестнаяОшибка Тогда
Если ИзвестнаяОшибкаБезКлассификатора = Неопределено Тогда
ЭлементНадписьОшибка.Заголовок = СформироватьЗаголовокПодробно(ОписаниеОшибки);
Возврат;
Иначе
ЭлементФормыНадписьРешение.Видимость = Истина;
ИмяРеквизитаФормы = ?(НаСервере, "ДополнительныеДанныеПроверокНаСервере", "ДополнительныеДанныеПроверокНаКлиенте");
ДополнительныеДанныеПроверок = Форма[ИмяРеквизитаФормы];
ДополнительныеДанныеПроверок.Вставить(Действие,
Новый Структура("Причина, Решение", ИзвестнаяОшибкаБезКлассификатора.Причина, ИзвестнаяОшибкаБезКлассификатора.Решение));
Форма[ИмяРеквизитаФормы] = ДополнительныеДанныеПроверок;
ОписаниеИзвестнойОшибки = Новый Структура;
ОписаниеИзвестнойОшибки.Вставить("Причина", ИзвестнаяОшибкаБезКлассификатора.Причина);
ОписаниеИзвестнойОшибки.Вставить("Решение", ИзвестнаяОшибкаБезКлассификатора.Решение);
ОписаниеИзвестнойОшибки.Вставить("ДействияДляУстранения");
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ОписаниеИзвестнойОшибки.Причина) Тогда
ЭлементНадписьОшибка.Заголовок = ОписаниеИзвестнойОшибки.Причина;
КонецЕсли;
Если Действие = "Расшифровка"
И ЭлементФормыНадписьОшибкаПодписание.Видимость = Истина
И ЭлементНадписьОшибка.Заголовок = ЭлементФормыНадписьОшибкаПодписание.Заголовок Тогда
ЭлементФормыНадписьРешение.Видимость = Ложь;
ЭлементНадписьОшибка.Видимость = Истина;
ЭлементНадписьОшибка.Заголовок = НСтр("ru = 'См. пункт Подписание данных.'");
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(Форма.Сертификат) И ЗначениеЗаполнено(ОписаниеИзвестнойОшибки.ДействияДляУстранения) Тогда
ДанныеДляДополнения = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДанныеДляДополненияОшибкиИзКлассификатора(
Новый Структура("Сертификат, ДанныеСертификата", Форма.Сертификат, Форма.АдресСертификата));
ОписаниеИзвестнойОшибки = ЭлектроннаяПодписьСлужебныйВызовСервера.ДополнитьРешениеКлассификатораОшибокПодробностями(
ОписаниеИзвестнойОшибки, ДанныеДляДополнения, ?(НаСервере, "Сервер", "Клиент"));
КонецЕсли;
Форма.Элементы[ИмяНадписиРешение].Заголовок = ОписаниеИзвестнойОшибки.Решение;
Возврат;
КонецЕсли;
ГруппаОшибка = Форма.Элементы[?(НаСервере, ИмяГруппыОшибкаСервер, ИмяГруппыОшибкаКлиент)];
ЭлементРешение = Форма.Элементы[?(НаСервере, ИмяЭлементаНадписьРешениеСервер, ИмяЭлементаНадписьРешениеКлиент)];
Если ТребуетсяОбъединятьРезультаты Тогда
Если ЗначениеПроверки = Неопределено И ЗначениеПроверкиВторогоКонтекста = Неопределено Тогда
ГруппаОшибка.Видимость = Ложь;
ЭлементРешение.Видимость = Ложь;
ЭлементКартинка.Картинка = БиблиотекаКартинок.ПроверкаСертификатаНеВыполнялась;
ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка не выполнялась.'");
ЭлементНадпись.Гиперссылка = Ложь;
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя, Форма.ТипПодписи);
ИначеЕсли ЗначениеПроверки <> Неопределено И ЗначениеПроверкиВторогоКонтекста = Неопределено Тогда
ГруппаОшибка.Видимость = Ложь;
ЭлементРешение.Видимость = Ложь;
ЭлементКартинка.Картинка = БиблиотекаКартинок.ПроверкаСертификатаУспех;
ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка выполнена успешно.'");
ЭлементНадпись.Гиперссылка = Ложь;
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя, Форма.ТипПодписи);
ИначеЕсли ЗначениеПроверки <> Неопределено И РезультатПроверки Тогда
ГруппаОшибка.Видимость = Ложь;
ЭлементРешение.Видимость = Ложь;
ЭлементКартинка.Картинка = БиблиотекаКартинок.ПроверкаСертификатаУспех;
ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка выполнена успешно.'");
ЭлементНадпись.Гиперссылка = Ложь;
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя, Форма.ТипПодписи);
КонецЕсли;
Возврат;
КонецЕсли;
ЭлементКартинка.Картинка = ?(ОписаниеОшибки = Неопределено,
БиблиотекаКартинок.ПроверкаСертификатаНеВыполнялась,
БиблиотекаКартинок.ПроверкаСертификатаУспех);
ЭлементКартинка.Подсказка = ?(ОписаниеОшибки = Неопределено,
НСтр("ru = 'Проверка не выполнялась.'"),
НСтр("ru = 'Проверка выполнена успешно.'"));
Если ПроверкиВторогоКонтекста = Неопределено
Или Не ПроверкиВторогоКонтекста.Свойство(Действие + "Ошибка")
Или ПустаяСтрока(ПроверкиВторогоКонтекста[Действие + "Ошибка"]) Тогда
ГруппаОшибка.Видимость = Ложь;
ЭлементРешение.Видимость = Ложь;
ЭлементНадпись.Гиперссылка = Ложь;
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя, Форма.ТипПодписи);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция СформироватьЗаголовокПодробно(ОписаниеОшибки)
НавигационнаяСсылка = "";
ЭлектроннаяПодписьКлиентСерверЛокализация.ПриОпределенииСсылкиНаПоискПоОшибкамПриРаботеСЭлектроннойПодписью(
НавигационнаяСсылка, ОписаниеОшибки);
Если ПустаяСтрока(НавигационнаяСсылка) Тогда
Возврат ОписаниеОшибки;
КонецЕсли;
Массив = Новый Массив;
Массив.Добавить(ОписаниеОшибки);
Массив.Добавить(" ");
Строка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '<a href = %1>Поиск решения...</a>'"), НавигационнаяСсылка);
#Если Сервер Тогда
Массив.Добавить(СтроковыеФункции.ФорматированнаяСтрока(Строка));
#Иначе
Массив.Добавить(СтроковыеФункцииКлиент.ФорматированнаяСтрока(Строка));
#КонецЕсли
Возврат Новый ФорматированнаяСтрока(Массив);
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ЗаголовокЭлемента(ДополнительныеПроверки, ИмяЭлемента, ТипПодписи)
ЗаголовокЭлемента = СтандартныйЗаголовокЭлемента(ИмяЭлемента, ТипПодписи);
Если Не ПустаяСтрока(ЗаголовокЭлемента) Тогда
Возврат ЗаголовокЭлемента;
КонецЕсли;
Для Каждого Проверка Из ДополнительныеПроверки Цикл
Если Проверка.Имя + "Надпись" = ИмяЭлемента Тогда
Возврат Проверка.Представление;
КонецЕсли;
КонецЦикла;
Возврат "";
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция СтандартныйЗаголовокЭлемента(ИмяЭлемента, ТипПодписи)
Если ИмяЭлемента = "ЗаконныйСертификатНадпись" Тогда
Возврат НСтр("ru = 'Соответствие законодательству Российской Федерации'");
ИначеЕсли ИмяЭлемента = "НаличиеСертификатаНадпись" Тогда
Возврат НСтр("ru = 'Наличие сертификата в личном списке'");
ИначеЕсли ИмяЭлемента = "ДанныеСертификатаНадпись" Тогда
Возврат НСтр("ru = 'Корректность данных сертификата'");
ИначеЕсли ИмяЭлемента = "НаличиеПрограммыНадпись" Тогда
Возврат НСтр("ru = 'Наличие приложения для подписания и расшифровки'");
ИначеЕсли ИмяЭлемента = "ПодписаниеНадпись" Тогда
Если ЗначениеЗаполнено(ТипПодписи) Тогда
ТипПодписиСтрока = Строка(ТипПодписи);
ТипПодписиСтрока = НРег(Лев(ТипПодписиСтрока, 1)) + Сред(ТипПодписиСтрока, 2);
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Подписание данных типом подписи - %1'"), ТипПодписиСтрока);
Иначе
Возврат НСтр("ru = 'Подписание данных'");
КонецЕсли;
ИначеЕсли ИмяЭлемента = "ПроверкаПодписиНадпись" Тогда
Возврат НСтр("ru = 'Проверка созданной подписи'");
ИначеЕсли ИмяЭлемента = "ШифрованиеНадпись" Тогда
Возврат НСтр("ru = 'Шифрование данных'");
ИначеЕсли ИмяЭлемента = "РасшифровкаНадпись" Тогда
Возврат НСтр("ru = 'Расшифровка данных'");
Иначе
Возврат "";
КонецЕсли;
КонецФункции
#КонецОбласти
&НаКлиенте
Процедура ДополнитьТекстОшибками(ТекстОшибок, Проверки, НаСервере = Ложь, ТемаСообщения = "")
СоставПроверок = ЭтотОбъект[?(НаСервере, "ПроверкиНаСервере", "ПроверкиНаКлиенте")];
Для Каждого Проверка Из Проверки Цикл
Если СоставПроверок = Неопределено Тогда
ТекстОшибок = ТекстОшибок + Проверка + ": "
+ НСтр("ru = 'Не выполнялась, так как не требуется (не настроено)'") + Символы.ПС;
Иначе
РезультатПроверки = ?(СоставПроверок.Свойство(Проверка),
ПроверкиНаКлиенте[Проверка], Неопределено);
ТекстОшибкиПроверки = ?(СоставПроверок.Свойство(Проверка + "Ошибка"),
СокрЛП(ПроверкиНаКлиенте[Проверка + "Ошибка"]), "");
Если ПустаяСтрока(ТемаСообщения) И Не ПустаяСтрока(ТекстОшибкиПроверки) Тогда
ТемаСообщения = ТекстОшибкиПроверки;
КонецЕсли;
ТекстОшибок = ТекстОшибок + Проверка + ": "
+ ?(РезультатПроверки = Неопределено, НСтр("ru = 'Не выполнялась из-за предыдущих ошибок'"),
Формат(РезультатПроверки, НСтр("ru = 'БЛ=Ошибка; БИ=Успех'")))
+ ?(ПустаяСтрока(ТекстОшибкиПроверки), "", " """ + ТекстОшибкиПроверки + """") + Символы.ПС;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ОшибкаПоКлассификатору(ОписаниеОшибки, ОшибкаНаСервере, ОшибкаПроверкиПодписи, УказанСертификат)
Возврат ЭлектроннаяПодписьСлужебный.ОшибкаПоКлассификатору(ОписаниеОшибки, ОшибкаНаСервере, ОшибкаПроверкиПодписи, УказанСертификат);
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция СтандартныеПроверки()
СтандартныеПроверки = Новый Массив;
СтандартныеПроверки.Добавить("ЗаконныйСертификат");
СтандартныеПроверки.Добавить("НаличиеСертификата");
СтандартныеПроверки.Добавить("ДанныеСертификата");
СтандартныеПроверки.Добавить("НаличиеПрограммы");
СтандартныеПроверки.Добавить("Подписание");
СтандартныеПроверки.Добавить("ПроверкаПодписи");
СтандартныеПроверки.Добавить("Шифрование");
СтандартныеПроверки.Добавить("Расшифровка");
Возврат СтандартныеПроверки;
КонецФункции
&НаКлиенте
Функция ДополнительныеДанные(ИмяОшибки = Неопределено)
ДополнительныеДанные = ЭлектроннаяПодписьСлужебныйКлиент.ДополнительныеДанныеДляКлассификатораОшибок();
ДополнительныеДанные.Сертификат = Сертификат;
ДополнительныеДанные.ДанныеСертификата = АдресСертификата;
Если ИмяОшибки <> Неопределено Тогда
ДополнительныеДанные.ДополнительныеДанныеПроверокНаКлиенте =
ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеДанныеПроверокНаКлиенте, ИмяОшибки, Неопределено);
ДополнительныеДанные.ДополнительныеДанныеПроверокНаСервере =
ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеДанныеПроверокНаСервере, ИмяОшибки, Неопределено);
КонецЕсли;
Возврат ДополнительныеДанные;
КонецФункции
&НаКлиенте
Асинх Функция ДополнительнаяПроверкаНаВозможностьПодписания(СертификатКриптографии, СторонаВыполнения)
ОписаниеОшибки = "";
Если Отозван Тогда
ОшибкаСертификатПомеченКакОтозванный = ОшибкаСертификатПомеченКакОтозванный();
ОписаниеОшибки = ОшибкаСертификатПомеченКакОтозванный.ТекстОшибки;
УстановитьЭлемент(ЭтотОбъект, "Подписание", СторонаВыполнения, ОшибкаСертификатПомеченКакОтозванный, Истина, ОбъединятьРезультаты);
ИначеЕсли ВыполнятьПроверкуУдостоверяющегоЦентра <> ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат() Тогда
ПараметрыПроверки = Новый Структура;
ПараметрыПроверки.Вставить("ЭтоПроверкаПодписи", Ложь);
ПараметрыПроверки.Вставить("ПроверятьСертификат", ВыполнятьПроверкуУдостоверяющегоЦентра);
РезультатПроверкиУдостоверяющегоЦентраСертификата = Ждать ЭлектроннаяПодписьСлужебныйКлиент.РезультатПроверкиУдостоверяющегоЦентраСертификата(
СертификатКриптографии,, ПараметрыПроверки);
Если Не РезультатПроверкиУдостоверяющегоЦентраСертификата.Действует Тогда
Если ВыполнятьПроверкуУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйКлиентСервер.ТолькоКвалифицированные() Тогда
ПодписаниеРазрешено = Ложь;
Иначе
ПодписаниеРазрешено = ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекЗагрузить(
Сертификат, "РазрешитьПодписание", Неопределено);
КонецЕсли;
Если ПодписаниеРазрешено = Неопределено Или Не ПодписаниеРазрешено Тогда
ОписаниеОшибки = РезультатПроверкиУдостоверяющегоЦентраСертификата.Предупреждение.ТекстОшибки;
УстановитьЭлемент(ЭтотОбъект, "Подписание", СторонаВыполнения,
РезультатПроверкиУдостоверяющегоЦентраСертификата.Предупреждение, Истина, ОбъединятьРезультаты);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат ОписаниеОшибки;
КонецФункции
&НаСервереБезКонтекста
Функция ОшибкаСертификатПомеченКакОтозванный()
Возврат ЭлектроннаяПодписьСлужебный.ОшибкаСертификатПомеченКакОтозванный()
КонецФункции
&НаСервере
Процедура ОбновитьДанныеСертификата()
СвойстваСертификата = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Сертификат,
"Программа, ВводитьПарольВПрограммеЭлектроннойПодписи, Отозван");
Отозван = СвойстваСертификата.Отозван;
Программа = СвойстваСертификата.Программа;
СертификатВводитьПарольВПрограммеЭлектроннойПодписи = СвойстваСертификата.ВводитьПарольВПрограммеЭлектроннойПодписи;
КонецПроцедуры
#КонецОбласти