anchor.diff:  Digital Signature instead of hmac then you must have a key pair (public and private).
   ====
   
  +
   === Signing and unsigning data
   
   With difference with jwt/jws, this implementation is not limited to hash-map like objects,
  
positive.code: 
  ;; Sign data using default `:hs256` algorithm that does not
  ;; requres special priv/pub key.
  (def data (cm/encode {:userid 1} "secret"))
  
  ;; data will contains omething to
  ;; #<Right [auJ0eXAiOiJKV1MiLCJhbGciOiJIU...]>
  
  (cm/decode @data "secret")
  ;; => {:userid 1}
  ----
  
  The *encode* and *decode* methods returns a monadic either defined in
  link:https://github/funcool/cats[cats library]. This allows more granural
  error reporting when something wrong is happens in the validation process.
  
  Also, the *sign* and *unsign* functions are available, and they are analogous
  to *encode*/*decode* but are still returning plain values instead a containers.
  
  
  Then, you also will be able validate the signed message based in its age:
  
  [source,clojure]
  ----
  (cm/decode @data "secret" {:max-age (* 15 60)})
  ;; => #<Left [Expired data]>
  ----
  
  
  
negative.code: ;; => {:userid 1}
  ----
  
  You do not need specify the algorithm explicitly, it is automatically detected.
  
  
  === Claims validation
  
  _buddy-sign_ json web signature implementation also includes validation of a concrete subset
  of claims related to the age of the signed data: *exp* (expiration time), *nbf* (not before).
  
  The validation is performed on decoding the token. If `:exp` claim is found and is posterior to
  the current date time (UTC) an validation exception will be raised or a failure instance will
  be returned, depending on that api you are using direct or monadic.
  
  