     (concat
       (when (support-hmac? code-gen)
         (vector
+          `(defn ~id-hmac-raw [~sym ~k] ~call-hmac-direct)
+          `(defn ~id-hmac-raw-file [~fsym ~k] ~call-hmac-file)
+          `(defn ~id-hmac-bytes [~sym ~k] ~(hash->bytes code-gen call-hmac-direct))  
           `(defn ~id-hmac-file [~sym ~k] ~(hash->string code-gen call-hmac-file))  
+          `(defn ~id-hmac-file-bytes [~sym ~k] ~(hash->bytes code-gen call-hmac-file))  
           `(defn ~id-hmac [~sym ~k] ~(hash->string code-gen call-hmac-direct))))
       (when (support-hash? code-gen)
         (vector

   - `X-file` : input is path to file, outputs string
   - `X-file-bytes` : input is path to file, outputs byte array
   - `X*` : outputs the actual hash value generated by the given function
   - `X*-file` : input is path to file, outputs the actual hash value generated by the given function
   - `X-hmac` : outputs HMAC string
  "
  [code-gen id hash-f hmac-f]
  (let [id-bytes (symbol (str id "-bytes"))
        id-file (symbol (str id "-file"))
        id-file-bytes (symbol (str id "-file-bytes"))
        id-raw (symbol (str id "*"))
        id-raw-file (symbol (str id "*-file"))
        id-hmac (symbol (str id "-hmac"))
        id-hmac-file (symbol (str id "-hmac-file"))
        sym (gensym "v")
        k (gensym "k")
        fsym (vary-meta sym assoc :tag `String)

                  (with-open [~sym (FileInputStream. this#)]
                    ~(stream->hmac code-gen sym k)))])
         nil
         ~@(when (support-hash? code-gen) [`(~hash-f [this#] nil)])
         ~@(when (support-hmac? code-gen) [`(~hmac-f [this# k#] nil)])))))

(defn- generate-compute-fns
  "Generate functions that call a prviously created hash function and wrap the result
