Библиотека JAR с надувным замком

Я работаю над проектом с несколькими подпроектами, и все они используют библиотеку утилит, которую я создал для хеширования, подписи и шифрования сообщений. Эта библиотека, по сути, является оболочкой для надувного замка.

Когда я запускаю тесты, связанные с библиотекой, все проходит и все в порядке. Когда я упаковываю библиотеку утилит в банку, происходят две вещи:

  1. Подпроект, использующий библиотеку, не может найти банки, связанные с надувным замком.
  2. Даже когда я добавляю банки с надувными замками в подпроект, использующий библиотеку, проект не может найти поставщика безопасности надувных замков "BC".

Вот конфигурация экспортированного jar-файла утилит в intellij:  Изображение артефакта

Ошибка:  error

Инициализация провайдера безопасности:  инициализация

Почему я не могу экспортировать библиотеку с включенным поставщиком безопасности? Это побочный эффект от сгенерированного загрузчика классов?

Заранее спасибо.


person AndrewD    schedule 07.09.2015    source источник
comment
Обратите внимание, что вы упомянули только bouncycastle с 67 подписчиками (большинство из которых будут неактивными). Всегда старайтесь включать более высокий тег, такой как криптография, чтобы ваш вопрос был замечен (между десятью миллионами вопросов).   -  person Maarten Bodewes    schedule 07.09.2015
comment
Спасибо, добавили новый тег.   -  person AndrewD    schedule 08.09.2015


Ответы (1)


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

Другая проблема может заключаться в том, что вы регистрируете поставщика в конструкторе. Если конструктор не вызывается перед поставщиком, могут возникнуть проблемы. Как правило, вы должны зарегистрировать поставщика при первой же возможности, то есть в статическом блоке кода первого класса, который используется для вашего приложения. Обратите внимание, что повторная регистрация поставщика не представляет риска - он просто обнаружит, что один уже зарегистрировался под тем же именем, и ничего не сделает.

person Maarten Bodewes    schedule 07.09.2015
comment
Что интересно, класс Crypto - это синглтон с ленивой инициализацией. Когда я декомпилировал класс Crypto с поставщиком в статическом блоке, он выглядел так же, как когда он был у меня в конструкторе (это может быть intellij, выполняющий оптимизацию шаблона статического держателя класса под обложками). Я инициализирую класс перед его использованием. Итак, я собираюсь посмотреть, как переупаковать поставщика BC. Я думал, что он должен работать как любой другой jar, поскольку у меня он есть в моем пути к классам для подпроектов. - person AndrewD; 08.09.2015
comment
По-прежнему возникают проблемы с упаковкой контейнера BC вместе с моей банкой утилит, но я думаю, что могу ожидать, что мои подпроекты предоставят его. - person AndrewD; 08.09.2015