From 022f1665aa238ae73e37afa94e68abb65534e50f Mon Sep 17 00:00:00 2001 From: "Andreas C. Osowski" Date: Sun, 5 Nov 2017 23:55:00 +0100 Subject: [PATCH] signing: bugfix for key generation for seeds >81 trytes --- jota/src/main/java/jota/utils/Signing.java | 4 ++-- jota/src/test/java/jota/SigningTest.java | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/jota/src/main/java/jota/utils/Signing.java b/jota/src/main/java/jota/utils/Signing.java index d54a6c6..fc260eb 100644 --- a/jota/src/main/java/jota/utils/Signing.java +++ b/jota/src/main/java/jota/utils/Signing.java @@ -39,7 +39,7 @@ public class Signing { * @throws InvalidSecurityLevelException is thrown when the specified security level is not valid. */ public int[] key(final int[] inSeed, final int index, int security) throws InvalidSecurityLevelException { - if (security < 1 || security > 3) { + if (security < 1) { throw new InvalidSecurityLevelException(); } @@ -70,7 +70,7 @@ public class Signing { while (security-- > 0) { for (int i = 0; i < 27; i++) { curl.squeeze(key, offset, HASH_LENGTH); - offset += seed.length; + offset += HASH_LENGTH; } } return key; diff --git a/jota/src/test/java/jota/SigningTest.java b/jota/src/test/java/jota/SigningTest.java index 34833c8..c2ec311 100644 --- a/jota/src/test/java/jota/SigningTest.java +++ b/jota/src/test/java/jota/SigningTest.java @@ -3,6 +3,8 @@ package jota; import jota.error.InvalidAddressException; import jota.error.InvalidSecurityLevelException; import jota.model.Bundle; +import jota.pow.ICurl; +import jota.pow.SpongeFactory; import jota.utils.*; import org.junit.Test; @@ -28,6 +30,17 @@ public class SigningTest { assertEquals(SIXTH_ADDR, IotaAPIUtils.newAddress(TEST_SEED, 2, 5, true, null)); } + @Test + public void testLongSeedKeyGeneration() throws InvalidSecurityLevelException { + ICurl curl = SpongeFactory.create(SpongeFactory.Mode.KERL); + Signing signing = new Signing(curl); + String seed = "EV9QRJFJZVFNLYUFXWKXMCRRPNAZYQVEYB9VEPUHQNXJCWKZFVUCTQJFCUAMXAHMMIUQUJDG9UGGQBPIY"; + + int[] key1 = signing.key(Converter.trits(seed), 0, 1); + int[] key2 = signing.key(Converter.trits(seed+seed), 0, 1); + int[] key3 = signing.key(Converter.trits(seed+seed+seed), 0, 1); + } + @Test public void testSigning() throws InvalidAddressException, InvalidSecurityLevelException { // we can sign any hash, so for convenience we will sign the first