Current section

Files

Jump to
ex_wechat lib wechat helpers crypto_helper.ex
Raw

lib/wechat/helpers/crypto_helper.ex

defmodule Wechat.Helpers.CryptoHelper do
@moduledoc """
Generate sha1 hash and verify sha1 with given string.
"""
@doc """
Check the sha hash of `string` with `signature`.
"""
def wechat_hash_equal?(params, signature) do
wechat_sha(params) == signature
end
@doc """
Wechat sha hash
"""
def wechat_sha(params) when is_map(params) do
params
|> Enum.sort
|> Enum.map(fn({key, value}) -> "#{key}=#{value}" end)
|> Enum.join("&")
|> sha1_hash
end
def wechat_sha(params) when is_list(params) do
params
|> Enum.sort
|> Enum.join
|> sha1_hash
end
def generate_nonce_str do
23
|> :crypto.strong_rand_bytes
|> Base.encode64
|> binary_part(0, 32)
|> String.replace(~r/[=\/]/, "")
end
defp sha1_hash(string) do
:sha
|> :crypto.hash(string)
|> Base.encode16
|> String.downcase
end
end