diff --git a/src/babashka/impl/classes.clj b/src/babashka/impl/classes.clj index 9913d715..ef5568f2 100644 --- a/src/babashka/impl/classes.clj +++ b/src/babashka/impl/classes.clj @@ -786,6 +786,8 @@ java.security.KeyPairGenerator (instance? java.security.Signature v) java.security.Signature + (instance? java.security.Key v) + java.security.Key (instance? java.util.Set v) java.util.Set (instance? java.io.Closeable v) diff --git a/test/babashka/interop_test.clj b/test/babashka/interop_test.clj index 2edf710e..f5f569a1 100644 --- a/test/babashka/interop_test.clj +++ b/test/babashka/interop_test.clj @@ -166,4 +166,23 @@ public-key (.getPublic key-pair) message "This is a secret message" signed-data (create-signature private-key message)] - (verify-signature public-key message signed-data))))))) + (verify-signature public-key message signed-data)))))) + + (is (true? + (bb nil '(do (import + '[java.security KeyPairGenerator] + '[java.security.spec ECGenParameterSpec]) + + (def keypair-algo "EC") + (def keypair-curve "secp256r1") + + (defn keypair + "Generates a new key pair with the given alias, using the keypair-algo and keypair-curve" + [] + (let [keygen (KeyPairGenerator/getInstance keypair-algo)] + (.initialize keygen (ECGenParameterSpec. keypair-curve)) + (.generateKeyPair keygen))) + + (let [kp (keypair) + pk (.getPublic kp)] + (bytes? (.getEncoded pk))))))))