Add RT iter to babashka (#1781)
This commit is contained in:
parent
1874da1d2d
commit
b16ecfdf6c
3 changed files with 54 additions and 43 deletions
|
|
@ -9,6 +9,9 @@ A preview of the next release can be installed from
|
||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
|
- [#1761] For compatibility with [Sieppari](https://github.com/metosin/sieppari), added the following entry in `babashka.impl.classes/classes`:
|
||||||
|
- Support `support clojure.lang.RT/iter` calls
|
||||||
|
|
||||||
- [#1760] For compatibility with [Fireworks v0.10.3](https://github.com/paintparty/fireworks), added the following to `:instance-checks` entry in `babashka.impl.classes/classes`([@paintparty](https://github.com/paintparty))
|
- [#1760] For compatibility with [Fireworks v0.10.3](https://github.com/paintparty/fireworks), added the following to `:instance-checks` entry in `babashka.impl.classes/classes`([@paintparty](https://github.com/paintparty))
|
||||||
- `clojure.lang.PersistentArrayMap$TransientArrayMap`
|
- `clojure.lang.PersistentArrayMap$TransientArrayMap`
|
||||||
- `clojure.lang.PersistentHashMap$TransientHashMap`
|
- `clojure.lang.PersistentHashMap$TransientHashMap`
|
||||||
|
|
|
||||||
|
|
@ -128,6 +128,7 @@
|
||||||
{:methods [{:name "aget"}
|
{:methods [{:name "aget"}
|
||||||
{:name "aset"}
|
{:name "aset"}
|
||||||
{:name "aclone"}
|
{:name "aclone"}
|
||||||
|
{:name "iter"}
|
||||||
;; we expose this via the Compiler/LOADER dynamic var
|
;; we expose this via the Compiler/LOADER dynamic var
|
||||||
{:name "baseLoader"}]}
|
{:name "baseLoader"}]}
|
||||||
clojure.lang.Compiler
|
clojure.lang.Compiler
|
||||||
|
|
|
||||||
|
|
@ -134,55 +134,62 @@
|
||||||
|
|
||||||
(deftest keygen-test
|
(deftest keygen-test
|
||||||
(is (true?
|
(is (true?
|
||||||
(bb nil
|
(bb nil
|
||||||
'(do (ns keygen
|
'(do (ns keygen
|
||||||
(:import [java.security KeyPairGenerator Signature]))
|
(:import [java.security KeyPairGenerator Signature]))
|
||||||
|
|
||||||
(defn generate-key-pair
|
(defn generate-key-pair
|
||||||
"Generates a public/private key pair."
|
"Generates a public/private key pair."
|
||||||
[]
|
[]
|
||||||
(let [keygen (KeyPairGenerator/getInstance "RSA")]
|
(let [keygen (KeyPairGenerator/getInstance "RSA")]
|
||||||
(.initialize keygen 2048)
|
(.initialize keygen 2048)
|
||||||
(.generateKeyPair keygen)))
|
(.generateKeyPair keygen)))
|
||||||
|
|
||||||
(defn create-signature
|
(defn create-signature
|
||||||
"Signs the given message using the private key."
|
"Signs the given message using the private key."
|
||||||
[private-key message]
|
[private-key message]
|
||||||
(let [signature (Signature/getInstance "SHA256withRSA")]
|
(let [signature (Signature/getInstance "SHA256withRSA")]
|
||||||
(.initSign signature private-key)
|
(.initSign signature private-key)
|
||||||
(.update signature (.getBytes message "UTF-8"))
|
(.update signature (.getBytes message "UTF-8"))
|
||||||
(.sign signature)))
|
(.sign signature)))
|
||||||
|
|
||||||
(defn verify-signature
|
(defn verify-signature
|
||||||
"Verifies the given signed data using the public key."
|
"Verifies the given signed data using the public key."
|
||||||
[public-key message signed-data]
|
[public-key message signed-data]
|
||||||
(let [signature (Signature/getInstance "SHA256withRSA")]
|
(let [signature (Signature/getInstance "SHA256withRSA")]
|
||||||
(.initVerify signature public-key)
|
(.initVerify signature public-key)
|
||||||
(.update signature (.getBytes message "UTF-8"))
|
(.update signature (.getBytes message "UTF-8"))
|
||||||
(.verify signature signed-data)))
|
(.verify signature signed-data)))
|
||||||
|
|
||||||
(let [key-pair (generate-key-pair)
|
(let [key-pair (generate-key-pair)
|
||||||
private-key (.getPrivate key-pair)
|
private-key (.getPrivate key-pair)
|
||||||
public-key (.getPublic key-pair)
|
public-key (.getPublic key-pair)
|
||||||
message "This is a secret message"
|
message "This is a secret message"
|
||||||
signed-data (create-signature private-key message)]
|
signed-data (create-signature private-key message)]
|
||||||
(verify-signature public-key message signed-data))))))
|
(verify-signature public-key message signed-data))))))
|
||||||
|
|
||||||
(is (true?
|
(is (true?
|
||||||
(bb nil '(do (import
|
(bb nil '(do (import
|
||||||
'[java.security KeyPairGenerator]
|
'[java.security KeyPairGenerator]
|
||||||
'[java.security.spec ECGenParameterSpec])
|
'[java.security.spec ECGenParameterSpec])
|
||||||
|
|
||||||
(def keypair-algo "EC")
|
(def keypair-algo "EC")
|
||||||
(def keypair-curve "secp256r1")
|
(def keypair-curve "secp256r1")
|
||||||
|
|
||||||
(defn keypair
|
(defn keypair
|
||||||
"Generates a new key pair with the given alias, using the keypair-algo and keypair-curve"
|
"Generates a new key pair with the given alias, using the keypair-algo and keypair-curve"
|
||||||
[]
|
[]
|
||||||
(let [keygen (KeyPairGenerator/getInstance keypair-algo)]
|
(let [keygen (KeyPairGenerator/getInstance keypair-algo)]
|
||||||
(.initialize keygen (ECGenParameterSpec. keypair-curve))
|
(.initialize keygen (ECGenParameterSpec. keypair-curve))
|
||||||
(.generateKeyPair keygen)))
|
(.generateKeyPair keygen)))
|
||||||
|
|
||||||
(let [kp (keypair)
|
(let [kp (keypair)
|
||||||
pk (.getPublic kp)]
|
pk (.getPublic kp)]
|
||||||
(bytes? (.getEncoded pk))))))))
|
(bytes? (.getEncoded pk))))))))
|
||||||
|
|
||||||
|
;; RT iter test
|
||||||
|
(deftest clojure-RT-iter-test
|
||||||
|
(is (= (iterator-seq (.iterator [1 2 3]))
|
||||||
|
(bb nil '(do (ns test
|
||||||
|
(:import [clojure.lang RT]))
|
||||||
|
(iterator-seq (clojure.lang.RT/iter [1 2 3])))))))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue