diff --git a/src/main/scala/fluence/crypto/KeyStore.scala b/src/main/scala/fluence/crypto/KeyStore.scala index 966ff7a..6cbfeef 100644 --- a/src/main/scala/fluence/crypto/KeyStore.scala +++ b/src/main/scala/fluence/crypto/KeyStore.scala @@ -20,6 +20,7 @@ package fluence.crypto import fluence.crypto.keypair.KeyPair import io.circe.{ Decoder, Encoder, HCursor, Json } import scodec.bits.{ Bases, ByteVector } +import io.circe.parser.decode import scala.language.higherKinds @@ -54,4 +55,17 @@ object KeyStore { } yield KeyStore(KeyPair.fromByteVectors(public, secret)) } } + + def fromBase64(base64: String): KeyStore = { + val jsonStr = ByteVector.fromBase64(base64, alphabet) match { + case Some(bv) ⇒ new String(bv.toArray) + case None ⇒ + throw new IllegalArgumentException("'" + base64 + "' is not a valid base64.") + } + decode[Option[KeyStore]](jsonStr) match { + case Right(Some(ks)) ⇒ ks + case Right(None) ⇒ throw new IllegalArgumentException("'" + base64 + "' is not a valid key store.") + case Left(err) ⇒ throw new IllegalArgumentException("'" + base64 + "' is not a valid key store.", err) + } + } }