!7 lib 1011969 lib 1011968 // bouncycastle static LS _stickyLibs_bouncyCastle = ll(#1011969, #1011968); lib 1400450 // web-push-5.1.1 import org.bouncycastle.jce.ECNamedCurveTable; import org.bouncycastle.jce.interfaces.ECPrivateKey; import org.bouncycastle.jce.interfaces.ECPublicKey; import org.bouncycastle.jce.spec.ECNamedCurveParameterSpec; import org.bouncycastle.jce.provider.BouncyCastleProvider; 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); } print("Key pair: " + generateKeyPair()); ECPublicKey publicKey = cast keyPair.getPublic(); ECPrivateKey privateKey = cast keyPair.getPrivate(); byte[] encodedPublicKey = nl.martijndwars.webpush.Utils.Utils.encode(publicKey); byte[] encodedPrivateKey = nl.martijndwars.webpush.Utils.Utils.encode(privateKey); print("Public key: " + base64encode(encodedPublicKey)); print("Private key: " + shorten(16, base64encode(encodedPrivateKey))); } }