Size: a a a

Clojure — русскоговорящее сообщество

2021 November 23

MB

Mikhail Beliansky in Clojure — русскоговорящее сообщество
Подскажите, пожалуйста, как вот это сделать:

The X-Loop-Signature is a base-64, HMAC hash of body payload using the Webhook Secret provided by Loop.
источник

MB

Mikhail Beliansky in Clojure — русскоговорящее сообщество
Как такой хэш получить в кложе?
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
тут есть всякого такого
https://funcool.github.io/buddy-core/latest/
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
что-то вроде

(defn- factory
 "Builds a function to compute the HMAC of a payload, given a secret-key.
  `hmac-type` is the algorithm to use for the HMAC."
 [^String hmac-type input-transformer key-transformer output-transformer]
 (fn [secret-string ^String raw-input]
   (let [secret ^"[B" (key-transformer secret-string)
         input  ^"[B" (input-transformer raw-input)
         key    (SecretKeySpec. secret hmac-type)]
     (-> (doto (Mac/getInstance hmac-type) (.init key))
         (.doFinal input)
         (output-transformer)))))
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
(def sha256 (factory "HmacSHA256"
                    string->bytes
                    string->bytes
                    b->b64))
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
(sha256 secret-key payload)
источник

Г

Григорий in Clojure — русскоговорящее сообщество
а что за ^"[B"?
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
^bytes
источник

Г

Григорий in Clojure — русскоговорящее сообщество
k
источник

MB

Mikhail Beliansky in Clojure — русскоговорящее сообщество
пробовал еще bytes->b64, но получается что-то неизвестное)
источник

MB

Mikhail Beliansky in Clojure — русскоговорящее сообщество
(-> (json/generate-string sample)
     (mac/hash {:key "d5044d4220937b57" :alg :hmac})
     (codecs/bytes->b64)
источник

A

Andjey in Clojure — русскоговорящее сообщество
(ns hmac
 (:import (javax.crypto Mac)
          (javax.crypto.spec SecretKeySpec)))

(defn toHexString [bytes]
 (apply str (map #(format "%02x" %) bytes)))

(defn hmac [^String key ^String string]
 (let [mac (Mac/getInstance "HmacSHA256")
       secretKey (SecretKeySpec. (.getBytes key) (.getAlgorithm mac))]
   (-> (doto mac
         (.init secretKey)
         (.update (.getBytes string)))
       .doFinal
       toHexString)))
источник

A

Andjey in Clojure — русскоговорящее сообщество
вот так генерю, где-то нашел и скопипастил стандартную реализацию
источник

MB

Mikhail Beliansky in Clojure — русскоговорящее сообщество
там, наверное, не эмодзи было?
источник

A

Andjey in Clojure — русскоговорящее сообщество
% со скобкой закрывающей
источник

A

Andjey in Clojure — русскоговорящее сообщество
поправил )
источник

MB

Mikhail Beliansky in Clojure — русскоговорящее сообщество
выдает то-же самое, что и


 (-> (js/write-str body :escape-slash true)
     (mac/hash {:key "d5044d4220937b57" :alg :hmac})
     (codecs/bytes->hex)
     );; => "b5ada318e1e774c11133240fc7ab05174eca91cae81372e0121205cf08a28262"

но, почему-то, не совпадает с тем, что приходит в запросе. Там вообще строка не похожа на хекс:

"b9MmlO7Umo/00ps5mJnCzYNTcQ9K++O2ctPc35NDDLo="
источник

A

Andjey in Clojure — русскоговорящее сообщество
должно еще быть описание как боди в строку правильно серилизовать, например отсортировать ключи в алфавитном порядке, а потом склеить
источник

MB

Mikhail Beliansky in Clojure — русскоговорящее сообщество
логично, но единственное замечание — эскейпить слэш
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
строка похожа на base64
источник