anchor.diff:  All contributions to _buddy-hashers_ should keep these important rules in mind.
   
   
  +=== Contributing
  +
  +Unlike Clojure and other Clojure contributed libraries _buddy-hashers_ does not
  +have many restrictions for contributions. Just open an issue or pull request.
  +
  +
   === Get the Code
   
  -_buddy-hashers_ is open source and can be found on link:https://github.com/funcool/buddy-hashers[github].
  +_buddy-hashers_ is open source and can be found on
  +link:https://github.com/funcool/buddy-hashers[github].
   
   You can clone the public repository with this command:
   
  
positive.code: ;; => true
  ----
  
  NOTE: hasher functions, unlike cryptographic hash functions, expect strings instead
  of bytes.
  
  == Advanced options
  
  Each algorithm can be tweaked passing additional parameters on the second argument
  to *encrypt* function. And options vary depending on the used algorithm.
  
negative.code: | `:md5` | `:salt` | salt=random
  |==========================================================
  
  === Limiting algorithms
  
  Some times you don't want to use all the supported algorithms and you only want
  to use a own set of algorithms in the password check process. That can be done
  passing additional parameter to the `check` function:
  
  [source, clojure]
  ----
  (def trusted-algs #{:pbkdf2+sha256 :bcrypt+sha512})
  
  (hashers/check incoming-pwd encrypted-pwd {:limit trusted-algs})
  ----
  
  The `check` function will return false if the incoming password uses an algorithm
  that does not allowed.
  
  
  === Rehash Hook
  
  When time passes, the password hashers config is constantly updated for to be
  aligned with the latest security standards but you have a big database with users
  that are using password with now weak password configuration.
  
  *buddy-hashers* comes with a solution for it. It consists in a hook for password
  check process that if the password is correctly verified and is detected that has
  weak configuration, will be called with the plain password. That process allows
  to be reactive and update the users password (when the user does login as example)
  along hashers configuration is changed.
  
  [source, clojure]
  ----
  (letfn [(setter [pwd]
            (let [pwd (hashers/encrypt pwd)]
              (do-the-db-update pwd)))]
    (hashers/check incoming-pwd encrypted-pwd {:setter setter}))
  ----
  
  The setter will be called when the incoming password is valid but its config
  is weaker that the current default one.
  
  
  == Developers Guide
  
  === Philosophy
  
  