Я пишу несколько тестов Junit, в которых генерируется ряд объектов типа java.security.KeyPair (из java.security.KeyPairGenerator)
Я добавляю некоторые утверждения, чтобы подтвердить, что ключи, содержащиеся в этих KeyPair, имеют ожидаемые атрибуты (ожидаемый алгоритм и ожидаемые размеры).
Например, я добавил утверждение утверждения, чтобы подтвердить, что алгоритм является ожидаемым алгоритмом, используя:
String expectedAlgorithm = "RSA";
String errorMsg = "The key is not of the expected algorithm";
assertEquals(errorMsg, expectedAlgorithm, privateKey.getAlgorithm());
Я пытался найти какой-то метод в KeyPair или в самих ключах, который возвращает размер (количество бит) ключей, но я не смог найти такой метод.
Я проверил вывод метода toString() ключей, чтобы увидеть, содержит ли эта строка размер ключей, используя:
String stringRepresentation = publicKey.toString();
Я обнаружил, что для поставщика SunRsaSign строка содержит количество битов в своей первой строке (и, следовательно, можно подтвердить размер ключа путем разбора этой строки. Но затем, когда я проверил тот же метод для Bouncy Castle, я обнаружил, что строка не содержит количество битов, как показано ниже:
Вывод toString() для ключа от поставщика RsaSunSign:
Sun RSA public key, 1024 bits
modulus: 10827493886854...
public exponent: 65537
Вывод toString() для ключа от поставщика Bouncy Castle:
RSA Public Key
modulus: 830d0eb805c527e8...
public exponent: 10001
Таким образом, очевидно, небезопасно использовать вывод строкового представления ключа для подтверждения его размера, поскольку мы не можем знать, какой провайдер будет использоваться.
Итак, мой вопрос: учитывая KeyPair (а также KeyPairGenerator, который использовался для создания этой KeyPair), существует ли независимый от поставщика способ подтвердить размер ключей в KeyPair?