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

1. Vlaxrom 1 21.09.23 15:32 Сейчас в теме
Подскажите где найти описание всех методов компонент XMLDSign, libXadesAddIn, ExtraCryptoAPIAddInNative? В составе БСП, в различных конфигурациях обрывочные сведения можно почерпнуть, но где то же описано целиком?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. trigor 27 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 1 22.09.23 13:16 Сейчас в теме
Замечательный пример в общем модуле БГУ "ГосУслуги":
Конечно всем понятно, что такое Параметр4 и Параметр5
Функция УстановитьПодписьXMLDSign(СодержимоеФайлаБезЗаголовка,ИмяУзла,ДанныеСертификата, Параметр4, Параметр5,ПодписалиЗаголовок,Пароль=Неопределено,ТекстОшибки = "") Экспорт

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

И вот интересно - с Госуслугами всё должно быть стандартизировано.
И 1с Фирма, по идее, на уровне программного интерфейса конфигурации обеспечивает уровень выше чем
уровень интерфейсов DLL.
В отличии от других информационных ссистем.
Что Вы хотите там поправить?
Ведь по какой то причине Вы опустились до инициации компоненты.
Если всё работает - зачем туда смотреть.
6. Vlaxrom 1 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 3098 22.09.23 14:26 Сейчас в теме
(6)
как выполнить посчет хеша на linux'e без com-объекта
Крипто про умеет, он есть под линух.В нем есть под джаву какой-то адаптер.
С другой тороны, алгоритм описан. У меня коллега с С перенес его на 1С. Работает, конечно, медленнее, чем на С, но условная секунда против микросекунд - не так и плохо.
11. Vlaxrom 1 22.09.23 14:30 Сейчас в теме
(10) Не поделитесь контактом коллеги? Или может он присоединиться к обсуждению?
вкратце рассказать о возможном решении
12. starik-2005 3098 22.09.23 14:40 Сейчас в теме
(11)
может он присоединиться к обсуждению?
Вряд ли. Но, предположу, с радостью продаст код для вычисления этого хеша. В сбере этот код работает уже год как.
13. Vlaxrom 1 22.09.23 15:09 Сейчас в теме
(12)
Тогда уже есть https://docs.cryptopro.ru/cades/pycades, для переписывания и сборки.
При этом мы имеем набор компонент уже собранных в недрах компании 1С, но необходимо писать свой велосипед, потому что к готовым библиотекам нет описания.
14. starik-2005 3098 22.09.23 21:40 Сейчас в теме
(13)
но необходимо писать свой
Так флаг в руки.
5. trigor 27 22.09.23 14:04 Сейчас в теме
Или хотите на базе неизвестной "Компонента_xades" что-то реализовать потому что неизвестно что может ExtraCryptoAPIAddInNative?

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

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


В этом и дело, неизвестно как пользоваться ни тем, ни другим.
8. trigor 27 22.09.23 14:10 Сейчас в теме
Абсолютно согласен.
И сабж актуален очень даже.
Тем более электронная подпись "шагает по стране" и не первый год.
А если ещё МЧД заработает по полной?
Подписывать начнут "и надо, и не надо"
9. trigor 27 22.09.23 14:11 Сейчас в теме
15. Vlaxrom 1 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
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот