   ;; 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.
+  ;;
+  ;; Implementation Note:
+  ;;    Only Go SDK implements this function(and hard to understand Go code!).
+  ;;    Wait until ithere are test cases to check correctness
+  ;;
+  ;; (def kp (generate-key :ECDSA :secp256r1))
+  ;; (def pri (.getPrivate kp))
+  ;; (def pub (.getPublic kp))
+  ;; (derive-key pri {})
+  ;; 
   (%derive-key k opts))
 
 ;;; importKey

        opts (Object)
  Returns
        (Key) An instance of the Key class wrapping the raw key bytes"
  []
  )

;;;getKey
(defn get-key

  (algorithm [this] (-> this .getAlgorithm keyword))
  (curve-spec [this] (keyword (.getName ^ECNamedCurveSpec (.getParams this))))
  (curve-params [this] (-> this .getParameters %curve-params))
  (%derive-key [this opts]
    (derive-bcec-key (curve-params this))))

(extend-type BCECPublicKey
  IBCECKey
  (algorithm [this] (-> this .getAlgorithm keyword))
  (curve-spec [this] (keyword (.getName ^ECNamedCurveSpec (.getParams this))))
  (curve-params [this] (-> this .getParameters %curve-params))
  (%derive-key [this opts]
    (derive-bcec-key (curve-params this))))


;;;deriveKey
(defn derive-key
  "Derives a key from k using opts.
