anchor.diff:  - Use more granular `restricted` decorator/middleware for specific functions.
   
   
  -For wrap separated defined access rules, you should use `wrap-access-rules` 
  +For wrap separated defined access rules, you should use `wrap-access-rules`
   buddy middleware. Here some examples of how to setup authorization for you ring
   app:
   
  
positive.code: HTTP Basic
  ^^^^^^^^^^
  
  The HTTP Basic authentication backend is one of the simplest and most insecure authentication 
  systems, but is a good first step for understand how buddy authentication works.
  
  .Simple ring handler/view for example purpose.
  
negative.code: NIST SP 800-108 specification.
  
  
  Ciphers
  ~~~~~~~
  
  Ciphers support in buddy is available on `buddy.core.crypto` namespace.
  
  Block Ciphers
  ^^^^^^^^^^^^^
  In cryptography, a block cipher is a deterministic algorithm operating on fixed-length groups of bits,
  called blocks, with an unvarying transformation that is specified by a symmetric key.
  
  .This is a list of currently supported block ciphers in buddy
  [options="header"]
  |========================================
  |Algorithm name     | Keywords
  | Twofish           | `:twofish`
  |========================================
  
  Additionally, for good security, is mandatory to combine a block cipher with some cipher
  mode of operation.
  
  .This is a list of currently supported of cipher mode of operation
  [options="header"]
  |========================================
  |Algorithm name     | Keywords
  | SIC (CTR)         | `:ctr`, `:sic`
  | CBC               | `:cbc`
  | OFB               | `:ofb`
  |========================================
  
  Encrypt data using buddy's crypto primitives is almost easy. In case of block ciphers, you
  should know that block cipher and cipher mode you want to use.
  
  NOTE: currently buddy comes with limited number of ciphers and modes, but in near future
  should be added much more options.
  
  .Example encrypt
  [source, clojure]
  ----
  (require '[buddy.core.crypto :as c])
  (require '[buddy.core.codecs :refer :all])
  
  (let [eng   (c/engine :twofish :cbc)
        iv16  (make-random-bytes 16)
        key32 (make-random-bytes 32)
        data  (hex->bytes "000000000000000000000000000000AA")]
    (c/initialize! eng {:key key32 :iv iv16 :op :encrypt})
    (c/process-block! eng data))
  ;; => #<byte[] [B@efadff9>
  ----
  
  
  Stream Ciphers
  ^^^^^^^^^^^^^^
  
  Stream ciphers differes with block ciphers, that them works with arbitrary length input
  and not requires any additional mode of operation.
  
  .This is a list of currently supported of stream ciphers in buddy
  [options="header"]
  |========================================
  |Algorithm name     | Keywords
  | ChaCha           | `:chacha`
  |========================================
  
  
  
  
  .Example encrypt
  [source, clojure]
  ----
  (require '[buddy.core.crypto :as c])
  (require '[buddy.core.codecs :refer :all])
  
  (let [eng   (c/stream-engine :chacha)
        iv8   (make-random-bytes 8)
        key32 (make-random-bytes 32)
        data  (hex->bytes "0011")]
    (c/initialize! eng {:key key32 :iv iv8 :op :encrypt})
    (c/process-bytes! eng data))
  ;; => #<byte[] [B@efadff9>
  ----
  
  NOTE: the iv and key size depends estrictly on cipher engine, in this case, chacha
  engine requires 8 bytes iv.
  
  NOTE: for decrypt, only change `:op` value to `:decrypt`
  
  You can call `c/initialize` any times as you want, it simple reinitialize the engine.
  
  
  
  Codecs (binary -> string conversion)
  