From c8fd1c7931d7842ebaec1fa8faf06d4ab58573bd Mon Sep 17 00:00:00 2001 From: Jeroen van Dijk Date: Sun, 9 Feb 2020 20:45:29 +0100 Subject: [PATCH] Add Security classes in order to be able to generate signatures (#261) --- doc/dev.md | 3 +++ src/babashka/impl/classes.clj | 6 +++++- test/babashka/java_security_test.clj | 20 ++++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 test/babashka/java_security_test.clj diff --git a/doc/dev.md b/doc/dev.md index ec86deb0..72e4b6bf 100644 --- a/doc/dev.md +++ b/doc/dev.md @@ -58,6 +58,9 @@ Keep notes here about how adding libraries and classes to Babashka affects the b +2020/02/09: added java.lang.BigInteger and java.security.MessageDigest. +39281972 - 39072764 = 209kb added. + 2020/01/24, 43eef7075f9dac038d8d28a5ee4e49b6affd9864: 38.3mb, 11.1mb zipped Added hierarchies (derive, isa?, etc). diff --git a/src/babashka/impl/classes.clj b/src/babashka/impl/classes.clj index d63cf2da..e0451f08 100644 --- a/src/babashka/impl/classes.clj +++ b/src/babashka/impl/classes.clj @@ -43,6 +43,7 @@ java.lang.Process java.lang.ProcessBuilder java.lang.ProcessBuilder$Redirect + java.math.BigInteger java.net.URI java.net.HttpURLConnection java.net.ServerSocket @@ -62,6 +63,7 @@ java.nio.file.attribute.FileTime java.nio.file.attribute.PosixFilePermission java.nio.file.attribute.PosixFilePermissions + java.security.MessageDigest java.time.format.DateTimeFormatter java.time.Clock java.time.DateTimeException @@ -189,7 +191,9 @@ java.lang.Process ;; added for issue #239 regarding clj-http-lite (instance? java.io.ByteArrayOutputStream v) - java.io.ByteArrayOutputStream))))) + java.io.ByteArrayOutputStream + (instance? java.security.MessageDigest v) + java.security.MessageDigest))))) (def class-map (gen-class-map)) diff --git a/test/babashka/java_security_test.clj b/test/babashka/java_security_test.clj new file mode 100644 index 00000000..d619a4b2 --- /dev/null +++ b/test/babashka/java_security_test.clj @@ -0,0 +1,20 @@ +(ns babashka.java-security-test + (:require + [babashka.test-utils :as test-utils] + [clojure.edn :as edn] + [clojure.test :as test :refer [deftest is]])) + +(defn bb [expr] + (edn/read-string (apply test-utils/bb nil [(str expr)]))) + +(defn signature [algo] + (clojure.walk/postwalk-replace {::algo algo} + '(defn signature [^String s] + (let [algorithm (java.security.MessageDigest/getInstance ::algo) + digest (.digest algorithm (.getBytes s))] + (format "%032x" (java.math.BigInteger. 1 digest)))))) + +(deftest java-security-test + (is (= "49f68a5c8493ec2c0bf489821c21fc3b" (bb (list 'do (signature "MD5") '(signature "hi"))))) + (is (= "c22b5f9178342609428d6f51b2c5af4c0bde6a42" (bb (list 'do (signature "SHA-1") '(signature "hi"))))) + (is (= "8f434346648f6b96df89dda901c5176b10a6d83961dd3c1ac88b59b2dc327aa4" (bb (list 'do (signature "SHA-256") '(signature "hi"))))))