   *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

  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

           org.bouncycastle.crypto.engines.TwofishEngine
           org.bouncycastle.crypto.BlockCipher
           clojure.lang.IFn
           clojure.lang.Keyword))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Low level hmac engine.
