Thanks. This solved the problem :)

Bye


On Fri, Feb 7, 2014 at 12:57 PM, Thomas Heller <th.hel...@gmail.com> wrote:

> Just a quick guess but it seems like the ruby version base64 encodes the
> BINARY version of the digest, while the clojure version encodes the HEX
> version of the digest.
>
> The sign function also converts to hex, so if you put that into base64
> encode you get the same (wrong) result, use the returned bytes of .doFinal
> and use that to generate the base64 and you should be fine.
>
> HTH,
> /thomas
>
>
> On Friday, February 7, 2014 10:08:27 AM UTC+1, babysnakes wrote:
>>
>> 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"))
>> "OTdkMTViZWFiYTA2MGQwNzM4ZWM3NTllYTMxODY1MTc4YWI4YmI3ODFiMmQy
>> MTA3NjQ0YmE4ODFmMzk5ZDhkNg=="
>>
>> 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.
>



-- 
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.

Reply via email to