2015-09-07 6 views
1

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

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

  1. Подпроект, который использует библиотеку, не может найти банки, связанные с надувным замком.
  2. Даже когда я добавить Надувной замок банку к подпроекту, который использует библиотеку, проект не может найти Надувной замок поставщик безопасности «ОК»

Вот конфигурация экспортируемой коммунальной банки в IntelliJ: Artifact Picture

ошибка: error

инициализации поставщика безопасности: initialization

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

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

+1

Обратите внимание, что вы упомянули только [tag: bouncycastle] с 67 последователями (большинство из которых будут неактивными). Всегда старайтесь включать тег «выше», например [tag: криптография], чтобы получить ваш вопрос (между десятью миллионами вопросов там). –

+0

Спасибо, добавлен новый тег. – AndrewD

ответ

1

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

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

+0

Что интересно, класс Crypto - это лениво инициализированный синглтон. Когда я декомпилировал класс Crypto с провайдером в статическом блоке, он выглядел так же, как если бы он был у него в конструкторе (это может быть intellij, выполняющее оптимизацию шаблонов держателей статического класса под обложками). Я инициализирую класс до его использования. Поэтому я собираюсь взглянуть на то, как переупаковать поставщика BC. Я думал, что это должно работать, как и любая другая банка, поскольку у меня есть это в моем классе для подпроектов. – AndrewD

+0

По-прежнему возникают проблемы с упаковкой контейнера BC с моей утилитой jar, но, я думаю, я могу ожидать, что мои подпроекты предоставят ее. – AndrewD

Смежные вопросы