Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add hash and encrypt/decrypt methods #30

Open
wants to merge 30 commits into
base: master
Choose a base branch
from

Conversation

norguhtar
Copy link

Добрый день. В рамках наших хотелок несколько расширили API. Добавили следующие методы

  • createHashSignature - создаёт отделённую подпись хэш-значения данных
  • createCoSignature - создаёт цифровую подпись ранее подписанных данных
  • verifyHashSignature - верификация подписанного хэш-значения
  • encryptEnvelopedData - шифрование сообщения при помощи списка сертификатов
  • decryptEnvelopedData - расшифровка сообщения с автоматическим подбором нужного сертификата
  • getHashedData - получить объект HashedData для последующего хэширования данных с указанным алгоритмом
  • getEnvelopedData - получить объект CPEnvelopedData для последующего шифрования данных

@vgoma
Copy link
Owner

vgoma commented Oct 14, 2020

@norguhtar, добрый вечер. PR довольно объемный. Гляну как будет возможность. На данный момент падает билд, проверьте пожалуйста.

@norguhtar
Copy link
Author

Да вижу что падает, это сегодня добавляли еще отображение сертификатов без ключей, для возможности шифровать по открытому ключу. Без параметра, отдавались только сертификаты с ключами.

@norguhtar
Copy link
Author

Тесты поправили. Билд проходит. Добавили еще умолчания в getHashedData

@norguhtar
Copy link
Author

Тут вылезли конфликты. Мне вносить изменения которые будут включать и ваши и наши методы? Или подождать вашей реализации по нашим предложениям?

@vgoma
Copy link
Owner

vgoma commented Nov 7, 2020

@norguhtar по поводу конфликтов в dist/* и lib/* не заморачивайтесь и принимайте из мастера. Перед публикацией я их все равно сгенерирую еще раз. Главное решить все, что в src/*.

@norguhtar
Copy link
Author

хорошо. Там есть пересечения нашего функционала и нового функционала в 2.10 тут как?

@vgoma
Copy link
Owner

vgoma commented Nov 7, 2020

@norguhtar попробовал подлить в вашу ветку мастер, у меня получилось порешать конфликты без проблем.
В сухом остатке нас будет интересовать это:
Screenshot 2020-11-07 at 22 36 39

Если вы о дублировании функционала, надо подумать о предназначении каждого из методов, тк в новой версии могло появиться то, что вам нужно.

Наблюдаю в вашей реализации вещи, которые не будут работать во всех заявленных браузерах:
Screenshot 2020-11-07 at 22 40 15

в синхронной версии плагина это не будет работать (в старых IE и Firefox)

Чтобы влить ваши изменения необходимо обновить примеры (хотя-бы для UMD) и протестировать их работу во всех браузерах, включая IE9.

Только на примерах люди смогут понять как с чем едят новое API.

Если это слишком затратно, можете подождать до следующей версии, в которой добавлю поддержку написания своих реализаций в кросс-браузерном API. Тк бывают ситуации (как ваша), в которой хочется реализовать свою логику используя низкоуровневое API cades плагина напрямую, при этом сохранив поддержку браузеров с синхронной и асинхронной версией плагина не писав реализацию дважды.

@norguhtar
Copy link
Author

Сейчас есть пересечения по getHashedData с нашей стороны и createHash с вашей, они прочти для одного и того же в дальнейшем используются.

С примерами немного сложнее мы не на ангуляре пишем. Но примеры без ангуляра могу дать, только в каком виде? Могу к привести примеры зачем были добавлены выше приведенные методы и как используются у нас.

@norguhtar
Copy link
Author

Ну а насчет исправлений да можем подождать следующую версию. В текущей нами сделанной ветке необходимый нам функционал работает, когда аналогичный функционал появится в релизе просто переключимся.

@vgoma
Copy link
Owner

vgoma commented Nov 8, 2020

@norguhtar в репозитории лежат примеры как для ангуляра и реакта, так и для использования через тэг script (без библиотек и фреймворков). Можете добавить в пример с тэгом script сценарии, демонстрирующие работу добавленных методов. Не забудьте протестировать работу во всех заявленных в README браузерах.

Вместо getHashedData используйте пожалуйста createHash, тк он умеет принимать потоки бинарных данных (что полезно при подписании файлов) и возвращает уже созданный хеш, а не внутренний объект cades плагина.

@norguhtar
Copy link
Author

Вместо getHashedData используйте пожалуйста createHash, тк он умеет принимать потоки бинарных данных (что полезно при подписании файлов) и возвращает уже созданный хеш, а не внутренний объект cades плагина.

Эмм тут есть проблема. Нам требуется не только первичное подписание, но и повторное подписание. И как раз в CoSignature вылазит. Там на вход подается хеш объект.

@norguhtar
Copy link
Author

Если это слишком затратно, можете подождать до следующей версии, в которой добавлю поддержку написания своих реализаций в кросс-браузерном API. Тк бывают ситуации (как ваша), в которой хочется реализовать свою логику используя низкоуровневое API cades плагина напрямую, при этом сохранив поддержку браузеров с синхронной и асинхронной версией плагина не писав реализацию дважды.

Получилось?

@vgoma
Copy link
Owner

vgoma commented Feb 17, 2021

Если это слишком затратно, можете подождать до следующей версии, в которой добавлю поддержку написания своих реализаций в кросс-браузерном API. Тк бывают ситуации (как ваша), в которой хочется реализовать свою логику используя низкоуровневое API cades плагина напрямую, при этом сохранив поддержку браузеров с синхронной и асинхронной версией плагина не писав реализацию дважды.

Получилось?

Пока в процессе.

Отслеживать можно тут:
https://github.com/vgoma/crypto-pro/releases

@dmitryshelomanov
Copy link

dmitryshelomanov commented Jul 13, 2022

Понадобилось тоже самое, есть варианты получить идентификатор сессии из бейс64 которы сбис отправляет ?

      // создание объекта, который умеет кодировать и декодировать
      // @ts-ignore
      const oEnvelopedData2 = await window.cadesplugin.CreateObjectAsync(
        "CAdESCOM.CPEnvelopedData"
      );
      // указываем что должны декодировать
      await oEnvelopedData2.Decrypt(sessionInfo);
      // ОБЯЗАТЕЛЬНО перед получением контента необходимо указать что сообщение было зашифровано в формате base64
      // @ts-ignore
      await oEnvelopedData2.propset_ContentEncoding(
        // @ts-ignore
        window.cadesplugin.CADESCOM_BASE64_TO_BINARY
      );
      try {
        // отображение контента
        const content = await oEnvelopedData2.Content;
        console.info('content', content);
      } catch (e) {
        console.warn(e);
      }

что то такое на ваниле получается

@norguhtar

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants