HMAC in Elixir and Python
Recently I had to implement HMAC SHA1 using Elixir. It's pretty simple in Python. Here's the code in Python3.
import hashlib
import hmac
secret_key = b"secret-key"
text = b"This is a secret"
hmac_sha1 = hmac.HMAC(key=secret_key, msg=text, digestmod=hashlib.sha1).hexdigest()
print("HMAC is {}".format(hmac_sha1)) # HMAC is 08dc7014b3e778a44af52ea7a16a973a9b48f0dd
I wanted to do the same, but couldn't find any resource so I went into the Erlang's crypto
module and it has a hmac/3
function which does the same. This is how we can use the erlang module to create a HMAC SHA1 in Elixir.
secret_key = "secret-key"
text = "This is a secret"
hmac = :crypto.hmac(:sha, secret_key, text)
|> Base.encode16
|> String.downcase
IO.puts "HMAC is #{hmac}" # HMAC is 08dc7014b3e778a44af52ea7a16a973a9b48f0dd
In the hmac/3
you can also pass :md5
, :sha224
, :sha256
, :sha384
, :sha512
for different algorithms. Erlang's crypto
module is awesome and pretty powerful. This is where, I very much like Elixir and Erlang's interoperability.