В моей программе я могу успешно восстановить закрытый ключ EC из файла PEM, используя Spongy Castle (эквивалент Bouncy Castle для Android). Поскольку файл не содержит открытого ключа, я пытаюсь пересчитать открытый ключ из закрытого ключа.
Я могу вычислить действительный открытый ключ. Однако мой открытый ключ содержит гораздо больше данных (311 байт), чем исходная ссылка (92 байта). Это даже больше, чем закрытый ключ (152 байта).
Как получить сжатую (?) версию открытого ключа
PrivateKey privateKey; // private key from pem file
PublicKey referencePublicKey; // public key in my testing environment, generated with an EC KeyPairGenerator
KeyFactory factory = KeyFactory.getInstance("EC"); // using SpongyCastle provider
ECPrivateKeySpec privSpec = factory.getKeySpec(privateKey, ECPrivateKeySpec.class);
ECParameterSpec params = privSpec.getParams();
ECPoint q = params.getG().multiply(privSpec.getD());
ECPublicKeySpec pubSpec = new ECPublicKeySpec(q, params);
PublicKey publicKey = factory.generatePublic(pubSpec);
System.out.println( referencePublicKey.equals(publicKey) ); // true
System.out.println( referencePublicKey.getEncoded().length ); // 92
System.out.println( publicKey.getEncoded().length ); // 311