 ;; Add provider!
 (Security/addProvider (BouncyCastleProvider.))
 
+;;;
+;;; Interface
+;;;
+(defrecord CryptoSuite [security-provider key-algorithm curve-name hash-algorithm])
+(defn make-crypto-suite
+  [& {:keys [security-provider key-algorithm curve-name hash-algorithm]
+      :or {security-provider BouncyCastleProvider/PROVIDER_NAME
+           key-algorithm :ECDSA
+           curve-name :secp256r1
+           hash-algorithm :sha3-384}}]
+  (->CryptoSuite security-provider key-algorithm curve-name hash-algorithm))
+
+
 ;; (defonce key-store (atom nil))
 
 ;; TBD

        “ephemeral”.
  Returns
        Result (Key): The key object"
  [{:keys [algorithm curve ephemeral]}]
  (let [generator (-> algorithm
                      name
                      (KeyPairGenerator/getInstance BouncyCastleProvider/PROVIDER_NAME))
        param-specs (-> curve name ECNamedCurveTable/getParameterSpec)]
    (.initialize generator param-specs (SecureRandom.))
    (.generateKeyPair generator)))

        key-size (count k-byte-array)]
    (if (= curve-size key-size)
      (let [middle (int (/ key-size 2))
            kf (KeyFactory/getInstance (name algorithm) security-provider)
            spec (ECPublicKeySpec. (ECPoint. (java.math.BigInteger. 1 (Arrays/copyOfRange k-byte-array (int 0) middle))
                                             (java.math.BigInteger. 1 (Arrays/copyOfRange k-byte-array middle key-size)))
                                   (ECNamedCurveSpec. curve-name curve (.getG parameter-spec) (.getN parameter-spec)
