   Returns
         (Key) An instance of the Key class corresponding to the ski"
   [ski]
-  
+  ;; Implementation Note:
+  ;;    This is a data store operation. Not supported yet
+  :TBD
   )
 
 ;;;hash

  Returns
        (Key) An instance of the Key class wrapping the raw key bytes"
  [#^bytes k-byte-array {:keys [algorithm curve ephemeral type]}]
  (let [curve-name (name curve)
        parameter-spec (ECNamedCurveTable/getParameterSpec curve-name)
        curve (.getCurve parameter-spec)
        curve-size (/ (* 2 (.getFieldSize curve)) 8) ;; x + y
        key-size (count k-byte-array)
        middle (int (/ key-size 2))]
    (if (= curve-size key-size)
      (let [kf (KeyFactory/getInstance (name algorithm) BouncyCastleProvider/PROVIDER_NAME)
            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)

           [org.bouncycastle.jce.provider BouncyCastleProvider]
           [org.bouncycastle.jcajce.provider.asymmetric.ec KeyPairGeneratorSpi$ECDSA
            BCECPrivateKey BCECPublicKey]
           [org.bouncycastle.util.encoders Hex]
           [java.util Arrays]
           [javax.crypto.spec SecretKeySpec]
           [javax.crypto SecretKeyFactory]
           [java.security KeyFactory KeyPairGenerator SecureRandom Security MessageDigest]
           [java.security.spec ECPoint ECParameterSpec ECPublicKeySpec ECPrivateKeySpec])
  (:refer-clojure :exclude [hash]))

