From 5940b95cd2417da7087400746228acf1e66ecad3 Mon Sep 17 00:00:00 2001 From: Michael Glaesemann Date: Thu, 18 Nov 2021 01:49:59 -0600 Subject: [PATCH] Add javax.crypto classes necessary for calculating hmac shas. (#1066) * Add javax.crypto classes necessary for calculating hmac shas. * Add hmac-256-sha test for javax.crypto. --- src/babashka/impl/classes.clj | 2 ++ test/babashka/crypto_test.clj | 31 +++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 test/babashka/crypto_test.clj diff --git a/src/babashka/impl/classes.clj b/src/babashka/impl/classes.clj index 91aadda1..b33b30f6 100644 --- a/src/babashka/impl/classes.clj +++ b/src/babashka/impl/classes.clj @@ -204,6 +204,8 @@ java.net.http.WebSocket$Builder java.net.http.WebSocket$Listener java.security.cert.X509Certificate + javax.crypto.Mac + javax.crypto.spec.SecretKeySpec javax.net.ssl.SSLContext javax.net.ssl.SSLParameters javax.net.ssl.TrustManager diff --git a/test/babashka/crypto_test.clj b/test/babashka/crypto_test.clj new file mode 100644 index 00000000..08549691 --- /dev/null +++ b/test/babashka/crypto_test.clj @@ -0,0 +1,31 @@ +(ns babashka.crypto-test + (:require [babashka.test-utils :as test-utils] + [clojure.edn :as edn] + [clojure.test :refer [deftest is]]) + (:import (javax.crypto Mac) + (javax.crypto.spec SecretKeySpec))) + +(defn bb [& exprs] + (edn/read-string (apply test-utils/bb nil (map str exprs)))) + +(defn hmac-sha-256 [key data] + (let [algo "HmacSHA256" + mac (Mac/getInstance algo)] + (.init mac (SecretKeySpec. key algo)) + (.doFinal mac (.getBytes data "UTF-8")))) + +(deftest hmac-sha-256-test + (let [key-s "some-key" + data "some-data" + expected-sha (String. (hmac-sha-256 (.getBytes key-s) data))] + (is (= expected-sha (bb '(do (ns net + (:import (javax.crypto Mac) + (javax.crypto.spec SecretKeySpec))) + (defn hmac-sha-256 [key data] + (let [algo "HmacSHA256" + mac (Mac/getInstance algo)] + (.init mac (SecretKeySpec. key algo)) + (.doFinal mac (.getBytes data "UTF-8")))) + (let [key-s "some-key" + data "some-data"] + (String. (hmac-sha-256 (.getBytes key-s) data)))))))))