anchor.diff:  
   .Supported key derivation functions.
   [options="header"]
  -|==========================================
  -|Algorithm name | Constructor
  -|HKDF           | `buddy.core.kdf/hkdf`
  -|KDF1           | `buddy.core.kdf/kdf1`
  -|KDF2           | `buddy.core.kdf/kdf2`
  -|CMKDF          | `buddy.core.kdf/cmkdf`
  -|FMKDF          | `buddy.core.kdf/fmkdf`
  -|DPIMKDF        | `buddy.core.kdf/dpimkdf`
  -|==========================================
  +|==============================================================================
  +|Algorithm name | Constructor              | Notes
  +|HKDF           | `buddy.core.kdf/hkdf`    | HMAC based KDF
  +|KDF1           | `buddy.core.kdf/kdf1`    |
  +|KDF2           | `buddy.core.kdf/kdf2`    |
  +|CMKDF          | `buddy.core.kdf/cmkdf`   | Counter Mode KDF
  +|FMKDF          | `buddy.core.kdf/fmkdf`   | Feedback Mode KDF
  +|DPIMKDF        | `buddy.core.kdf/dpimkdf` | Double-Pipeline Iteration Mode KDF
  +|==============================================================================
   
   NOTE: All key derivation functions work with byte arrays. For following examples, `buddy.core.codecs`
   functions for convert strings to byte arrays.
  
positive.code: NIST SP 800-108 specification.
  
  
  Ciphers
  ~~~~~~~
  
  TODO
  
  
  Codecs (binary -> string conversion)
  
negative.code:     (response "Permission denied")
      (redirect "/login")))
  ----
  
  .Defining a simple handler that raises unauthorized exception when user is not authenticated
  [source,clojure]
  