            [org.bouncycastle.jce.provider BouncyCastleProvider]
            [org.bouncycastle.jcajce.provider.asymmetric.ec KeyPairGeneratorSpi$ECDSA
             BCECPrivateKey BCECPublicKey]
+           [java.util Arrays]
            [javax.crypto.spec SecretKeySpec]
            [javax.crypto SecretKeyFactory]
            [java.security KeyFactory KeyPairGenerator SecureRandom Security]

        opts (Object)
  Returns
        (Key) An instance of the Key class wrapping the raw key bytes"
  [k-byte-array {:keys [algorithm curve ephemeral]}]
  (let [offset 1 ;; Assume input is 1 + 64 bytes
        curve-name (name curve)
        kf (KeyFactory/getInstance (name algorithm) BouncyCastleProvider/PROVIDER_NAME)
        point (ECPoint. (java.math.BigInteger. 1 #^bytes (java.util.Arrays/copyOfRange #^bytes k-byte-array offset (+ offset 32)))
                        (java.math.BigInteger. 1 #^bytes (java.util.Arrays/copyOfRange #^bytes k-byte-array (+ offset 32) (count k-byte-array))))
        parameter-spec (ECNamedCurveTable/getParameterSpec curve-name)
        spec (ECNamedCurveSpec. curve-name (.getCurve parameter-spec) (.getG parameter-spec) (.getN parameter-spec)
                                (.getH parameter-spec) (.getSeed parameter-spec))]
    (.generatePublic kf (ECPublicKeySpec. point spec))))


;;;getKey

  [ski]
  
  )

;;;hash
(defn hash
