!7 !include once #1030462 // BouncyCastle cprint { KeyPair generateKeyPair() ctex { ECNamedCurveParameterSpec parameterSpec = ECNamedCurveTable.getParameterSpec(nl.martijndwars.webpush.Utils.CURVE); KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(nl.martijndwars.webpush.Utils.ALGORITHM, org.bouncycastle.jce.provider.BouncyCastleProvider.PROVIDER_NAME); keyPairGenerator.initialize(parameterSpec); ret keyPairGenerator.generateKeyPair(); } start-thread { Provider provider = Security.getProvider(org.bouncycastle.jce.provider.BouncyCastleProvider.PROVIDER_NAME); print("Provider:" + provider); if (provider == null) { Security.addProvider(new BouncyCastleProvider); provider = Security.getProvider(org.bouncycastle.jce.provider.BouncyCastleProvider.PROVIDER_NAME); print("Provider:" + provider); } KeyPair keyPair = generateKeyPair(); ECPublicKey publicKey = cast keyPair.getPublic(); ECPrivateKey privateKey = cast keyPair.getPrivate(); byte[] encodedPublicKey = nl.martijndwars.webpush.Utils.encode(publicKey); byte[] encodedPrivateKey = nl.martijndwars.webpush.Utils.encode(privateKey); print("Public key: " + base64encode(encodedPublicKey)); print("Private key: " + shorten(16, base64encode(encodedPrivateKey))); } }