diff --git a/build.sbt b/build.sbt index 61e040f..c727636 100644 --- a/build.sbt +++ b/build.sbt @@ -1,6 +1,6 @@ name := "encry-common" -version := "0.1.5" +version := "0.2.1" scalaVersion := "2.12.6" @@ -16,13 +16,11 @@ val circeVersion = "0.9.3" val apiDependencies = Seq( "io.circe" %% "circe-core" % circeVersion, "io.circe" %% "circe-generic" % circeVersion, - "io.circe" %% "circe-parser" % circeVersion, + "io.circe" %% "circe-parser" % circeVersion ) libraryDependencies ++= Seq( - "com.google.guava" % "guava" % "21.+", - "org.scorexfoundation" %% "scrypto" % "2.1.+", - "org.encry" %% "prism" % "0.2.7", + "org.encry" %% "prism" % "0.3.0", "org.scalatest" %% "scalatest" % "3.0.3" % "test" ) ++ apiDependencies diff --git a/src/main/scala/org/encryfoundation/common/Algos.scala b/src/main/scala/org/encryfoundation/common/Algos.scala index 11ead11..818989f 100644 --- a/src/main/scala/org/encryfoundation/common/Algos.scala +++ b/src/main/scala/org/encryfoundation/common/Algos.scala @@ -1,9 +1,9 @@ package org.encryfoundation.common import java.nio.charset.Charset +import org.encryfoundation.utils.encoding.Base16 import scorex.crypto.authds.LeafData import scorex.crypto.authds.merkle.MerkleTree -import scorex.util.encode.Base16 import scorex.crypto.hash.{Blake2b256, Digest32} import scala.util.Try @@ -11,9 +11,9 @@ object Algos { type HF = Blake2b256.type - def encode(bytes: Array[Byte]): String = encoder.encode(bytes) + def encode(bytes: Array[Byte]): String = Base16.encode(bytes) - def decode(str: String): Try[Array[Byte]] = encoder.decode(str) + def decode(str: String): Try[Array[Byte]] = Base16.decode(str) val hash: HF = Blake2b256 diff --git a/src/main/scala/org/encryfoundation/common/crypto/PrivateKey25519.scala b/src/main/scala/org/encryfoundation/common/crypto/PrivateKey25519.scala index 2a2b8b0..7de66da 100644 --- a/src/main/scala/org/encryfoundation/common/crypto/PrivateKey25519.scala +++ b/src/main/scala/org/encryfoundation/common/crypto/PrivateKey25519.scala @@ -3,7 +3,6 @@ package org.encryfoundation.common.crypto import com.google.common.primitives.Bytes import org.encryfoundation.common.serialization.{BytesSerializable, Serializer} import scorex.crypto.signatures.{Curve25519, PrivateKey, PublicKey} - import scala.util.Try trait SecretWrapper extends BytesSerializable diff --git a/src/main/scala/org/encryfoundation/common/crypto/encoding/Base58Check.scala b/src/main/scala/org/encryfoundation/common/crypto/encoding/Base58Check.scala deleted file mode 100644 index a391476..0000000 --- a/src/main/scala/org/encryfoundation/common/crypto/encoding/Base58Check.scala +++ /dev/null @@ -1,24 +0,0 @@ -package org.encryfoundation.common.crypto.encoding - -import scorex.util.encode.Base58 -import scorex.crypto.hash.Blake2b256 - -import scala.util.{Failure, Success, Try} - -object Base58Check { - - val Version: Byte = 1 - val ChecksumLength: Int = 4 - - private def getChecksum(bytes: Array[Byte]): Array[Byte] = Blake2b256.hash(bytes).take(ChecksumLength) - - def encode(input: Array[Byte]): String = Base58.encode((Version +: input) ++ getChecksum(input)) - - def decode(input: String): Try[Array[Byte]] = Base58.decode(input).flatMap { bytes => - val checksum: Array[Byte] = bytes.takeRight(ChecksumLength) - val checksumActual: Array[Byte] = getChecksum(bytes.dropRight(ChecksumLength).tail) - - if (checksum.sameElements(checksumActual)) Success(bytes.dropRight(ChecksumLength).tail) - else Failure(new Exception("Wrong checksum")) - } -} diff --git a/src/main/scala/org/encryfoundation/common/transaction/EncryAddress.scala b/src/main/scala/org/encryfoundation/common/transaction/EncryAddress.scala index 48ad28a..8c2e891 100644 --- a/src/main/scala/org/encryfoundation/common/transaction/EncryAddress.scala +++ b/src/main/scala/org/encryfoundation/common/transaction/EncryAddress.scala @@ -1,10 +1,9 @@ package org.encryfoundation.common.transaction -import org.encryfoundation.common.crypto.encoding.Base58Check import org.encryfoundation.common.transaction.EncryAddress.Address import org.encryfoundation.prismlang.compiler.CompiledContract.ContractHash +import org.encryfoundation.utils.encoding.Base58Check import scorex.crypto.signatures.PublicKey - import scala.util.Try sealed trait EncryAddress { diff --git a/src/main/scala/org/encryfoundation/common/utils/Mnemonic.scala b/src/main/scala/org/encryfoundation/common/utils/Mnemonic.scala new file mode 100644 index 0000000..61b5d7a --- /dev/null +++ b/src/main/scala/org/encryfoundation/common/utils/Mnemonic.scala @@ -0,0 +1,24 @@ +package org.encryfoundation.common.utils + +import org.encryfoundation.common.Algos +import scodec.bits.BitVector +import scala.io.Source + +object Mnemonic { + + private def getWords(language: String = "english"): Array[String] = Source + .fromFile("src/main/resources/languages/" + language + "/words.txt").getLines.toArray + + def seedFromMnemonic(mnemonicCode: String, passPhrase: String = ""): Array[Byte] = + Algos.hash(mnemonicCode + "mnemonic=" + passPhrase) + + def entropyToMnemonicCode(entropy: Array[Byte]): String = { + val words: Array[String] = getWords() + val checkSum: BitVector = BitVector(Algos.hash(entropy)) + val entropyWithCheckSum: BitVector = BitVector(entropy) ++ checkSum.take(4) + + entropyWithCheckSum.grouped(11).map { i => + words(i.toInt(signed = false)) + }.mkString(" ") + } +} \ No newline at end of file diff --git a/src/test/scala/org/encryfoundation/common/crypto/encoding/Base58CheckSpec.scala b/src/test/scala/org/encryfoundation/common/crypto/encoding/Base58CheckSpec.scala deleted file mode 100644 index a2d166a..0000000 --- a/src/test/scala/org/encryfoundation/common/crypto/encoding/Base58CheckSpec.scala +++ /dev/null @@ -1,20 +0,0 @@ -package org.encryfoundation.common.crypto.encoding - -import org.scalatest.{Matchers, PropSpec} -import scorex.utils.Random - -class Base58CheckSpec extends PropSpec with Matchers { - - private val iData = Random.randomBytes() - - property("encode/decode") { - - val dEncoded = Base58Check.encode(iData) - - val dDecoded = Base58Check.decode(dEncoded) - - dDecoded.isSuccess shouldBe true - - iData sameElements dDecoded.get shouldBe true - } -} diff --git a/src/test/scala/org/encryfoundation/common/transaction/EncryAddressSpec.scala b/src/test/scala/org/encryfoundation/common/transaction/EncryAddressSpec.scala index a86d178..910f9f2 100644 --- a/src/test/scala/org/encryfoundation/common/transaction/EncryAddressSpec.scala +++ b/src/test/scala/org/encryfoundation/common/transaction/EncryAddressSpec.scala @@ -1,7 +1,7 @@ package org.encryfoundation.common.transaction -import org.encryfoundation.common.crypto.encoding.Base58Check import org.encryfoundation.common.transaction.EncryAddress.Address +import org.encryfoundation.utils.encoding.Base58Check import org.scalatest.{Matchers, PropSpec} import scorex.util.encode.Base58 import scorex.crypto.signatures.{Curve25519, PublicKey}