Add Security classes in order to be able to generate signatures (#261)

This commit is contained in:
Jeroen van Dijk 2020-02-09 20:45:29 +01:00 committed by GitHub
parent 08ac36ebe1
commit c8fd1c7931
3 changed files with 28 additions and 1 deletions

View file

@ -58,6 +58,9 @@ Keep notes here about how adding libraries and classes to Babashka affects the b
<!-- 2020/01/08, ..., 38.7mb / 11.3mb zipped -->
<!-- Added: `clojure.data.xml`. Growth: 1.8mb / ... -->
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).

View file

@ -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))

View file

@ -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"))))))