В настоящее время я обновляю свою библиотеку сертификатов x.509 для поддержки ECC. Большинство реализованных компоновщиков берут общедоступный ключ и получают алгоритм и тому подобное из ключа. В RSA это просто, вы проверяете алгоритм ключа и можете проверить длину в битах. Однако с ECC ключ основан на кривой, и имя кривой (конечно) должно быть указано в сертификате (как OID).
Проблема, над которой я сейчас работаю, заключается в том, чтобы найти способ перейти от java.security.interfaces.ECPublicKey или org.bouncycastle.jce.interfaces.ECPublicKey к имени кривой. (Обе реализации полностью отличаются друг от друга...)
Один из способов, который я могу придумать, - это получить ECPoint ключа и подтвердить, что он находится на заданной кривой. Таким образом, я могу протестировать все поддерживаемые кривые, однако это кажется громоздким во время выполнения и, возможно, подвержено ошибкам, если есть точки, перекрывающие 2 или более кривых.
Другой способ — получить ECCurve (реализация bc) или EllipticCurve (имплементация jre) и сравнить детали кривой с поддерживаемыми реализациями. Это также включает в себя пошаговое выполнение каждой известной кривой.
Кто-нибудь знает лучший способ найти имя кривой на основе данных кривой или публичного ключа, используя только jre (8/9) и bc. И как вы относитесь к первому решению, какова вероятность ложных срабатываний.