Generate keys:
KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC");
kpg.initialize(new ECGenParameterSpec("secp521r1"), new SecureRandom());
KeyPair keyPair = kpg.generateKeyPair();
ECPrivateKey privateKey = (ECPrivateKey) keyPair.getPrivate();
ECPublicKey publicKey = (ECPublicKey) keyPair.getPublic();
byte[] privateKeyS = privateKey.getS().toByteArray();
byte[] publicKeyX = publicKey.getW().getAffineX().toByteArray();
byte[] publicKeyY = publicKey.getW().getAffineY().toByteArray();
String encodedPrivateKey = Base64.getEncoder().encodeToString(privateKeyS);
String encodedPublicKeyX = Base64.getEncoder().encodeToString(publicKeyX);
String encodedPublicKeyY = Base64.getEncoder().encodeToString(publicKeyY);
System.out.println("encodedPrivateKey = " + encodedPrivateKey);
System.out.println("encodedPublicKeyX = " + encodedPublicKeyX);
System.out.println("encodedPublicKeyY = " + encodedPublicKeyY);
The output:
encodedPrivateKey = AX0oM0IDnsCI4Ex1FPKrInc4paXZrHVYOjrVI3V+aNwlYvmeu8chj8o873GusofaLnehFYbmsDettUnRxnvLmV19 encodedPublicKeyX = AKSs6Yyi7c/oZtfc2uRM9kePKnCvI7+QVSJX4aauRGRnLscg5dSLE1AIQMigM+lNiUUfM4RuWUcmEqbXMqmjbDAZ encodedPublicKeyY = ANru7OLmipVjprfnFshiLi8tSDHbYrTpqKkpcRgQ75NxrdAd58cqcsjO7daBsGWgmuEDNB6so7JngyTcR5hPMT3k
Regenerating the keys:
byte[] privateKeyS = Base64.getDecoder().decode(encodedPrivateKey);
byte[] publicKeyX = Base64.getDecoder().decode(encodedPublicKeyX);
byte[] publicKeyY = Base64.getDecoder().decode(encodedPublicKeyY);
ECPoint pubPoint = new ECPoint(new BigInteger(1, publicKeyX), new BigInteger(1, publicKeyY));
AlgorithmParameters parameters = AlgorithmParameters.getInstance("EC");
parameters.init(new ECGenParameterSpec("secp521r1"));
ECParameterSpec ecParameters = parameters.getParameterSpec(ECParameterSpec.class);
ECPublicKeySpec pubSpec = new ECPublicKeySpec(pubPoint, ecParameters);
ECPrivateKeySpec privateSpec = new ECPrivateKeySpec(new BigInteger(1, privateKeyS), ecParameters);
KeyFactory kf = KeyFactory.getInstance("EC");
ECPrivateKey privateKey = (ECPrivateKey) kf.generatePrivate(privateSpec);
ECPublicKey publicKey = (ECPublicKey) kf.generatePublic(pubSpec);