anchor.diff:  %% API
   -export([start_link/0
           ,check_key_for_repo_path/3
  -        ,add_key/3, remove_key/1
  -        ,add_repo/2, remove_repo/1
  -        ,get_repos/0, get_keys/0
  +        ,get_repos/0
           ,check_hmac/3
           ,reload_repo_config/0]).
   
  
positive.code:     gen_server:call(?MODULE, {auth_req, check_key_for_repo_path, {KeyId, Repo, Path}}).
  
  
  -spec add_key(KeyId :: binary(), Secret :: binary(), Path :: binary())-> ok.
  add_key(KeyId, Secret, Path) ->
      gen_server:call(?MODULE, {auth_req, add_key, {KeyId, Secret, Path}}).
  
  
  -spec remove_key(KeyId :: binary()) -> ok.
  remove_key(KeyId) ->
      gen_server:call(?MODULE, {auth_req, remove_key, KeyId}).
  
  
  -spec add_repo(Repo :: binary(), KeyIds :: [binary()]) -> ok.
  add_repo(Repo, KeyIds) ->
      gen_server:call(?MODULE, {auth_req, add_repo, {Repo, KeyIds}}).
  
  
  -spec remove_repo(Repo :: binary()) -> ok.
  remove_repo(Repo) ->
      gen_server:call(?MODULE, {auth_req, remove_repo, Repo}).
  
  
  -spec get_repos() -> Repos :: [{binary(), [binary()]}].
  get_repos() ->
      gen_server:call(?MODULE, {auth_req, get_repos}).
  
  
  -spec get_keys() -> Keys :: [{binary(), binary()}].
  get_keys() ->
      gen_server:call(?MODULE, {auth_req, get_keys}).
  
  
  -spec check_hmac(Message, KeyId, HMAC) -> boolean()
  
negative.code: handle_call({auth_req, check_key_for_repo_path, {KeyId, Repo, Path}}, _From, State) ->
      Reply = p_check_key_for_repo_path(KeyId, Repo, Path),
      {reply, Reply, State};
  handle_call({auth_req, get_repos}, _From, State) ->
      Reply = p_get_repos(),
      {reply, Reply, State};
  handle_call({auth_req, check_hmac, {Message, KeyId, HMAC}}, _From, State) ->
      Reply = p_check_hmac(Message, KeyId, HMAC),
  