Skip to content

Instantly share code, notes, and snippets.

@Eng-Fouad
Created August 29, 2017 01:33
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Eng-Fouad/0241c3bf77f25239b26ba11010bd2407 to your computer and use it in GitHub Desktop.
Save Eng-Fouad/0241c3bf77f25239b26ba11010bd2407 to your computer and use it in GitHub Desktop.
Generating ECPrivateKey and ECPublicKey

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);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment