           ((juxt #(.getCurve ^ECParameterSpec %) #(.getG ^ECParameterSpec %) #(.getH ^ECParameterSpec %)
                  #(.getN ^ECParameterSpec %))
            params)))
+
+(defn derive-bcec-key [curve-params]
+  ;; {:curve
+  ;;  #object[org.bouncycastle.math.ec.custom.sec.SecP256R1Curve 0x5fbf2061 "org.bouncycastle.math.ec.custom.sec.SecP256R1Curve@d4e69b7f"],
+  ;;  :g
+  ;;  #object[org.bouncycastle.math.ec.custom.sec.SecP256R1Point 0x642eb9c "(6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296,4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5,1)"],
+  ;;  :h 1,
+  ;;  :n
+  ;;  115792089210356248762697446949407573529996955224135760342422259061068512044369}
+  ;;
+  :TBD
+  )
+
 ;;;
 ;;; To avoid reflection at run time, duplicate code :(
 ;;;

  ;; Derives the new private key from the source public key using the parameters passed in the opts.
  ;; This operation is needed for deriving private keys corresponding to the Transaction
  ;; Certificates.
  (%derive-key k opts))

;;; importKey

(ns clojure-fabric.crypto-suite
  (:require [clojure.data.codec.base64 :as b64])
  (:import [org.bouncycastle.crypto.generators ECKeyPairGenerator]
           [org.bouncycastle.jce ECNamedCurveTable]
           [org.bouncycastle.jce.spec ECNamedCurveParameterSpec ECParameterSpec ECNamedCurveSpec]
           [org.bouncycastle.jce.provider BouncyCastleProvider]
           [org.bouncycastle.jcajce.provider.asymmetric.ec KeyPairGeneratorSpi$ECDSA
            BCECPrivateKey BCECPublicKey]
           [java.security KeyPairGenerator KeyFactory SecureRandom Security])
  (:refer-clojure :exclude [hash]))
;;;
;;; http://www.bouncycastle.org/wiki/display/JA1/Elliptic+Curve+Key+Pair+Generation+and+Key+Factories
;;;

;; Add provider!
(Security/addProvider (BouncyCastleProvider.))
