diff options
Diffstat (limited to 'src/sha.erl')
-rw-r--r-- | src/sha.erl | 85 |
1 files changed, 49 insertions, 36 deletions
diff --git a/src/sha.erl b/src/sha.erl index ff0c2ab61..f9e21f8cc 100644 --- a/src/sha.erl +++ b/src/sha.erl @@ -25,13 +25,16 @@ %%%---------------------------------------------------------------------- -module(sha). + -author('alexey@process-one.net'). --export([start/0, sha/1, sha1/1, sha224/1, sha256/1, sha384/1, - sha512/1, to_hexlist/1]). +-export([start/0, sha/1, sha1/1, sha224/1, sha256/1, + sha384/1, sha512/1, to_hexlist/1]). -ifdef(HAVE_MD2). + -export([md2/1]). + -endif. -include("ejabberd.hrl"). @@ -40,61 +43,71 @@ start() -> crypto:start(), - Res = case erl_ddll:load_driver(ejabberd:get_so_path(), ?DRIVER) of - ok -> ok; - {error, already_loaded} -> ok; - Err -> Err + Res = case erl_ddll:load_driver(ejabberd:get_so_path(), + ?DRIVER) + of + ok -> ok; + {error, already_loaded} -> ok; + Err -> Err end, case Res of - ok -> - Port = open_port({spawn, atom_to_list(?DRIVER)}, [binary]), - register(?DRIVER, Port); - {error, Reason} -> - ?CRITICAL_MSG("unable to load driver '~s': ~s", - [driver_path(), erl_ddll:format_error(Reason)]) + ok -> + Port = open_port({spawn, atom_to_list(?DRIVER)}, + [binary]), + register(?DRIVER, Port); + {error, Reason} -> + ?CRITICAL_MSG("unable to load driver '~s': ~s", + [driver_path(), erl_ddll:format_error(Reason)]) end. -digit_to_xchar(D) when (D >= 0) and (D < 10) -> - D + 48; -digit_to_xchar(D) -> - D + 87. +digit_to_xchar(D) when (D >= 0) and (D < 10) -> D + 48; +digit_to_xchar(D) -> D + 87. + +-spec sha(binary()) -> binary(). sha(Text) -> Bin = crypto:sha(Text), to_hexlist(Bin). +-spec to_hexlist(binary()) -> binary(). + to_hexlist(Bin) -> - lists:reverse(ints_to_rxstr(binary_to_list(Bin), [])). + iolist_to_binary(lists:reverse(ints_to_rxstr(binary_to_list(Bin), []))). -ints_to_rxstr([], Res) -> - Res; +ints_to_rxstr([], Res) -> Res; ints_to_rxstr([N | Ns], Res) -> - ints_to_rxstr(Ns, [digit_to_xchar(N rem 16), - digit_to_xchar(N div 16) | Res]). + ints_to_rxstr(Ns, + [digit_to_xchar(N rem 16), digit_to_xchar(N div 16) + | Res]). -sha1(Text) -> - crypto:sha(Text). +-spec sha1(binary()) -> binary(). +-spec sha224(binary()) -> binary(). +-spec sha256(binary()) -> binary(). +-spec sha384(binary()) -> binary(). +-spec sha512(binary()) -> binary(). -sha224(Text) -> - erlang:port_control(?DRIVER, 224, Text). +sha1(Text) -> crypto:sha(Text). -sha256(Text) -> - erlang:port_control(?DRIVER, 256, Text). +sha224(Text) -> erlang:port_control(?DRIVER, 224, Text). -sha384(Text) -> - erlang:port_control(?DRIVER, 384, Text). +sha256(Text) -> erlang:port_control(?DRIVER, 256, Text). -sha512(Text) -> - erlang:port_control(?DRIVER, 512, Text). +sha384(Text) -> erlang:port_control(?DRIVER, 384, Text). + +sha512(Text) -> erlang:port_control(?DRIVER, 512, Text). -ifdef(HAVE_MD2). -md2(Text) -> - erlang:port_control(?DRIVER, 2, Text). + +-spec md2(binary()) -> binary(). + +md2(Text) -> erlang:port_control(?DRIVER, 2, Text). + -endif. driver_path() -> Suffix = case os:type() of - {win32, _} -> ".dll"; - _ -> ".so" + {win32, _} -> ".dll"; + _ -> ".so" end, - filename:join(ejabberd:get_so_path(), atom_to_list(?DRIVER) ++ Suffix). + filename:join(ejabberd:get_so_path(), + atom_to_list(?DRIVER) ++ Suffix). |