Hi I'm trying to interface with a web service that expects a base64 code produced as followed (I included both the direct output of digest and the base64 encoding):
require 'openssl' digest = OpenSSL::Digest::Digest.new('sha256') OpenSSL::HMAC.digest(digest, "key", "string") => "\x97\xD1[\xEA\xBA\x06\r\a8\xECu\x9E\xA3\x18e\x17\x8A\xB8\xBBx\e-!\adK\xA8\x81\xF3\x99\xD8\xD6" Base64.encode64(OpenSSL::HMAC.digest(digest, "key", "string")) => "l9Fb6roGDQc47HWeoxhlF4q4u3gbLSEHZEuogfOZ2NY=\n" I need to send the base64 encoded string to the web service. I tried with pandec and base64-clj: ✓ ~ ➤ lein try [pandect] [base64-clj] ... user=> (require '[base64-clj.core :as base64]) nil user=> (require '[pandect.core :as p]) nil user=> (p/sha256-hmac "string" "key") "97d15beaba060d0738ec759ea31865178ab8bb781b2d2107644ba881f399d8d6" user=> (base64/encode (p/sha256-hmac "string" "key")) "OTdkMTViZWFiYTA2MGQwNzM4ZWM3NTllYTMxODY1MTc4YWI4YmI3ODFiMmQyMTA3NjQ0YmE4ODFmMzk5ZDhkNg==" As you can see the generated sha-256 is similar to the ruby digest, but it's not the same and the base64 is completely different. I've also tried using javax.crypto.Mac directly but it's the same: (defn- secret-key-inst [key mac] (SecretKeySpec. (.getBytes key) (.getAlgorithm mac))) (defn- sign* [key string] "Returns the signature of a string with a given key, using a SHA-256 HMAC." (let [mac (Mac/getInstance "HMACSHA256") secretKey (secret-key-inst key mac)] (-> (doto mac (.init secretKey) (.update (.getBytes string))) .doFinal))) (defn sign [key string] (let [bytes (sign* key string)] (apply str (map #(format "2%x" %) bytes)))) Does anybody has an idea of how can I produce the same result as ruby? I really don't want to resort to calling jruby snippet from clojure :( Thanks -- Haim -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.