From 910b2d9059a3aadc60181d455f2baa55f341054c Mon Sep 17 00:00:00 2001 From: supaiku <1311798+supaiku0@users.noreply.github.com> Date: Tue, 11 Jun 2019 14:17:00 +0200 Subject: [PATCH 01/23] release: 0.1.4 (#47) --- CHANGELOG.md | 5 +++++ build.gradle | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a3de660..284dcbff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +## 0.1.4 - 2019-11-06 + +### Fixed +- Support 255 bytes vendor fields + ## 0.1.3 - 2019-25-04 ### Fixed diff --git a/build.gradle b/build.gradle index 9dc4649f..384d214d 100644 --- a/build.gradle +++ b/build.gradle @@ -46,7 +46,7 @@ uploadArchives { pom.project { groupId = 'org.arkecosystem' - version = '0.1.3' + version = '0.1.4' artifactId = 'crypto' name = 'java-crypto' @@ -79,7 +79,7 @@ uploadArchives { scm { connection = 'scm:git:git://github.com/ArkEcosystem/java-crypto.git' developerConnection = 'scm:git:ssh://github.com:ArkEcosystem/java-crypto.git' - url = 'https://github.com/ArkEcosystem/java-crypto/tree/0.1.2' + url = 'https://github.com/ArkEcosystem/java-crypto/tree/0.1.4' } } } From 1f449daf8a4f43cd0e97b8b2bc6054843cdd26a9 Mon Sep 17 00:00:00 2001 From: supaiku <1311798+supaiku0@users.noreply.github.com> Date: Tue, 9 Jul 2019 04:09:29 +0200 Subject: [PATCH 02/23] chore: bump dependencies (#49) --- build.gradle | 9 +++++---- .../org/arkecosystem/crypto/identities/Address.java | 2 +- .../crypto/transactions/Transaction.java | 13 +++++++++++-- .../java/org/arkecosystem/crypto/utils/Message.java | 7 ++++++- 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index 384d214d..c4fcfeca 100644 --- a/build.gradle +++ b/build.gradle @@ -94,12 +94,13 @@ if (project.hasProperty("signing.keyId")) { } dependencies { - compile group: 'org.bitcoinj', name: 'bitcoinj-core', version: '0.14.7' - compile group: 'com.madgag.spongycastle', name: 'core', version: '1.54.0.0' + compile group: 'org.bitcoinj', name: 'bitcoinj-core', version: '0.15.2' + compile group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.62' compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0' + compile 'com.google.guava:guava:28.0-jre' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.1' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.3.1' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.0' } test { diff --git a/src/main/java/org/arkecosystem/crypto/identities/Address.java b/src/main/java/org/arkecosystem/crypto/identities/Address.java index 1af9b998..adb2d3b6 100644 --- a/src/main/java/org/arkecosystem/crypto/identities/Address.java +++ b/src/main/java/org/arkecosystem/crypto/identities/Address.java @@ -5,7 +5,7 @@ import org.arkecosystem.crypto.encoding.Base58; import org.arkecosystem.crypto.encoding.Hex; import org.bitcoinj.core.ECKey; -import org.spongycastle.crypto.digests.RIPEMD160Digest; +import org.bouncycastle.crypto.digests.RIPEMD160Digest; public class Address { public static String fromPassphrase(String passphrase, Integer networkVersion) { diff --git a/src/main/java/org/arkecosystem/crypto/transactions/Transaction.java b/src/main/java/org/arkecosystem/crypto/transactions/Transaction.java index d4d5b758..ca80655c 100644 --- a/src/main/java/org/arkecosystem/crypto/transactions/Transaction.java +++ b/src/main/java/org/arkecosystem/crypto/transactions/Transaction.java @@ -7,6 +7,7 @@ import org.arkecosystem.crypto.identities.PrivateKey; import org.bitcoinj.core.ECKey; import org.bitcoinj.core.Sha256Hash; +import org.bitcoinj.core.SignatureDecodeException; import java.lang.reflect.Type; import java.nio.ByteBuffer; @@ -66,7 +67,11 @@ public boolean verify() { byte[] signature = Hex.decode(this.signature); byte[] bytes = toBytes(); - return ECKey.verify(Sha256Hash.hash(bytes), signature, keys.getPubKey()); + try { + return ECKey.verify(Sha256Hash.hash(bytes), signature, keys.getPubKey()); + } catch (SignatureDecodeException e) { + return false; + } } public boolean secondVerify(String secondPublicKey) { @@ -75,7 +80,11 @@ public boolean secondVerify(String secondPublicKey) { byte[] signature = Hex.decode(this.signSignature); byte[] bytes = toBytes(false); - return ECKey.verify(Sha256Hash.hash(bytes), signature, keys.getPubKey()); + try { + return ECKey.verify(Sha256Hash.hash(bytes), signature, keys.getPubKey()); + } catch (SignatureDecodeException e) { + return false; + } } public Transaction parseSignatures(String serialized, int startOffset) { diff --git a/src/main/java/org/arkecosystem/crypto/utils/Message.java b/src/main/java/org/arkecosystem/crypto/utils/Message.java index 744c86a7..bd638b4a 100644 --- a/src/main/java/org/arkecosystem/crypto/utils/Message.java +++ b/src/main/java/org/arkecosystem/crypto/utils/Message.java @@ -5,6 +5,7 @@ import org.arkecosystem.crypto.identities.PrivateKey; import org.bitcoinj.core.ECKey; import org.bitcoinj.core.Sha256Hash; +import org.bitcoinj.core.SignatureDecodeException; import java.util.HashMap; import java.util.Map; @@ -34,7 +35,11 @@ public boolean verify() { byte[] signature = Hex.decode(this.signature); byte[] messageBytes = Sha256Hash.hash(this.message.getBytes()); - return ECKey.verify(messageBytes, signature, keys.getPubKey()); + try { + return ECKey.verify(messageBytes, signature, keys.getPubKey()); + } catch (SignatureDecodeException e) { + return false; + } } public Map toMap() { From c6ae3c9888a60e1af395a88f5e6cb519b945cc8a Mon Sep 17 00:00:00 2001 From: supaiku <1311798+supaiku0@users.noreply.github.com> Date: Wed, 10 Jul 2019 04:27:16 +0200 Subject: [PATCH 03/23] release: 0.1.5 (#50) --- CHANGELOG.md | 5 +++++ build.gradle | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 284dcbff..5fac7553 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +## 0.1.5 - 2019-10-07 + +### Changed +- Updated dependencies + ## 0.1.4 - 2019-11-06 ### Fixed diff --git a/build.gradle b/build.gradle index c4fcfeca..9e17e03a 100644 --- a/build.gradle +++ b/build.gradle @@ -46,7 +46,7 @@ uploadArchives { pom.project { groupId = 'org.arkecosystem' - version = '0.1.4' + version = '0.1.5' artifactId = 'crypto' name = 'java-crypto' @@ -79,7 +79,7 @@ uploadArchives { scm { connection = 'scm:git:git://github.com/ArkEcosystem/java-crypto.git' developerConnection = 'scm:git:ssh://github.com:ArkEcosystem/java-crypto.git' - url = 'https://github.com/ArkEcosystem/java-crypto/tree/0.1.4' + url = 'https://github.com/ArkEcosystem/java-crypto/tree/0.1.5' } } } From 516912c42f5da79d1a10a8406fcb6c787869b93b Mon Sep 17 00:00:00 2001 From: supaiku <1311798+supaiku0@users.noreply.github.com> Date: Mon, 15 Jul 2019 20:52:05 +0200 Subject: [PATCH 04/23] chore: downgrade bitcoinj-core to 0.14.7 (#51) --- build.gradle | 2 +- .../crypto/transactions/Transaction.java | 13 ++----------- .../java/org/arkecosystem/crypto/utils/Message.java | 7 +------ 3 files changed, 4 insertions(+), 18 deletions(-) diff --git a/build.gradle b/build.gradle index 9e17e03a..63e70708 100644 --- a/build.gradle +++ b/build.gradle @@ -94,7 +94,7 @@ if (project.hasProperty("signing.keyId")) { } dependencies { - compile group: 'org.bitcoinj', name: 'bitcoinj-core', version: '0.15.2' + compile group: 'org.bitcoinj', name: 'bitcoinj-core', version: '0.14.7' compile group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.62' compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0' compile 'com.google.guava:guava:28.0-jre' diff --git a/src/main/java/org/arkecosystem/crypto/transactions/Transaction.java b/src/main/java/org/arkecosystem/crypto/transactions/Transaction.java index ca80655c..d4d5b758 100644 --- a/src/main/java/org/arkecosystem/crypto/transactions/Transaction.java +++ b/src/main/java/org/arkecosystem/crypto/transactions/Transaction.java @@ -7,7 +7,6 @@ import org.arkecosystem.crypto.identities.PrivateKey; import org.bitcoinj.core.ECKey; import org.bitcoinj.core.Sha256Hash; -import org.bitcoinj.core.SignatureDecodeException; import java.lang.reflect.Type; import java.nio.ByteBuffer; @@ -67,11 +66,7 @@ public boolean verify() { byte[] signature = Hex.decode(this.signature); byte[] bytes = toBytes(); - try { - return ECKey.verify(Sha256Hash.hash(bytes), signature, keys.getPubKey()); - } catch (SignatureDecodeException e) { - return false; - } + return ECKey.verify(Sha256Hash.hash(bytes), signature, keys.getPubKey()); } public boolean secondVerify(String secondPublicKey) { @@ -80,11 +75,7 @@ public boolean secondVerify(String secondPublicKey) { byte[] signature = Hex.decode(this.signSignature); byte[] bytes = toBytes(false); - try { - return ECKey.verify(Sha256Hash.hash(bytes), signature, keys.getPubKey()); - } catch (SignatureDecodeException e) { - return false; - } + return ECKey.verify(Sha256Hash.hash(bytes), signature, keys.getPubKey()); } public Transaction parseSignatures(String serialized, int startOffset) { diff --git a/src/main/java/org/arkecosystem/crypto/utils/Message.java b/src/main/java/org/arkecosystem/crypto/utils/Message.java index bd638b4a..744c86a7 100644 --- a/src/main/java/org/arkecosystem/crypto/utils/Message.java +++ b/src/main/java/org/arkecosystem/crypto/utils/Message.java @@ -5,7 +5,6 @@ import org.arkecosystem.crypto.identities.PrivateKey; import org.bitcoinj.core.ECKey; import org.bitcoinj.core.Sha256Hash; -import org.bitcoinj.core.SignatureDecodeException; import java.util.HashMap; import java.util.Map; @@ -35,11 +34,7 @@ public boolean verify() { byte[] signature = Hex.decode(this.signature); byte[] messageBytes = Sha256Hash.hash(this.message.getBytes()); - try { - return ECKey.verify(messageBytes, signature, keys.getPubKey()); - } catch (SignatureDecodeException e) { - return false; - } + return ECKey.verify(messageBytes, signature, keys.getPubKey()); } public Map toMap() { From 8f1e5c3d11f3d571bf2e773f32e4c43507f43189 Mon Sep 17 00:00:00 2001 From: supaiku <1311798+supaiku0@users.noreply.github.com> Date: Mon, 15 Jul 2019 21:01:19 +0200 Subject: [PATCH 05/23] release: 0.1.6 (#52) --- CHANGELOG.md | 5 +++++ build.gradle | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fac7553..6993f28e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +## 0.1.6 - 2019-10-15 + +### Changed +- Downgrade bitcoinj-core to 0.14.7 + ## 0.1.5 - 2019-10-07 ### Changed diff --git a/build.gradle b/build.gradle index 63e70708..a04c8151 100644 --- a/build.gradle +++ b/build.gradle @@ -46,7 +46,7 @@ uploadArchives { pom.project { groupId = 'org.arkecosystem' - version = '0.1.5' + version = '0.1.6' artifactId = 'crypto' name = 'java-crypto' @@ -79,7 +79,7 @@ uploadArchives { scm { connection = 'scm:git:git://github.com/ArkEcosystem/java-crypto.git' developerConnection = 'scm:git:ssh://github.com:ArkEcosystem/java-crypto.git' - url = 'https://github.com/ArkEcosystem/java-crypto/tree/0.1.5' + url = 'https://github.com/ArkEcosystem/java-crypto/tree/0.1.6' } } } From d5945255ee12ac7f5c2a9c88cb4e07fc7ea10210 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Mon, 22 Jul 2019 07:56:32 +0300 Subject: [PATCH 06/23] chore: setup probot/stale configuration --- .github/stale.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/stale.yml diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 00000000..0d0b1c99 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1 @@ +_extends: .github From 4704463aae3f7cb479b1d4c2e8e63117d4f9d62c Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Mon, 22 Jul 2019 09:27:47 +0300 Subject: [PATCH 07/23] chore(readme): add lead maintainer information (#54) --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c42560b6..6e6ce947 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,8 @@ [![Latest Version](https://badgen.now.sh/github/release/ArkEcosystem/java-crypto)](https://github.com/ArkEcosystem/java-crypto/releases) [![License: MIT](https://badgen.now.sh/badge/license/MIT/green)](https://opensource.org/licenses/MIT) +> Lead Maintainer: [Joshua Noack](https://github.com/supaiku0) + ## Documentation You can find installation instructions and detailed instructions on how to use this package at the [dedicated documentation site](https://docs.ark.io/sdk/cryptography/java.html). @@ -21,9 +23,8 @@ If you discover a security vulnerability within this package, please send an e-m ## Credits -- [Brian Faust](https://github.com/faustbrian) -- [All Contributors](../../../../contributors) +This project exists thanks to all the people who [contribute](../../contributors). ## License -[MIT](LICENSE) © [ArkEcosystem](https://ark.io) +[MIT](LICENSE) © [ARK Ecosystem](https://ark.io) From 07534b1f3bb58da4fbf7cb8b48cc9a663d9d2b14 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Sat, 21 Sep 2019 09:11:59 +0300 Subject: [PATCH 08/23] ci: setup github action workflow for testing --- .circleci/config.yml | 29 ----------------------------- .github/workflows/test.yml | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 29 deletions(-) delete mode 100644 .circleci/config.yml create mode 100644 .github/workflows/test.yml diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 8711a4d3..00000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,29 +0,0 @@ -version: 2 -jobs: - build: - docker: - - image: circleci/openjdk:8-jdk - working_directory: ~/arkecosystem/crypto - environment: - JVM_OPTS: -Xmx3200m - TERM: dumb - steps: - - checkout - - restore_cache: - keys: - - v1-dependencies-{{ checksum "build.gradle" }} - - v1-dependencies- - - run: gradle dependencies - - save_cache: - paths: - - ~/.gradle - key: v1-dependencies-{{ checksum "build.gradle" }} - - run: - name: Tests - command: | - gradle test - gradle jacocoTestReport - - run: - name: Codecov - when: on_success - command: bash <(curl -s https://codecov.io/bash) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..6d521470 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,18 @@ +name: Test + +on: [push, pull_request] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + - name: Set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Install + run: gradle dependencies + - name: Test + run: gradle test From bbe2838bc6464e2cd3913d0bc7994a06ea9d1338 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Mon, 23 Sep 2019 10:19:48 +0300 Subject: [PATCH 09/23] ci: adjust job triggers (#58) --- .github/workflows/test.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6d521470..d96c7a24 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,9 +1,14 @@ name: Test -on: [push, pull_request] +on: + push: + branches: + - '**' + pull_request: + types: [opened] jobs: - build: + unit: runs-on: ubuntu-latest steps: From e1965b8a42220ccbaf47096aec2d772c8f2fd9ab Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Mon, 23 Sep 2019 11:46:46 +0300 Subject: [PATCH 10/23] ci: report coverage to codecov (#59) --- .github/workflows/test.yml | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d96c7a24..61b4922d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,16 +8,18 @@ on: types: [opened] jobs: - unit: - runs-on: ubuntu-latest + unit: + runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - name: Set up JDK 1.8 - uses: actions/setup-java@v1 - with: - java-version: 1.8 - - name: Install - run: gradle dependencies - - name: Test - run: gradle test + steps: + - uses: actions/checkout@v1 + - name: Set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Install + run: gradle dependencies + - name: Test + run: gradle test && gradle jacocoTestReport + - name: Codecov + run: bash <(curl -s https://codecov.io/bash) -t ${{ secrets.CODECOV_TOKEN }} From 26cc5b511ea7a1599896b461876c3d0f7b7da84b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2019 13:50:46 +0300 Subject: [PATCH 11/23] chore(deps): add renovate.json (#60) --- renovate.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 renovate.json diff --git a/renovate.json b/renovate.json new file mode 100644 index 00000000..042ab22c --- /dev/null +++ b/renovate.json @@ -0,0 +1,3 @@ +{ + "extends": ["config:base", ":preserveSemverRanges"] +} From ced89aae1d54d7b704dc95742cd51009c1a286e1 Mon Sep 17 00:00:00 2001 From: Edgar Goetzendorff Date: Sat, 19 Oct 2019 08:11:25 +0200 Subject: [PATCH 12/23] chore: update workflow config (#66) --- .github/workflows/test.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 61b4922d..8f9805d4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,11 +1,12 @@ name: Test on: - push: - branches: - - '**' - pull_request: - types: [opened] + push: + branches: + - "master" + - "develop" + pull_request: + types: [ready_for_review, synchronize, opened] jobs: unit: From 110d4d9019136dc8af0ecbe37bacf826533ce7f1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 Jan 2020 08:11:36 +0100 Subject: [PATCH 13/23] chore(deps): update dependency gradle to v6 (#70) Co-authored-by: WhiteSource Renovate --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 196cac00..c6757d65 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.8-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip From 83ed4965b8a01a45d9f6f374de6ada9f80adddcd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 Jan 2020 08:13:29 +0100 Subject: [PATCH 14/23] chore(deps): update dependency com.google.code.gson:gson to v2.8.6 (#71) Co-authored-by: WhiteSource Renovate --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index a04c8151..313c5916 100644 --- a/build.gradle +++ b/build.gradle @@ -96,7 +96,7 @@ if (project.hasProperty("signing.keyId")) { dependencies { compile group: 'org.bitcoinj', name: 'bitcoinj-core', version: '0.14.7' compile group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.62' - compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0' + compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6' compile 'com.google.guava:guava:28.0-jre' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.0' From 9ea46055d37b4a038f2722d68a790c77b1040180 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 Jan 2020 08:15:09 +0100 Subject: [PATCH 15/23] chore(deps): update dependency org.bitcoinj:bitcoinj-core to v0.15.6 (#72) Co-authored-by: WhiteSource Renovate --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 313c5916..a7b469c0 100644 --- a/build.gradle +++ b/build.gradle @@ -94,7 +94,7 @@ if (project.hasProperty("signing.keyId")) { } dependencies { - compile group: 'org.bitcoinj', name: 'bitcoinj-core', version: '0.14.7' + compile group: 'org.bitcoinj', name: 'bitcoinj-core', version: '0.15.6' compile group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.62' compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6' compile 'com.google.guava:guava:28.0-jre' From 220df6ef544f07ce88c1026eac40cdb79b0f5f93 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 Jan 2020 08:22:29 +0100 Subject: [PATCH 16/23] chore(deps): update dependency org.bouncycastle:bcprov-jdk15on to v1.64 (#73) Co-authored-by: WhiteSource Renovate --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index a7b469c0..073854d0 100644 --- a/build.gradle +++ b/build.gradle @@ -95,7 +95,7 @@ if (project.hasProperty("signing.keyId")) { dependencies { compile group: 'org.bitcoinj', name: 'bitcoinj-core', version: '0.15.6' - compile group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.62' + compile group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.64' compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6' compile 'com.google.guava:guava:28.0-jre' From d019e25d88f236b7793b5a164f8d6c65f1240209 Mon Sep 17 00:00:00 2001 From: Kristjan Kosic Date: Wed, 15 Jan 2020 19:52:19 +0100 Subject: [PATCH 17/23] fix: handle SignatureDecodeException (#85) * fix: handle SignatureDecodeException * fix: exception handling in Message.java re: update bitcoinj * fix: remove bouncy castle from deps // collision with bitcoinj * chore: update guava package --- build.gradle | 13 +++++++++---- .../crypto/transactions/Transaction.java | 13 +++++++++++-- .../java/org/arkecosystem/crypto/utils/Message.java | 7 ++++++- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 073854d0..47147607 100644 --- a/build.gradle +++ b/build.gradle @@ -74,6 +74,12 @@ uploadArchives { organization = 'Ark Ecosystem' organizationUrl = 'https://ark.io' } + developer { + name = 'Kristjan Kosic' + email = 'kristjan@ark.io' + organization = 'Ark Ecosystem' + organizationUrl = 'https://ark.io' + } } scm { @@ -95,12 +101,11 @@ if (project.hasProperty("signing.keyId")) { dependencies { compile group: 'org.bitcoinj', name: 'bitcoinj-core', version: '0.15.6' - compile group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.64' compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6' - compile 'com.google.guava:guava:28.0-jre' + compile 'com.google.guava:guava:28.2-jre' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.0' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.0' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.2' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.2' } test { diff --git a/src/main/java/org/arkecosystem/crypto/transactions/Transaction.java b/src/main/java/org/arkecosystem/crypto/transactions/Transaction.java index d4d5b758..ca80655c 100644 --- a/src/main/java/org/arkecosystem/crypto/transactions/Transaction.java +++ b/src/main/java/org/arkecosystem/crypto/transactions/Transaction.java @@ -7,6 +7,7 @@ import org.arkecosystem.crypto.identities.PrivateKey; import org.bitcoinj.core.ECKey; import org.bitcoinj.core.Sha256Hash; +import org.bitcoinj.core.SignatureDecodeException; import java.lang.reflect.Type; import java.nio.ByteBuffer; @@ -66,7 +67,11 @@ public boolean verify() { byte[] signature = Hex.decode(this.signature); byte[] bytes = toBytes(); - return ECKey.verify(Sha256Hash.hash(bytes), signature, keys.getPubKey()); + try { + return ECKey.verify(Sha256Hash.hash(bytes), signature, keys.getPubKey()); + } catch (SignatureDecodeException e) { + return false; + } } public boolean secondVerify(String secondPublicKey) { @@ -75,7 +80,11 @@ public boolean secondVerify(String secondPublicKey) { byte[] signature = Hex.decode(this.signSignature); byte[] bytes = toBytes(false); - return ECKey.verify(Sha256Hash.hash(bytes), signature, keys.getPubKey()); + try { + return ECKey.verify(Sha256Hash.hash(bytes), signature, keys.getPubKey()); + } catch (SignatureDecodeException e) { + return false; + } } public Transaction parseSignatures(String serialized, int startOffset) { diff --git a/src/main/java/org/arkecosystem/crypto/utils/Message.java b/src/main/java/org/arkecosystem/crypto/utils/Message.java index 744c86a7..bd638b4a 100644 --- a/src/main/java/org/arkecosystem/crypto/utils/Message.java +++ b/src/main/java/org/arkecosystem/crypto/utils/Message.java @@ -5,6 +5,7 @@ import org.arkecosystem.crypto.identities.PrivateKey; import org.bitcoinj.core.ECKey; import org.bitcoinj.core.Sha256Hash; +import org.bitcoinj.core.SignatureDecodeException; import java.util.HashMap; import java.util.Map; @@ -34,7 +35,11 @@ public boolean verify() { byte[] signature = Hex.decode(this.signature); byte[] messageBytes = Sha256Hash.hash(this.message.getBytes()); - return ECKey.verify(messageBytes, signature, keys.getPubKey()); + try { + return ECKey.verify(messageBytes, signature, keys.getPubKey()); + } catch (SignatureDecodeException e) { + return false; + } } public Map toMap() { From 409ef6f660bc37cb5f24bfb1fc3c23177fe220f9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Jan 2020 08:09:37 +0100 Subject: [PATCH 18/23] chore(deps): update dependency gradle to v6.1.0 (#87) Co-authored-by: WhiteSource Renovate --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index c6757d65..5ef72f2e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1-all.zip From 63ac1c5ef5d9e6ca5f322a758e596220f3798724 Mon Sep 17 00:00:00 2001 From: Kristjan Kosic Date: Thu, 16 Jan 2020 12:06:20 +0100 Subject: [PATCH 19/23] chore: add actions for different JDK versions (#90) --- .github/workflows/test.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8f9805d4..b7a8fd16 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,13 +11,17 @@ on: jobs: unit: runs-on: ubuntu-latest + strategy: + matrix: + # test against latest update of each major Java version, as well as specific updates of LTS versions: + java: [ 8, 9, 10, 11, 12, 13 ] steps: - uses: actions/checkout@v1 - - name: Set up JDK 1.8 + - name: Use Java Version ${{ matrix.java }} uses: actions/setup-java@v1 with: - java-version: 1.8 + java-version: ${{ matrix.java }} - name: Install run: gradle dependencies - name: Test From ae073654edc04bf4e0d70e62009d14b6f25bf6b9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2020 09:53:30 +0100 Subject: [PATCH 20/23] chore(deps): update dependency org.junit.jupiter:junit-jupiter-api to v5.6.0 (#93) Co-authored-by: WhiteSource Renovate --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 47147607..4615c264 100644 --- a/build.gradle +++ b/build.gradle @@ -104,7 +104,7 @@ dependencies { compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6' compile 'com.google.guava:guava:28.2-jre' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.2' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.2' } From 237bdfa70c6cac182f5121669f24f2dfc9187c68 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2020 11:24:45 +0100 Subject: [PATCH 21/23] chore(deps): update dependency org.junit.jupiter:junit-jupiter-engine to v5.6.0 (#94) Co-authored-by: WhiteSource Renovate --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 4615c264..f4ec520c 100644 --- a/build.gradle +++ b/build.gradle @@ -105,7 +105,7 @@ dependencies { compile 'com.google.guava:guava:28.2-jre' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.2' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.0' } test { From 7e54b79e5a851ca87067bc203b6abdf684d44982 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2020 11:33:12 +0100 Subject: [PATCH 22/23] chore(deps): update dependency gradle to v6.1.1 (#95) Co-authored-by: WhiteSource Renovate Co-authored-by: Kristjan Kosic --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5ef72f2e..b5f1813f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip From 51a3875473b49d26adfb6d7da35388c56f64df9c Mon Sep 17 00:00:00 2001 From: Kristjan Kosic - Chris Date: Mon, 10 Feb 2020 18:33:35 +0100 Subject: [PATCH 23/23] style: spotless apply --- .../crypto/transactions/Transaction.java | 27 ++++++++++++------- .../arkecosystem/crypto/utils/Message.java | 4 ++- .../deserializers/TransferTest.java | 2 -- .../serializers/TransferTest.java | 3 +-- 4 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/arkecosystem/crypto/transactions/Transaction.java b/src/main/java/org/arkecosystem/crypto/transactions/Transaction.java index 39d2df9b..5a3ae837 100644 --- a/src/main/java/org/arkecosystem/crypto/transactions/Transaction.java +++ b/src/main/java/org/arkecosystem/crypto/transactions/Transaction.java @@ -49,7 +49,8 @@ public Transaction sign(String passphrase) { ECKey privateKey = PrivateKey.fromPassphrase(passphrase); this.senderPublicKey = privateKey.getPublicKeyAsHex(); - this.signature = Hex.encode(privateKey.sign(Sha256Hash.of(toBytes(true, true))).encodeToDER()); + this.signature = + Hex.encode(privateKey.sign(Sha256Hash.of(toBytes(true, true))).encodeToDER()); return this; } @@ -57,7 +58,8 @@ public Transaction sign(String passphrase) { public Transaction secondSign(String passphrase) { ECKey privateKey = PrivateKey.fromPassphrase(passphrase); - this.signSignature = Hex.encode(privateKey.sign(Sha256Hash.of(toBytes(false, true))).encodeToDER()); + this.signSignature = + Hex.encode(privateKey.sign(Sha256Hash.of(toBytes(false, true))).encodeToDER()); return this; } @@ -114,8 +116,10 @@ public Transaction parseSignatures(String serialized, int startOffset) { if ("ff".equals(this.secondSignature.substring(0, 2))) { this.secondSignature = null; } else { - int secondSignatureLength = Integer.parseInt(this.secondSignature.substring(2, 4), 16) + 2; - this.secondSignature = this.secondSignature.substring(0, secondSignatureLength * 2); + int secondSignatureLength = + Integer.parseInt(this.secondSignature.substring(2, 4), 16) + 2; + this.secondSignature = + this.secondSignature.substring(0, secondSignatureLength * 2); multiSignatureOffset += secondSignatureLength * 2; } } @@ -161,8 +165,10 @@ private byte[] toBytesV1(boolean skipSignature, boolean skipSecondSignature) { buffer.putInt(timestamp); buffer.put(Hex.decode(this.senderPublicKey)); - boolean skipRecipientId = this.type == CoreTransactionTypes.SECOND_SIGNATURE_REGISTRATION.getValue() - || this.type == CoreTransactionTypes.MULTI_SIGNATURE_REGISTRATION.getValue(); + boolean skipRecipientId = + this.type == CoreTransactionTypes.SECOND_SIGNATURE_REGISTRATION.getValue() + || this.type + == CoreTransactionTypes.MULTI_SIGNATURE_REGISTRATION.getValue(); if (recipientId != null && !recipientId.isEmpty() && !skipRecipientId) { buffer.put(Base58.decodeChecked(this.recipientId)); } else { @@ -291,9 +297,11 @@ public HashMap toHashMap() { return map; } - private static class TransactionTypeDeserializer implements JsonDeserializer { + private static class TransactionTypeDeserializer + implements JsonDeserializer { @Override - public CoreTransactionTypes deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + public CoreTransactionTypes deserialize( + JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { return CoreTransactionTypes.values()[json.getAsInt()]; } @@ -301,7 +309,8 @@ public CoreTransactionTypes deserialize(JsonElement json, Type typeOfT, JsonDese private static class TransactionTypeSerializer implements JsonSerializer { @Override - public JsonElement serialize(CoreTransactionTypes src, Type typeOfSrc, JsonSerializationContext context) { + public JsonElement serialize( + CoreTransactionTypes src, Type typeOfSrc, JsonSerializationContext context) { return new JsonPrimitive(src.getValue()); } } diff --git a/src/main/java/org/arkecosystem/crypto/utils/Message.java b/src/main/java/org/arkecosystem/crypto/utils/Message.java index 34fc4869..23687b96 100644 --- a/src/main/java/org/arkecosystem/crypto/utils/Message.java +++ b/src/main/java/org/arkecosystem/crypto/utils/Message.java @@ -24,7 +24,9 @@ public static Message sign(String message, String passphrase) { ECKey privateKey = PrivateKey.fromPassphrase(passphrase); Sha256Hash messageBytes = Sha256Hash.of(message.getBytes()); - return new Message(privateKey.getPublicKeyAsHex(), Hex.encode(privateKey.sign(messageBytes).encodeToDER()), + return new Message( + privateKey.getPublicKeyAsHex(), + Hex.encode(privateKey.sign(messageBytes).encodeToDER()), message); } diff --git a/src/test/java/org/arkecosystem/crypto/transactions/deserializers/TransferTest.java b/src/test/java/org/arkecosystem/crypto/transactions/deserializers/TransferTest.java index d82b666f..724eca2b 100644 --- a/src/test/java/org/arkecosystem/crypto/transactions/deserializers/TransferTest.java +++ b/src/test/java/org/arkecosystem/crypto/transactions/deserializers/TransferTest.java @@ -176,6 +176,4 @@ void secondPassphraseVendorField() { assertEquals(dataV2.get("secondSignature").toString(), actualV2.secondSignature); assertEquals(dataV2.get("vendorField").toString(), actualV2.vendorField); } - - } diff --git a/src/test/java/org/arkecosystem/crypto/transactions/serializers/TransferTest.java b/src/test/java/org/arkecosystem/crypto/transactions/serializers/TransferTest.java index 484408c0..e5c87ee2 100644 --- a/src/test/java/org/arkecosystem/crypto/transactions/serializers/TransferTest.java +++ b/src/test/java/org/arkecosystem/crypto/transactions/serializers/TransferTest.java @@ -142,8 +142,7 @@ void secondPassphraseVendorFieldHex() { // V2 tests LinkedTreeMap fixtureV2 = - FixtureLoader.load( - "transactions/v2-ecdsa/transfer-with-vendor-field-secondSign"); + FixtureLoader.load("transactions/v2-ecdsa/transfer-with-vendor-field-secondSign"); Transaction transactionV2 = new Deserializer().deserialize(fixtureV2.get("serialized").toString());