   "Generic function that exposes a high level
 interface for salted variant of keyed-hash message
 authentication code verification algorithm."
-  [data ^bytes signature ^String key ^String salt ^String algorithm]
+  [data ^bytes signature key ^String salt ^String algorithm]
   (verify-salted-hmac data signature key salt algorithm))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defn hmac
  [data ^String key ^String algorithm]
  (make-hmac data key algorithm))

(defn hmac-verify
  [data ^bytes signature ^String key ^String algorithm]
  (verify-hmac data signature key algorithm))

(defn shmac


(extend-protocol HMac
  (Class/forName "[B")
  (make-hmac [^bytes data key ^String algorithm]
    (make-hmac-for-plain-data data key algorithm))
  (verify-hmac [^bytes data ^bytes signature ^String key ^String algorithm]
    (verify-hmac-for-plain-data data signature key algorithm))

  java.lang.String
  (make-hmac [^String data key ^String algorithm]
    (make-hmac-for-plain-data (->byte-array data) key algorithm))
  (verify-hmac [^String data ^bytes signature ^String key ^String algorithm]
    (verify-hmac-for-plain-data (->byte-array data) signature key algorithm))

  java.io.InputStream
  (make-hmac [^java.io.InputStream data key ^String algorithm]
    (make-hmac-for-stream data key algorithm))
  (verify-hmac [^java.io.InputStream data ^bytes signature ^String key ^String algorithm]
    (verify-hmac-for-stream data signature key algorithm))

  java.io.File
  (make-hmac [^java.io.File data key ^String algorithm]
    (make-hmac-for-stream (io/input-stream data) key algorithm))
  (verify-hmac [^java.io.File data ^bytes signature ^String key ^String algorithm]
    (verify-hmac-for-stream (io/input-stream data) signature key algorithm))

  java.net.URL
  (make-hmac [^java.net.URL data key ^String algorithm]
    (make-hmac-for-stream (io/input-stream data) key algorithm))
  (verify-hmac [^java.net.URL data ^bytes signature ^String key ^String algorithm]
    (verify-hmac-for-stream (io/input-stream data) signature key algorithm))

  java.net.URI
  (make-hmac [^java.net.URI data key ^String algorithm]
    (make-hmac-for-stream (io/input-stream data) key algorithm))
  (verify-hmac [^java.net.URI data ^bytes signature ^String key ^String algorithm]
    (verify-hmac-for-stream (io/input-stream data) signature key algorithm)))
