Описание методов компонент XMLDSign, libXadesAddIn, ExtraCryptoAPIAddInNative

1. Vlaxrom 2 21.09.23 15:32 Сейчас в теме
Подскажите где найти описание всех методов компонент XMLDSign, libXadesAddIn, ExtraCryptoAPIAddInNative? В составе БСП, в различных конфигурациях обрывочные сведения можно почерпнуть, но где то же описано целиком?
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. trigor 26 22.09.23 10:59 Сейчас в теме
Поддержу вопрос. Точно очень даже поможет в работе за рамками типовых конфигураций.
И не придется "пилить" собственные внешние компоненты для работы с криптой.
Итересуют помимо методов вопросы например:
- как добавить в механизмы трансформации алгоритмы с XPath.
- как реализовать встраивание подписи в специально отведенные теги в контенте.
Конечно можно "запилить" через СтрЗаменить, но есть вот пример от КритоПро
https://cpdn.cryptopro.ru/content/csp_trunk/html/group___x_m_l_example_XMLSignForVe­rify.html
так там на "раз" именно это и делается.
В инструкции от принимающей стороны информации подписанной ЭП просто:
Цытата: "Получив контент, можно сохранить его в файл и выполнить подписание с помощью криптопро(встраивание
подписи в специально отведенные теги в контенте)". И всё.
Вот и приходится в такой ситуации "по просторам ... по просторам".
И вот ни как не "лучше хором". Есть же компонента ExtraCryptoAPIAddInNative - зачем "велосипеды".
Масса вопросов - собственно сабж очень даже для тех кто в тему "погружается".
И "погружается" с правильными вопросами.
3. Vlaxrom 2 22.09.23 13:16 Сейчас в теме
Замечательный пример в общем модуле БГУ "ГосУслуги":
Конечно всем понятно, что такое Параметр4 и Параметр5
Функция УстановитьПодписьXMLDSign(СодержимоеФайлаБезЗаголовка,ИмяУзла,ДанныеСертификата, Параметр4, Параметр5,ПодписалиЗаголовок,Пароль=Неопределено,ТекстОшибки = "") Экспорт

В следующей функции банально не удалены строки после отладки:
	//КодВозврата = ПодключитьВнешнююКомпоненту("C:\smev3\XadesAddInWin32d.dll", "Xades2AddIn", ТипВнешнейКомпоненты.Native);
	КодВозврата = ПодключитьВнешнююКомпоненту("ОбщийМакет.Компонента_xades", "Xades2AddIn");
Прикрепленные файлы:
4. trigor 26 22.09.23 13:56 Сейчас в теме
Компонента Компонента_xades, в отлтчии от ExtraCryptoAPIAddInNative не входит в БСП.
Это предполагаю надо в разработчикам БГУ обращаться.
Вероятно они реализовали то чето не может БСП.
На базе БСП - ExtraCryptoAPIAddInNative похоже мало развивается вот и "запиливают" Xades.
Вот и нет нормального описания.

И вот интересно - с Госуслугами всё должно быть стандартизировано.
И 1с Фирма, по идее, на уровне программного интерфейса конфигурации обеспечивает уровень выше чем
уровень интерфейсов DLL.
В отличии от других информационных ссистем.
Что Вы хотите там поправить?
Ведь по какой то причине Вы опустились до инициации компоненты.
Если всё работает - зачем туда смотреть.
6. Vlaxrom 2 22.09.23 14:04 Сейчас в теме
(4)
Я просто уже который раз пытаюсь берусь за идею нормально переписать интеграция с неким сервисом, близким к гос услугам.
Сейчас это работает через стрзаменить, собрать XDTO, записать в XML, собрать DOM сделать действия, записать в XML т.д. куча ненужных преобразований и не нормальных действий, со стороны нормального программирования.

И самое интересное, как выполнить посчет хеша на linux'e без com-объекта:

CADESCOM_BASE64_TO_BINARY = 1; //"0x01";
CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256 = 101;

HashedData = Новый COMОбъект("CAdESCOM.HashedData");
HashedData.Algorithm = CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256;
HashedData.DataEncoding = CADESCOM_BASE64_TO_BINARY;

HashedData.Hash(СертификатКриптографииBase64);

Хэш_HEXстрока = HashedData.Value;
Хэш_ДвочиныеДанные = ПолучитьДвоичныеДанныеИзHexСтроки(Хэш_HEXстрока);
digest = Base64Строка(Хэш_ДвочиныеДанные);
Показать
10. starik-2005 2898 22.09.23 14:26 Сейчас в теме
(6)
как выполнить посчет хеша на linux'e без com-объекта
Крипто про умеет, он есть под линух.В нем есть под джаву какой-то адаптер.
С другой тороны, алгоритм описан. У меня коллега с С перенес его на 1С. Работает, конечно, медленнее, чем на С, но условная секунда против микросекунд - не так и плохо.
11. Vlaxrom 2 22.09.23 14:30 Сейчас в теме
(10) Не поделитесь контактом коллеги? Или может он присоединиться к обсуждению?
вкратце рассказать о возможном решении
12. starik-2005 2898 22.09.23 14:40 Сейчас в теме
(11)
может он присоединиться к обсуждению?
Вряд ли. Но, предположу, с радостью продаст код для вычисления этого хеша. В сбере этот код работает уже год как.
13. Vlaxrom 2 22.09.23 15:09 Сейчас в теме
(12)
Тогда уже есть https://docs.cryptopro.ru/cades/pycades, для переписывания и сборки.
При этом мы имеем набор компонент уже собранных в недрах компании 1С, но необходимо писать свой велосипед, потому что к готовым библиотекам нет описания.
14. starik-2005 2898 22.09.23 21:40 Сейчас в теме
(13)
но необходимо писать свой
Так флаг в руки.
5. trigor 26 22.09.23 14:04 Сейчас в теме
Или хотите на базе неизвестной "Компонента_xades" что-то реализовать потому что неизвестно что может ExtraCryptoAPIAddInNative?

Тогда парадокс неизвестной неизвестности.
7. Vlaxrom 2 22.09.23 14:05 Сейчас в теме
(5)
?

Тогда парадокс неизвестной неизвестности.


В этом и дело, неизвестно как пользоваться ни тем, ни другим.
8. trigor 26 22.09.23 14:10 Сейчас в теме
Абсолютно согласен.
И сабж актуален очень даже.
Тем более электронная подпись "шагает по стране" и не первый год.
А если ещё МЧД заработает по полной?
Подписывать начнут "и надо, и не надо"
9. trigor 26 22.09.23 14:11 Сейчас в теме
15. Vlaxrom 2 26.10.23 16:20 Сейчас в теме
В ходе чтения инфостарта на предпед NativeApi удалось найти разработку @KAV2: https://infostart.ru/1c/tools/1122804/ благодаря которой можно получить все методы компонент (например ExtraCryptoAPI):

Available object names:ExtraCryptoAPI
Get the properties of the object "ExtraCryptoAPI":

Methods:
------------------------------------------------
C14N(p1, p2)
local name: C14N
Has return value: True
------------------------------------------------
Hash(p1, p2, p3)
local name: Hash
Has return value: True
------------------------------------------------
SignedInfo(p1)
local name: SignedInfo
Has return value: True
------------------------------------------------
GetSignOIDFromCert(p1)
local name: GetSignOIDFromCert
Has return value: True
------------------------------------------------
Sign(p1, p2, p3)
local name: Sign
Has return value: True
------------------------------------------------
VerifySign(p1, p2, p3, p4)
local name: VerifySign
Has return value: True
------------------------------------------------
SignedSignatureTag(p1, p2, p3, p4)
local name: SignedSignatureTag
Has return value: True
------------------------------------------------
CMSSign(p1, p2, p3, p4, p5, p6)
local name: CMSSign
Has return value: True
------------------------------------------------
CMSVerifySign(p1, p2, p3, p4, p5)
local name: CMSVerifySign
Has return value: True
------------------------------------------------
XadesTSign(p1, p2, p3, p4, p5, p6, p7)
local name: XadesTSign
Has return value: True
------------------------------------------------
ExportKey(p1, p2, p3, p4)
local name: ЭкспортироватьКлюч
Has return value: False
------------------------------------------------
CreateContainer(p1, p2)
local name: СоздатьКонтейнер
Has return value: True
------------------------------------------------
EnumCert(p1)
local name: EnumCert
Has return value: True
------------------------------------------------
FindCertificate(p1, p2)
local name: FindCertificate
Has return value: True
------------------------------------------------
Verify(p1, p2, p3, p4, p5, p6)
local name: Verify
Has return value: True
------------------------------------------------
ImportCertificate(p1, p2)
local name: ИмпортироватьСертификат
Has return value: True
------------------------------------------------
ImportCRu(p1, p2)
local name: ImportCRu
Has return value: True
------------------------------------------------
VerificationCertificate(p1, p2, p3, p4)
local name: VerificationCertificate
Has return value: True
------------------------------------------------
EnumCryptoProviders(p1, p2)
local name: EnumCryptoProviders
Has return value: True
------------------------------------------------
GetNextAlgorithm(p1, p2, p3, p4)
local name: ПолучитьСледующийАлгоритм
Has return value: True
------------------------------------------------
EnumKeyContainers(p1, p2)
local name: ПолучитьСледующийКонтейнерКлючей
Has return value: True
------------------------------------------------
GetParentalCertificate(p1, p2)
local name: GetParentalCertificate
Has return value: True
------------------------------------------------
GetCRu(p1, p2, p3, p4, p5, p6, p7)
local name: GetCRu
Has return value: True
------------------------------------------------
CreateRequestCertificate(p1, p2, p3, p4)
local name: СоздатьЗапросНаСертификат
Has return value: True
------------------------------------------------
CreateContainerAndRequestCertificate()
local name: CreateContainerAndRequestCertificate
Has return value: True
------------------------------------------------
BindCertToContainerAndSystemStore(p1, p2, p3)
local name: УстановитьСертификатВКонтейнерИХранилище
Has return value: True
------------------------------------------------
GetPublicKey(p1)
local name: ПолучитьОткрытыйКлюч
Has return value: True
------------------------------------------------
GetTempFolder()
local name: ПолучитьКаталогВременныхФайлов
Has return value: True
------------------------------------------------
CreateCryptoManager(p1, p2, p3)
local name: СоздатьМенеджераКриптографии
Has return value: False
------------------------------------------------
GetPublicKeyAlgorithmOIDFromCert(p1)
local name: GetPublicKeyAlgorithmOIDFromCert
Has return value: True
------------------------------------------------
c14n_body(p1, p2, p3)
local name: c14n_body
Has return value: True
------------------------------------------------
TransformSMEV(p1)
local name: TransformSMEV
Has return value: True
------------------------------------------------
GetLastError()
local name: ПолучитьОшибку
Has return value: True
------------------------------------------------
GetVersion()
local name: ПолучитьВерсию
Has return value: True

Properties:
------------------------------------------------
CryptoProviderPath
local name: ПутьККриптопровайдеру
Readable: True
Writable: True
------------------------------------------------
SilentMode
local name: ЗапретитьПользовательскийИнтерфейс
Readable: True
Writable: True
------------------------------------------------
CryptoProviderName
local name: ИмяКриптопровайдера
Readable: True
Writable: True
------------------------------------------------
CryptoProviderType
local name: ТипКриптопровайдера
Readable: True
Writable: True
------------------------------------------------
StoreName
local name: ИмяХранилища
Readable: True
Writable: False
------------------------------------------------
OIDMap
local name: СоответствиеOID
Readable: True
Writable: True
------------------------------------------------
ErrorList
local name: СписокОшибок
Readable: True
Writable: False
------------------------------------------------
DoNotShowErrorMessage
local name: НеВыводитьСообщенияОбОшибках
Readable: True
Writable: True
Оставьте свое сообщение
Вакансии
Программист
Санкт-Петербург
зарплата от 180 000 руб. до 240 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 150 000 руб. до 250 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Программист 1С
Екатеринбург
зарплата от 130 000 руб. до 170 000 руб.
Полный день

Программист 1C
Санкт-Петербург
зарплата от 140 000 руб. до 200 000 руб.
Полный день