            org.bouncycastle.crypto.engines.TwofishEngine
            org.bouncycastle.crypto.BlockCipher
            clojure.lang.IFn
-           clojure.lang.Keyword
-           buddy.Arrays))
+           clojure.lang.Keyword))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Low level hmac engine.

  Poly1305-AES offers also cipher replaceability. If anything does
  go wrong with AES, it can be substituted with identical security
  guarantee."
  (:require [buddy.core.hash :refer [sha3-256]]
            [buddy.core.mac.proto :as proto]
            [buddy.core.codecs :refer :all]
            [buddy.core.keys :refer [make-random-bytes]]
            [clojure.java.io :as io])
  (:import org.bouncycastle.crypto.generators.Poly1305KeyGenerator
           org.bouncycastle.crypto.macs.Poly1305

  *available-engines* {:aes     #(AESFastEngine.)
                       :serpent #(SerpentEngine.)
                       :twofish #(TwofishEngine.)})

(def ^{:private true
       :static true
       :doc "Length in bytes of poly1305 output."}
  poly1305-output-size 16)

(defn- resolve-engine
  "Given dynamic type engine, try resolve it to
