anchor.diff:  ----
   ;; Import required namespaces
   (require '[buddy.core.mac.hmac :as hmac])
  +(require '[buddy.core.mac.shmac :as shmac])
   (require '[buddy.core.codecs :refer :all])
   
   ;; Generate sha256 hmac over string
  -(-> (hmac/hmac-sha256 "foo bar" "mysecretkey")
  +(-> (hmac/hmac "foo bar" "mysecretkey" :sha256)
       (bytes->hex))
   ;; -> "61849448bdbb67b39d609471eead667e65b0d1b9e01b1c3bf7aa56b83e9c8083"
   
   ;; Same example but using salted variant
  -(-> (hmac/salted-hmac-sha256 "foo bar" "salt" "mysecretkey")
  +(-> (shmac/shmac "foo bar" "salt" "mysecretkey" :sha256)
       (bytes->hex))
   ;; -> "bd5f7a0040430a73f4845bac8f980c6398b4baae8a22efcc22038be0f4dd9678"
   ----
  
positive.code: 
  ;; Generate hmac for file
  (-> (io/input-stream "/tmp/somefile")
      (hmac/hmac-sha256 "mysecretkey")
      (bytes->hex))
  ;; -> "4cb793e600848da2053238003fce4c010233c49df3e6a04119b4287eb464c27e"
  ----
  
  You can extend it for your own types using `buddy.core.hmac/HMac` protocol:
  
  [source,clojure]
  ----
  (defprotocol HMac
    (make-hmac [data key algorithm]))
  ----
  
  [NOTE]
  Functions like *hmac-sha256* just alias the more generic functions
  *hmac* and *shmac*.
  
  
  Poly1305
  
negative.code: | Tiger                | 192
  |===============================================
  
  
  Basic usage
  ^^^^^^^^^^^
  
  