Packages

erlang common library

Current section

Files

Jump to
elib src elib_digest.erl
Raw

src/elib_digest.erl

-module(elib_digest).
%% API
-export([
md5_hex/1,
file_md5_hex/1,
sign/3
]).
md5_hex(Data) ->
S = erlang:md5(Data),
hex(S).
hex(Bin) ->
iolist_to_binary([io_lib:format("~2.16.0b", [X]) || X <- binary_to_list(Bin)]).
file_md5_hex(File) ->
case file:open(File, [binary, raw, read]) of
{ok, IO} -> file_md5_hex2(IO, erlang:md5_init());
Error -> Error
end.
file_md5_hex2(IO, C) ->
case file:read(IO, 1024) of
{ok, Bin} ->
file_md5_hex2(IO, erlang:md5_update(C, Bin));
eof ->
file:close(IO),
{ok, hex(erlang:md5_final(C))}
end.
sign(Type, PrivateKey, Body) when is_atom(Type), is_binary(PrivateKey), is_binary(Body) ->
[PemEntry] = public_key:pem_decode(PrivateKey),
PrivateKey2 = public_key:pem_entry_decode(PemEntry),
Sign = public_key:sign(Body, sha256, PrivateKey2),
base64:encode_to_string(Sign).