diff --git a/hedera-node/hapi-utils/build.gradle.kts b/hedera-node/hapi-utils/build.gradle.kts index c5a12228e970..3f1b2d4e75b8 100644 --- a/hedera-node/hapi-utils/build.gradle.kts +++ b/hedera-node/hapi-utils/build.gradle.kts @@ -9,4 +9,5 @@ testModuleInfo { requires("org.junit.jupiter.api") requires("org.junit.jupiter.params") requires("org.mockito") + requires("org.assertj.core") } diff --git a/hedera-node/hapi-utils/src/main/java/com/hedera/node/app/hapi/utils/keys/Ed25519Utils.java b/hedera-node/hapi-utils/src/main/java/com/hedera/node/app/hapi/utils/keys/Ed25519Utils.java index edd78c785304..619068662ceb 100644 --- a/hedera-node/hapi-utils/src/main/java/com/hedera/node/app/hapi/utils/keys/Ed25519Utils.java +++ b/hedera-node/hapi-utils/src/main/java/com/hedera/node/app/hapi/utils/keys/Ed25519Utils.java @@ -1,11 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 package com.hedera.node.app.hapi.utils.keys; +import com.hedera.pbj.runtime.io.buffer.Bytes; import edu.umd.cs.findbugs.annotations.NonNull; import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; import java.security.KeyPair; import java.security.Provider; import net.i2p.crypto.eddsa.EdDSAPrivateKey; @@ -15,47 +13,30 @@ import net.i2p.crypto.eddsa.spec.EdDSANamedCurveTable; import net.i2p.crypto.eddsa.spec.EdDSAPrivateKeySpec; import net.i2p.crypto.eddsa.spec.EdDSAPublicKeySpec; -import org.bouncycastle.jce.provider.BouncyCastleProvider; -import org.bouncycastle.openssl.PEMParser; -import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter; -import org.bouncycastle.openssl.jcajce.JceOpenSSLPKCS8DecryptorProviderBuilder; -import org.bouncycastle.operator.OperatorCreationException; -import org.bouncycastle.pkcs.PKCS8EncryptedPrivateKeyInfo; -import org.bouncycastle.pkcs.PKCSException; /** * Minimal utility to read/write a single Ed25519 key from/to an encrypted PEM file. */ public final class Ed25519Utils { - private static final Provider BC_PROVIDER = new BouncyCastleProvider(); private static final Provider ED_PROVIDER = new EdDSASecurityProvider(); - - public static final EdDSANamedCurveSpec ED25519_PARAMS = + private static final EdDSANamedCurveSpec ED25519_PARAMS = EdDSANamedCurveTable.getByName(EdDSANamedCurveTable.ED_25519); + private static final int ED25519_BYTE_LENGTH = 32; + + static boolean isValidEd25519Key(@NonNull final Bytes key) { + return key.length() == ED25519_BYTE_LENGTH; + } + + public static EdDSAPrivateKey readKeyFrom(final File pem, final String passphrase) { + return KeyUtils.readKeyFrom(pem, passphrase, ED_PROVIDER); + } public static KeyPair readKeyPairFrom(final File pem, final String passphrase) { return keyPairFrom(readKeyFrom(pem, passphrase)); } public static EdDSAPrivateKey readKeyFrom(final String pemLoc, final String passphrase) { - return readKeyFrom(new File(pemLoc), passphrase); - } - - public static EdDSAPrivateKey readKeyFrom(final File pem, final String passphrase) { - final var relocatedPem = KeyUtils.relocatedIfNotPresentInWorkingDir(pem); - try (final var in = new FileInputStream(relocatedPem)) { - final var decryptProvider = new JceOpenSSLPKCS8DecryptorProviderBuilder() - .setProvider(BC_PROVIDER) - .build(passphrase.toCharArray()); - final var converter = new JcaPEMKeyConverter().setProvider(ED_PROVIDER); - try (final var parser = new PEMParser(new InputStreamReader(in))) { - final var encryptedPrivateKeyInfo = (PKCS8EncryptedPrivateKeyInfo) parser.readObject(); - final var info = encryptedPrivateKeyInfo.decryptPrivateKeyInfo(decryptProvider); - return (EdDSAPrivateKey) converter.getPrivateKey(info); - } - } catch (final IOException | OperatorCreationException | PKCSException e) { - throw new IllegalArgumentException(e); - } + return KeyUtils.readKeyFrom(new File(pemLoc), passphrase, ED_PROVIDER); } public static byte[] extractEd25519PublicKey(@NonNull final EdDSAPrivateKey key) { diff --git a/hedera-node/hedera-app-spi/src/main/java/com/hedera/node/app/spi/key/KeyComparator.java b/hedera-node/hapi-utils/src/main/java/com/hedera/node/app/hapi/utils/keys/KeyComparator.java similarity index 99% rename from hedera-node/hedera-app-spi/src/main/java/com/hedera/node/app/spi/key/KeyComparator.java rename to hedera-node/hapi-utils/src/main/java/com/hedera/node/app/hapi/utils/keys/KeyComparator.java index 82f3932e1073..5ed26883cf63 100644 --- a/hedera-node/hedera-app-spi/src/main/java/com/hedera/node/app/spi/key/KeyComparator.java +++ b/hedera-node/hapi-utils/src/main/java/com/hedera/node/app/hapi/utils/keys/KeyComparator.java @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -package com.hedera.node.app.spi.key; +package com.hedera.node.app.hapi.utils.keys; import com.hedera.hapi.node.base.ContractID; import com.hedera.hapi.node.base.Key; diff --git a/hedera-node/hapi-utils/src/main/java/com/hedera/node/app/hapi/utils/keys/KeyUtils.java b/hedera-node/hapi-utils/src/main/java/com/hedera/node/app/hapi/utils/keys/KeyUtils.java index 27df9c3b1d7c..d8e5e8302a29 100644 --- a/hedera-node/hapi-utils/src/main/java/com/hedera/node/app/hapi/utils/keys/KeyUtils.java +++ b/hedera-node/hapi-utils/src/main/java/com/hedera/node/app/hapi/utils/keys/KeyUtils.java @@ -1,10 +1,22 @@ // SPDX-License-Identifier: Apache-2.0 package com.hedera.node.app.hapi.utils.keys; +import static com.hedera.node.app.hapi.utils.keys.Ed25519Utils.isValidEd25519Key; +import static com.hedera.node.app.hapi.utils.keys.Secp256k1Utils.isValidEcdsaSecp256k1Key; +import static com.hedera.node.app.hapi.utils.keys.Secp256k1Utils.isValidEvmAddress; + +import com.hedera.hapi.node.base.ContractID; +import com.hedera.hapi.node.base.Key; +import com.hedera.hapi.node.base.KeyList; +import com.hedera.hapi.node.base.ThresholdKey; +import com.hedera.pbj.runtime.io.buffer.Bytes; import edu.umd.cs.findbugs.annotations.NonNull; +import edu.umd.cs.findbugs.annotations.Nullable; import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.nio.file.Path; import java.security.DrbgParameters; @@ -13,21 +25,34 @@ import java.security.Provider; import java.security.SecureRandom; import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.bouncycastle.openssl.PEMParser; import org.bouncycastle.openssl.PKCS8Generator; +import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter; import org.bouncycastle.openssl.jcajce.JcaPEMWriter; import org.bouncycastle.openssl.jcajce.JcaPKCS8Generator; +import org.bouncycastle.openssl.jcajce.JceOpenSSLPKCS8DecryptorProviderBuilder; import org.bouncycastle.openssl.jcajce.JceOpenSSLPKCS8EncryptorBuilder; import org.bouncycastle.operator.OperatorCreationException; +import org.bouncycastle.pkcs.PKCS8EncryptedPrivateKeyInfo; +import org.bouncycastle.pkcs.PKCSException; /** * Utility class for working with algorithm-agnostic cryptographic keys */ public final class KeyUtils { - public static final Provider BC_PROVIDER = new BouncyCastleProvider(); + public static final Key IMMUTABILITY_SENTINEL_KEY = + Key.newBuilder().keyList(KeyList.DEFAULT).build(); public static final String TEST_CLIENTS_PREFIX = "hedera-node" + File.separator + "test-clients" + File.separator; + static final Provider BC_PROVIDER = new BouncyCastleProvider(); + private static final int ENCRYPTOR_ITERATION_COUNT = 10_000; private static final String RESOURCE_PATH_SEGMENT = "src/main/resource"; + + private KeyUtils() { + throw new UnsupportedOperationException("Utility Class"); + } + private static final DrbgParameters.Instantiation DRBG_INSTANTIATION = DrbgParameters.instantiation(256, DrbgParameters.Capability.RESEED_ONLY, null); @@ -39,6 +64,39 @@ public static File relocatedIfNotPresentInWorkingDir(final File file) { return relocatedIfNotPresentWithCurrentPathPrefix(file, RESOURCE_PATH_SEGMENT, TEST_CLIENTS_PREFIX); } + public static File relocatedIfNotPresentWithCurrentPathPrefix( + final File file, final String firstSegmentToRelocate, final String newPathPrefix) { + if (!file.exists()) { + final var absPath = withDedupedHederaNodePathSegments(file.getAbsolutePath()); + final var idx = absPath.indexOf(firstSegmentToRelocate); + if (idx == -1) { + return new File(absPath); + } + final var relocatedPath = newPathPrefix + absPath.substring(idx); + return new File(relocatedPath); + } else { + return file; + } + } + + public static T readKeyFrom( + final File pem, final String passphrase, final Provider pemKeyProvider) { + final var relocatedPem = KeyUtils.relocatedIfNotPresentInWorkingDir(pem); + try (final var in = new FileInputStream(relocatedPem)) { + final var decryptProvider = new JceOpenSSLPKCS8DecryptorProviderBuilder() + .setProvider(BC_PROVIDER) + .build(passphrase.toCharArray()); + final var converter = new JcaPEMKeyConverter().setProvider(pemKeyProvider); + try (final var parser = new PEMParser(new InputStreamReader(in))) { + final var encryptedPrivateKeyInfo = (PKCS8EncryptedPrivateKeyInfo) parser.readObject(); + final var info = encryptedPrivateKeyInfo.decryptPrivateKeyInfo(decryptProvider); + return (T) converter.getPrivateKey(info); + } + } catch (final IOException | OperatorCreationException | PKCSException e) { + throw new IllegalArgumentException(e); + } + } + public static void writeKeyTo(final PrivateKey key, final String pemLoc, final String passphrase) { final var pem = new File(pemLoc); try (final var out = new FileOutputStream(pem)) { @@ -59,19 +117,110 @@ public static void writeKeyTo(final PrivateKey key, final String pemLoc, final S } } - public static File relocatedIfNotPresentWithCurrentPathPrefix( - final File file, final String firstSegmentToRelocate, final String newPathPrefix) { - if (!file.exists()) { - final var absPath = withDedupedHederaNodePathSegments(file.getAbsolutePath()); - final var idx = absPath.indexOf(firstSegmentToRelocate); - if (idx == -1) { - return new File(absPath); + /** + * Checks if the given key is empty. + * For a KeyList type checks if the list is empty. + * For a ThresholdKey type checks if the list is empty. + * For an Ed25519 or EcdsaSecp256k1 type checks if there are zero bytes. + * @param pbjKey the key to check + * @return true if the key is empty, false otherwise + */ + public static boolean isEmpty(@Nullable final Key pbjKey) { + return isEmptyInternal(pbjKey, false); + } + + /** + * Checks if the given key is empty. + * For a KeyList type checks if the list is empty. + * For a ThresholdKey type checks if the list is empty. + * For an Ed25519 or EcdsaSecp256k1 type checks if there are zero bytes. + * @param pbjKey the key to check + * @param honorImmutable if true, the key is NOT considered EMPTY if it is the IMMUTABILITY_SENTINEL_KEY + * @return true if the key is empty, false otherwise + */ + private static boolean isEmptyInternal(@Nullable final Key pbjKey, boolean honorImmutable) { + if (pbjKey == null) { + return true; + } + final var key = pbjKey.key(); + if (key == null || Key.KeyOneOfType.UNSET.equals(key.kind())) { + return true; + } + if (honorImmutable && IMMUTABILITY_SENTINEL_KEY.equals(pbjKey)) { + return false; + } + if (pbjKey.hasKeyList()) { + final var keyList = (KeyList) key.value(); + if (keyList.keys().isEmpty()) { + return true; } - final var relocatedPath = newPathPrefix + absPath.substring(idx); - return new File(relocatedPath); - } else { - return file; + for (final var k : keyList.keys()) { + if (!isEmpty(k)) { + return false; + } + } + return true; + } else if (pbjKey.hasThresholdKey()) { + final var thresholdKey = (ThresholdKey) key.value(); + if ((!thresholdKey.hasKeys() || thresholdKey.keys().keys().size() == 0)) { + return true; + } + for (final var k : thresholdKey.keys().keys()) { + if (!isEmpty(k)) { + return false; + } + } + return true; + } else if (pbjKey.hasEd25519()) { + return ((Bytes) key.value()).length() == 0; + } else if (pbjKey.hasEcdsaSecp256k1()) { + return ((Bytes) key.value()).length() == 0; + } else if (pbjKey.hasDelegatableContractId() || pbjKey.hasContractID()) { + return ((ContractID) key.value()).contractNumOrElse(0L) == 0 + && ((ContractID) key.value()).evmAddressOrElse(Bytes.EMPTY).length() == 0L; + } + // ECDSA_384 and RSA_3072 are not supported yet + return true; + } + + /** + * Checks if the given key is valid. Based on the key type it checks the basic requirements + * for the key type. + * @param pbjKey the key to check + * @return true if the key is valid, false otherwise + */ + public static boolean isValid(@Nullable final Key pbjKey) { + if (isEmpty(pbjKey)) { + return false; } + final var key = pbjKey.key(); + if (pbjKey.hasKeyList()) { + for (Key keys : ((KeyList) key.value()).keys()) { + if (!isValid(keys)) { + return false; + } + } + return true; + } else if (pbjKey.hasThresholdKey()) { + final int length = ((ThresholdKey) key.value()).keys().keys().size(); + final int threshold = ((ThresholdKey) key.value()).threshold(); + boolean isKeyListValid = true; + for (Key keys : ((ThresholdKey) key.value()).keys().keys()) { + if (!isValid(keys)) { + isKeyListValid = false; + break; + } + } + return (threshold >= 1 && threshold <= length && isKeyListValid); + } else if (pbjKey.hasEd25519()) { + return isValidEd25519Key((Bytes) key.value()); + } else if (pbjKey.hasEcdsaSecp256k1()) { + return isValidEcdsaSecp256k1Key((Bytes) key.value()); + } else if (pbjKey.hasDelegatableContractId() || pbjKey.hasContractID()) { + return isValidEvmAddress((ContractID) key.value()); + } + // ECDSA_384 and RSA_3072 are not supported yet + return true; } private static String withDedupedHederaNodePathSegments(@NonNull final String loc) { @@ -86,8 +235,4 @@ private static String withDedupedHederaNodePathSegments(@NonNull final String lo return loc; } } - - private KeyUtils() { - throw new UnsupportedOperationException("Utility Class"); - } } diff --git a/hedera-node/hapi-utils/src/main/java/com/hedera/node/app/hapi/utils/keys/Secp256k1Utils.java b/hedera-node/hapi-utils/src/main/java/com/hedera/node/app/hapi/utils/keys/Secp256k1Utils.java index 9fdca7a1bc82..2d6ef719640a 100644 --- a/hedera-node/hapi-utils/src/main/java/com/hedera/node/app/hapi/utils/keys/Secp256k1Utils.java +++ b/hedera-node/hapi-utils/src/main/java/com/hedera/node/app/hapi/utils/keys/Secp256k1Utils.java @@ -2,26 +2,30 @@ package com.hedera.node.app.hapi.utils.keys; import static com.hedera.node.app.hapi.utils.keys.KeyUtils.BC_PROVIDER; -import static com.hedera.node.app.hapi.utils.keys.KeyUtils.relocatedIfNotPresentInWorkingDir; +import com.hedera.hapi.node.base.ContractID; +import com.hedera.pbj.runtime.io.buffer.Bytes; +import com.hederahashgraph.api.proto.java.Key; +import edu.umd.cs.findbugs.annotations.NonNull; import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; import java.security.interfaces.ECPrivateKey; import org.bouncycastle.jce.ECNamedCurveTable; import org.bouncycastle.math.ec.ECPoint; -import org.bouncycastle.openssl.PEMParser; -import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter; -import org.bouncycastle.openssl.jcajce.JceOpenSSLPKCS8DecryptorProviderBuilder; -import org.bouncycastle.operator.OperatorCreationException; -import org.bouncycastle.pkcs.PKCS8EncryptedPrivateKeyInfo; -import org.bouncycastle.pkcs.PKCSException; /** * Useful methods for interacting with SECP256K1 ECDSA keys. */ public class Secp256k1Utils { + public static final int ECDSA_SECP256K1_COMPRESSED_KEY_LENGTH = 33; + + private static final int EVM_ADDRESS_BYTE_LENGTH = 20; + private static final byte ODD_PARITY = (byte) 0x03; + private static final byte EVEN_PARITY = (byte) 0x02; + + static boolean isValidEvmAddress(@NonNull final ContractID contractId) { + return contractId.contractNumOrElse(0L) > 0 + || contractId.evmAddressOrElse(Bytes.EMPTY).length() == EVM_ADDRESS_BYTE_LENGTH; + } public static byte[] extractEcdsaPublicKey(final ECPrivateKey key) { final ECPoint pointQ = @@ -29,20 +33,20 @@ public static byte[] extractEcdsaPublicKey(final ECPrivateKey key) { return pointQ.getEncoded(true); } + public static byte[] getEvmAddressFromString(final Key key) { + return extractEcdsaPublicKey(key); + } + + public static byte[] extractEcdsaPublicKey(final Key key) { + return key.getECDSASecp256K1().toByteArray(); + } + public static ECPrivateKey readECKeyFrom(final File pem, final String passphrase) { - final var relocatedPem = relocatedIfNotPresentInWorkingDir(pem); - try (final var in = new FileInputStream(relocatedPem)) { - final var decryptProvider = new JceOpenSSLPKCS8DecryptorProviderBuilder() - .setProvider(BC_PROVIDER) - .build(passphrase.toCharArray()); - final var converter = new JcaPEMKeyConverter().setProvider(BC_PROVIDER); - try (final var parser = new PEMParser(new InputStreamReader(in))) { - final var encryptedPrivateKeyInfo = (PKCS8EncryptedPrivateKeyInfo) parser.readObject(); - final var info = encryptedPrivateKeyInfo.decryptPrivateKeyInfo(decryptProvider); - return (ECPrivateKey) converter.getPrivateKey(info); - } - } catch (final IOException | OperatorCreationException | PKCSException e) { - throw new IllegalArgumentException(e); - } + return KeyUtils.readKeyFrom(pem, passphrase, BC_PROVIDER); + } + + static boolean isValidEcdsaSecp256k1Key(@NonNull final Bytes key) { + return key.length() == ECDSA_SECP256K1_COMPRESSED_KEY_LENGTH + && (key.getByte(0) == EVEN_PARITY || key.getByte(0) == ODD_PARITY); } } diff --git a/hedera-node/hedera-app-spi/src/test/java/com/hedera/node/app/spi/key/KeyComparatorTest.java b/hedera-node/hapi-utils/src/test/java/com/hedera/node/app/hapi/utils/keys/KeyComparatorTest.java similarity index 99% rename from hedera-node/hedera-app-spi/src/test/java/com/hedera/node/app/spi/key/KeyComparatorTest.java rename to hedera-node/hapi-utils/src/test/java/com/hedera/node/app/hapi/utils/keys/KeyComparatorTest.java index 72820d305ef0..362f0378ace5 100644 --- a/hedera-node/hedera-app-spi/src/test/java/com/hedera/node/app/spi/key/KeyComparatorTest.java +++ b/hedera-node/hapi-utils/src/test/java/com/hedera/node/app/hapi/utils/keys/KeyComparatorTest.java @@ -1,8 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -package com.hedera.node.app.spi.key; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +package com.hedera.node.app.hapi.utils.keys; import com.hedera.hapi.node.base.ContractID; import com.hedera.hapi.node.base.Key; @@ -13,6 +10,7 @@ import java.util.LinkedList; import java.util.List; import java.util.stream.Stream; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -36,14 +34,14 @@ void verifyCompareCrossTypeMatchesOrdinalOrder( final String caseName, final Integer expectedValue, final Key lValue, final Key rValue) { final KeyComparator subject = new KeyComparator(); final Integer actualResult = Integer.valueOf(subject.compare(lValue, rValue)); - assertThat(actualResult) + Assertions.assertThat(actualResult) .withFailMessage(CASE_FAIL_MESSAGE, caseName, expectedValue, lValue, rValue, actualResult) .isEqualTo(expectedValue); // Verify forward and reverse comparison are consistent, otherwise the comparator order is unstable. // requirement: compare(a,b) === -compare(b,a) final int inverseResult = subject.compare(rValue, lValue); final int inverseExpected = -(expectedValue.intValue()); - assertThat(inverseResult) + Assertions.assertThat(inverseResult) .withFailMessage( CASE_FAIL_MESSAGE, "Inverse-" + caseName, inverseExpected, rValue, lValue, inverseResult) .isEqualTo(inverseExpected); @@ -56,14 +54,14 @@ void verifyCompareSameTypeMatchesExpectedOrder( final KeyComparator subject = new KeyComparator(); final int actualResult = subject.compare(lValue, rValue); final int expected = expectedValue.intValue(); - assertThat(actualResult) + Assertions.assertThat(actualResult) .withFailMessage(CASE_FAIL_MESSAGE, caseName, expected, lValue, rValue, actualResult) .isEqualTo(expectedValue); // Verify forward and reverse comparison are consistent, otherwise the comparator order is unstable. // requirement: compare(a,b) == -compare(b,a) final int inverseResult = subject.compare(rValue, lValue); final int inverseExpected = -(expectedValue.intValue()); - assertThat(inverseResult) + Assertions.assertThat(inverseResult) .withFailMessage( CASE_FAIL_MESSAGE, "Inverse-" + caseName, inverseExpected, rValue, lValue, inverseResult) .isEqualTo(inverseExpected); @@ -73,7 +71,8 @@ void verifyCompareSameTypeMatchesExpectedOrder( @MethodSource("generateAllUnsupportedTypes") void verifyUnsupportedTypes(final String caseName, final Key lValue, final Key rValue) { final KeyComparator subject = new KeyComparator(); - assertThatThrownBy(() -> subject.compare(lValue, rValue)).isInstanceOf(UnsupportedOperationException.class); + Assertions.assertThatThrownBy(() -> subject.compare(lValue, rValue)) + .isInstanceOf(UnsupportedOperationException.class); } //////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/hedera-node/hedera-addressbook-service-impl/src/main/java/com/hedera/node/app/service/addressbook/impl/validators/AddressBookValidator.java b/hedera-node/hedera-addressbook-service-impl/src/main/java/com/hedera/node/app/service/addressbook/impl/validators/AddressBookValidator.java index 8ffb1a09d1d6..c5de43bb72a8 100644 --- a/hedera-node/hedera-addressbook-service-impl/src/main/java/com/hedera/node/app/service/addressbook/impl/validators/AddressBookValidator.java +++ b/hedera-node/hedera-addressbook-service-impl/src/main/java/com/hedera/node/app/service/addressbook/impl/validators/AddressBookValidator.java @@ -15,10 +15,10 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.IP_FQDN_CANNOT_BE_SET_FOR_SAME_ENDPOINT; import static com.hedera.hapi.node.base.ResponseCodeEnum.KEY_REQUIRED; import static com.hedera.hapi.node.base.ResponseCodeEnum.SERVICE_ENDPOINTS_EXCEEDED_LIMIT; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.isEmpty; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.isValid; import static com.hedera.node.app.service.addressbook.AddressBookHelper.readCertificatePemFile; import static com.hedera.node.app.service.addressbook.AddressBookHelper.writeCertificatePemFile; -import static com.hedera.node.app.spi.key.KeyUtils.isEmpty; -import static com.hedera.node.app.spi.key.KeyUtils.isValid; import static com.hedera.node.app.spi.validation.Validations.validateAccountID; import static com.hedera.node.app.spi.workflows.HandleException.validateFalse; import static com.hedera.node.app.spi.workflows.PreCheckException.validateFalsePreCheck; diff --git a/hedera-node/hedera-addressbook-service-impl/src/test/java/com/hedera/node/app/service/addressbook/impl/test/handlers/NodeCreateHandlerTest.java b/hedera-node/hedera-addressbook-service-impl/src/test/java/com/hedera/node/app/service/addressbook/impl/test/handlers/NodeCreateHandlerTest.java index 6c73c7f05a1d..c6d33bd354ad 100644 --- a/hedera-node/hedera-addressbook-service-impl/src/test/java/com/hedera/node/app/service/addressbook/impl/test/handlers/NodeCreateHandlerTest.java +++ b/hedera-node/hedera-addressbook-service-impl/src/test/java/com/hedera/node/app/service/addressbook/impl/test/handlers/NodeCreateHandlerTest.java @@ -7,8 +7,8 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_NODE_ACCOUNT_ID; import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_SERVICE_ENDPOINT; import static com.hedera.hapi.node.base.ResponseCodeEnum.KEY_REQUIRED; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.spi.fixtures.Assertions.assertThrowsPreCheck; -import static com.hedera.node.app.spi.key.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; diff --git a/hedera-node/hedera-app-spi/src/main/java/com/hedera/node/app/spi/key/KeyUtils.java b/hedera-node/hedera-app-spi/src/main/java/com/hedera/node/app/spi/key/KeyUtils.java deleted file mode 100644 index ade3bac29dd8..000000000000 --- a/hedera-node/hedera-app-spi/src/main/java/com/hedera/node/app/spi/key/KeyUtils.java +++ /dev/null @@ -1,140 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -package com.hedera.node.app.spi.key; - -import com.hedera.hapi.node.base.ContractID; -import com.hedera.hapi.node.base.Key; -import com.hedera.hapi.node.base.Key.KeyOneOfType; -import com.hedera.hapi.node.base.KeyList; -import com.hedera.hapi.node.base.ThresholdKey; -import com.hedera.pbj.runtime.io.buffer.Bytes; -import edu.umd.cs.findbugs.annotations.Nullable; - -/** - * Utility class for working with keys. This validates if the key is empty and valid. - */ -// NOTE: This class is not in the right place. But is needed by several modules. -// !!!!!!!!!!🔥🔥🔥 It should be moved once we find where to keep it. 🔥🔥🔥!!!!!!!!!!! -public class KeyUtils { - - public static final Key IMMUTABILITY_SENTINEL_KEY = - Key.newBuilder().keyList(KeyList.DEFAULT).build(); - - public static final int EVM_ADDRESS_BYTE_LENGTH = 20; - public static final int ED25519_BYTE_LENGTH = 32; - private static final byte ODD_PARITY = (byte) 0x03; - private static final byte EVEN_PARITY = (byte) 0x02; - public static final int ECDSA_SECP256K1_COMPRESSED_KEY_LENGTH = 33; - - private KeyUtils() { - throw new UnsupportedOperationException("Utility Class"); - } - - /** - * Checks if the given key is empty. - * For a KeyList type checks if the list is empty. - * For a ThresholdKey type checks if the list is empty. - * For an Ed25519 or EcdsaSecp256k1 type checks if there are zero bytes. - * @param pbjKey the key to check - * @return true if the key is empty, false otherwise - */ - public static boolean isEmpty(@Nullable final Key pbjKey) { - return isEmptyInternal(pbjKey, false); - } - - /** - * Checks if the given key is empty. - * For a KeyList type checks if the list is empty. - * For a ThresholdKey type checks if the list is empty. - * For an Ed25519 or EcdsaSecp256k1 type checks if there are zero bytes. - * @param pbjKey the key to check - * @param honorImmutable if true, the key is NOT considered EMPTY if it is the IMMUTABILITY_SENTINEL_KEY - * @return true if the key is empty, false otherwise - */ - private static boolean isEmptyInternal(@Nullable final Key pbjKey, boolean honorImmutable) { - if (pbjKey == null) { - return true; - } - final var key = pbjKey.key(); - if (key == null || KeyOneOfType.UNSET.equals(key.kind())) { - return true; - } - if (honorImmutable && IMMUTABILITY_SENTINEL_KEY.equals(pbjKey)) { - return false; - } - if (pbjKey.hasKeyList()) { - final var keyList = (KeyList) key.value(); - if (keyList.keys().isEmpty()) { - return true; - } - for (final var k : keyList.keys()) { - if (!isEmpty(k)) { - return false; - } - } - return true; - } else if (pbjKey.hasThresholdKey()) { - final var thresholdKey = (ThresholdKey) key.value(); - if ((!thresholdKey.hasKeys() || thresholdKey.keys().keys().size() == 0)) { - return true; - } - for (final var k : thresholdKey.keys().keys()) { - if (!isEmpty(k)) { - return false; - } - } - return true; - } else if (pbjKey.hasEd25519()) { - return ((Bytes) key.value()).length() == 0; - } else if (pbjKey.hasEcdsaSecp256k1()) { - return ((Bytes) key.value()).length() == 0; - } else if (pbjKey.hasDelegatableContractId() || pbjKey.hasContractID()) { - return ((ContractID) key.value()).contractNumOrElse(0L) == 0 - && ((ContractID) key.value()).evmAddressOrElse(Bytes.EMPTY).length() == 0L; - } - // ECDSA_384 and RSA_3072 are not supported yet - return true; - } - - /** - * Checks if the given key is valid. Based on the key type it checks the basic requirements - * for the key type. - * @param pbjKey the key to check - * @return true if the key is valid, false otherwise - */ - public static boolean isValid(@Nullable final Key pbjKey) { - if (isEmpty(pbjKey)) { - return false; - } - final var key = pbjKey.key(); - if (pbjKey.hasKeyList()) { - for (Key keys : ((KeyList) key.value()).keys()) { - if (!isValid(keys)) { - return false; - } - } - return true; - } else if (pbjKey.hasThresholdKey()) { - final int length = ((ThresholdKey) key.value()).keys().keys().size(); - final int threshold = ((ThresholdKey) key.value()).threshold(); - boolean isKeyListValid = true; - for (Key keys : ((ThresholdKey) key.value()).keys().keys()) { - if (!isValid(keys)) { - isKeyListValid = false; - break; - } - } - return (threshold >= 1 && threshold <= length && isKeyListValid); - } else if (pbjKey.hasEd25519()) { - return ((Bytes) key.value()).length() == ED25519_BYTE_LENGTH; - } else if (pbjKey.hasEcdsaSecp256k1()) { - final var ecKey = ((Bytes) key.value()); - return ecKey.length() == ECDSA_SECP256K1_COMPRESSED_KEY_LENGTH - && (ecKey.getByte(0) == EVEN_PARITY || ecKey.getByte(0) == ODD_PARITY); - } else if (pbjKey.hasDelegatableContractId() || pbjKey.hasContractID()) { - return ((ContractID) key.value()).contractNumOrElse(0L) > 0 - || ((ContractID) key.value()).evmAddressOrElse(Bytes.EMPTY).length() == EVM_ADDRESS_BYTE_LENGTH; - } - // ECDSA_384 and RSA_3072 are not supported yet - return true; - } -} diff --git a/hedera-node/hedera-app-spi/src/main/java/com/hedera/node/app/spi/key/KeyVerifier.java b/hedera-node/hedera-app-spi/src/main/java/com/hedera/node/app/spi/key/KeyVerifier.java index 519ed5054c67..3924c46a77c1 100644 --- a/hedera-node/hedera-app-spi/src/main/java/com/hedera/node/app/spi/key/KeyVerifier.java +++ b/hedera-node/hedera-app-spi/src/main/java/com/hedera/node/app/spi/key/KeyVerifier.java @@ -4,6 +4,7 @@ import static java.util.Collections.unmodifiableSortedSet; import com.hedera.hapi.node.base.Key; +import com.hedera.node.app.hapi.utils.keys.KeyComparator; import com.hedera.node.app.spi.signatures.SignatureVerification; import com.hedera.node.app.spi.signatures.VerificationAssistant; import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/hedera-node/hedera-app-spi/src/main/java/com/hedera/node/app/spi/validation/AttributeValidator.java b/hedera-node/hedera-app-spi/src/main/java/com/hedera/node/app/spi/validation/AttributeValidator.java index 3690e184944d..4cf07a105d1d 100644 --- a/hedera-node/hedera-app-spi/src/main/java/com/hedera/node/app/spi/validation/AttributeValidator.java +++ b/hedera-node/hedera-app-spi/src/main/java/com/hedera/node/app/spi/validation/AttributeValidator.java @@ -1,12 +1,12 @@ // SPDX-License-Identifier: Apache-2.0 package com.hedera.node.app.spi.validation; -import static com.hedera.node.app.spi.key.KeyUtils.IMMUTABILITY_SENTINEL_KEY; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static java.util.Objects.requireNonNull; import com.hedera.hapi.node.base.Key; import com.hedera.hapi.node.base.ResponseCodeEnum; -import com.hedera.node.app.spi.key.KeyUtils; +import com.hedera.node.app.hapi.utils.keys.KeyUtils; import com.hedera.node.app.spi.workflows.HandleException; import com.hedera.node.app.spi.workflows.TransactionHandler; import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/hedera-node/hedera-app-spi/src/test/java/com/hedera/node/app/spi/key/KeyUtilsTest.java b/hedera-node/hedera-app-spi/src/test/java/com/hedera/node/app/spi/key/KeyUtilsTest.java index bf0b6f42e3bb..117d2fc50a58 100644 --- a/hedera-node/hedera-app-spi/src/test/java/com/hedera/node/app/spi/key/KeyUtilsTest.java +++ b/hedera-node/hedera-app-spi/src/test/java/com/hedera/node/app/spi/key/KeyUtilsTest.java @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 package com.hedera.node.app.spi.key; -import static com.hedera.node.app.spi.key.KeyUtils.ECDSA_SECP256K1_COMPRESSED_KEY_LENGTH; +import static com.hedera.node.app.hapi.utils.keys.Secp256k1Utils.ECDSA_SECP256K1_COMPRESSED_KEY_LENGTH; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -9,6 +9,7 @@ import com.hedera.hapi.node.base.Key; import com.hedera.hapi.node.base.KeyList; import com.hedera.hapi.node.base.ThresholdKey; +import com.hedera.node.app.hapi.utils.keys.KeyUtils; import com.hedera.pbj.runtime.io.buffer.Bytes; import java.util.UUID; import org.apache.commons.lang3.ArrayUtils; diff --git a/hedera-node/hedera-app-spi/src/testFixtures/java/com/hedera/node/app/spi/fixtures/workflows/FakePreHandleContext.java b/hedera-node/hedera-app-spi/src/testFixtures/java/com/hedera/node/app/spi/fixtures/workflows/FakePreHandleContext.java index 6fe092e2190f..f3350a9dee98 100644 --- a/hedera-node/hedera-app-spi/src/testFixtures/java/com/hedera/node/app/spi/fixtures/workflows/FakePreHandleContext.java +++ b/hedera-node/hedera-app-spi/src/testFixtures/java/com/hedera/node/app/spi/fixtures/workflows/FakePreHandleContext.java @@ -4,7 +4,7 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_PAYER_ACCOUNT_ID; import static com.hedera.hapi.util.HapiUtils.EMPTY_KEY_LIST; import static com.hedera.hapi.util.HapiUtils.isHollow; -import static com.hedera.node.app.spi.key.KeyUtils.isValid; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.isValid; import static com.hedera.node.app.spi.validation.Validations.mustExist; import static java.util.Objects.requireNonNull; diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/signature/DefaultKeyVerifier.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/signature/DefaultKeyVerifier.java index 1782c83fe610..27da0d16fa1b 100644 --- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/signature/DefaultKeyVerifier.java +++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/signature/DefaultKeyVerifier.java @@ -8,7 +8,7 @@ import com.hedera.hapi.node.base.Key; import com.hedera.hapi.node.base.KeyList; -import com.hedera.node.app.spi.key.KeyComparator; +import com.hedera.node.app.hapi.utils.keys.KeyComparator; import com.hedera.node.app.spi.signatures.SignatureVerification; import com.hedera.node.app.spi.signatures.VerificationAssistant; import com.hedera.node.config.data.HederaConfig; diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/handle/dispatch/ChildDispatchFactory.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/handle/dispatch/ChildDispatchFactory.java index e026fc8fb02a..3c2b2a95c501 100644 --- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/handle/dispatch/ChildDispatchFactory.java +++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/handle/dispatch/ChildDispatchFactory.java @@ -30,6 +30,7 @@ import com.hedera.node.app.fees.FeeAccumulator; import com.hedera.node.app.fees.FeeManager; import com.hedera.node.app.fees.ResourcePriceCalculatorImpl; +import com.hedera.node.app.hapi.utils.keys.KeyComparator; import com.hedera.node.app.ids.EntityIdService; import com.hedera.node.app.ids.EntityNumGeneratorImpl; import com.hedera.node.app.ids.WritableEntityIdStore; @@ -41,7 +42,6 @@ import com.hedera.node.app.signature.impl.SignatureVerificationImpl; import com.hedera.node.app.spi.authorization.Authorizer; import com.hedera.node.app.spi.fees.FeeCharging; -import com.hedera.node.app.spi.key.KeyComparator; import com.hedera.node.app.spi.records.BlockRecordInfo; import com.hedera.node.app.spi.signatures.SignatureVerification; import com.hedera.node.app.spi.signatures.VerificationAssistant; diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/handle/steps/HollowAccountCompletions.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/handle/steps/HollowAccountCompletions.java index b9f47ead6d72..056657d3badf 100644 --- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/handle/steps/HollowAccountCompletions.java +++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/handle/steps/HollowAccountCompletions.java @@ -3,7 +3,7 @@ import static com.hedera.hapi.node.base.HederaFunctionality.ETHEREUM_TRANSACTION; import static com.hedera.hapi.util.HapiUtils.isHollow; -import static com.hedera.node.app.spi.key.KeyUtils.IMMUTABILITY_SENTINEL_KEY; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.spi.workflows.DispatchOptions.independentDispatch; import static java.util.Objects.requireNonNull; diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/handle/validation/AttributeValidatorImpl.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/handle/validation/AttributeValidatorImpl.java index 0bf37c753725..368079173d66 100644 --- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/handle/validation/AttributeValidatorImpl.java +++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/handle/validation/AttributeValidatorImpl.java @@ -7,7 +7,7 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_RENEWAL_PERIOD; import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_ZERO_BYTE_IN_STRING; import static com.hedera.hapi.node.base.ResponseCodeEnum.MEMO_TOO_LONG; -import static com.hedera.node.app.spi.key.KeyUtils.isValid; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.isValid; import static com.hedera.node.app.spi.validation.ExpiryMeta.NA; import static com.hedera.node.app.spi.workflows.HandleException.validateTrue; import static java.util.Objects.requireNonNull; diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/prehandle/PreHandleContextImpl.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/prehandle/PreHandleContextImpl.java index 06ac683658e2..02ecd8000ab9 100644 --- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/prehandle/PreHandleContextImpl.java +++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/prehandle/PreHandleContextImpl.java @@ -5,8 +5,8 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.UNRESOLVABLE_REQUIRED_SIGNERS; import static com.hedera.hapi.util.HapiUtils.EMPTY_KEY_LIST; import static com.hedera.hapi.util.HapiUtils.isHollow; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.isValid; import static com.hedera.node.app.service.token.impl.util.TokenHandlerHelper.verifyNotEmptyKey; -import static com.hedera.node.app.spi.key.KeyUtils.isValid; import static com.hedera.node.app.spi.validation.Validations.mustExist; import static java.util.Objects.requireNonNull; diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/prehandle/PreHandleResult.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/prehandle/PreHandleResult.java index 7e18c3c3223a..59d6df66cd21 100644 --- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/prehandle/PreHandleResult.java +++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/workflows/prehandle/PreHandleResult.java @@ -2,7 +2,7 @@ package com.hedera.node.app.workflows.prehandle; import static com.hedera.hapi.node.base.ResponseCodeEnum.UNKNOWN; -import static com.hedera.node.app.spi.key.KeyUtils.IMMUTABILITY_SENTINEL_KEY; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.workflows.prehandle.PreHandleResult.Status.NODE_DUE_DILIGENCE_FAILURE; import static java.util.Objects.requireNonNull; diff --git a/hedera-node/hedera-app/src/test/java/com/hedera/node/app/signature/DefaultKeyVerifierTest.java b/hedera-node/hedera-app/src/test/java/com/hedera/node/app/signature/DefaultKeyVerifierTest.java index 92ec4f1a641b..330f4b5e6a4b 100644 --- a/hedera-node/hedera-app/src/test/java/com/hedera/node/app/signature/DefaultKeyVerifierTest.java +++ b/hedera-node/hedera-app/src/test/java/com/hedera/node/app/signature/DefaultKeyVerifierTest.java @@ -26,8 +26,8 @@ import com.hedera.hapi.node.base.Key; import com.hedera.hapi.node.base.KeyList; import com.hedera.hapi.node.base.ThresholdKey; +import com.hedera.node.app.hapi.utils.keys.KeyComparator; import com.hedera.node.app.signature.impl.SignatureVerificationImpl; -import com.hedera.node.app.spi.key.KeyComparator; import com.hedera.node.app.spi.signatures.SignatureVerification; import com.hedera.node.app.spi.signatures.VerificationAssistant; import com.hedera.node.app.workflows.prehandle.FakeSignatureVerificationFuture; diff --git a/hedera-node/hedera-app/src/test/java/com/hedera/node/app/workflows/handle/dispatch/DispatchValidatorTest.java b/hedera-node/hedera-app/src/test/java/com/hedera/node/app/workflows/handle/dispatch/DispatchValidatorTest.java index 4caadeea27f1..a6addc2be61c 100644 --- a/hedera-node/hedera-app/src/test/java/com/hedera/node/app/workflows/handle/dispatch/DispatchValidatorTest.java +++ b/hedera-node/hedera-app/src/test/java/com/hedera/node/app/workflows/handle/dispatch/DispatchValidatorTest.java @@ -8,7 +8,7 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_PAYER_SIGNATURE; import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_TRANSACTION_DURATION; import static com.hedera.hapi.node.base.ResponseCodeEnum.SUCCESS; -import static com.hedera.node.app.spi.key.KeyUtils.IMMUTABILITY_SENTINEL_KEY; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.workflows.handle.dispatch.DispatchValidator.DuplicateStatus.DUPLICATE; import static com.hedera.node.app.workflows.handle.dispatch.DispatchValidator.DuplicateStatus.NO_DUPLICATE; import static com.hedera.node.app.workflows.handle.dispatch.DispatchValidator.OfferedFeeCheck.CHECK_OFFERED_FEE; diff --git a/hedera-node/hedera-app/src/test/java/com/hedera/node/app/workflows/handle/steps/HollowAccountCompletionsTest.java b/hedera-node/hedera-app/src/test/java/com/hedera/node/app/workflows/handle/steps/HollowAccountCompletionsTest.java index 7e5c5ff307b9..153dd9cd338f 100644 --- a/hedera-node/hedera-app/src/test/java/com/hedera/node/app/workflows/handle/steps/HollowAccountCompletionsTest.java +++ b/hedera-node/hedera-app/src/test/java/com/hedera/node/app/workflows/handle/steps/HollowAccountCompletionsTest.java @@ -3,7 +3,7 @@ import static com.hedera.hapi.node.base.HederaFunctionality.ETHEREUM_TRANSACTION; import static com.hedera.node.app.fixtures.AppTestBase.DEFAULT_CONFIG; -import static com.hedera.node.app.spi.key.KeyUtils.IMMUTABILITY_SENTINEL_KEY; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mock.Strictness.LENIENT; import static org.mockito.Mockito.never; diff --git a/hedera-node/hedera-app/src/test/java/com/hedera/node/app/workflows/standalone/TransactionExecutorsTest.java b/hedera-node/hedera-app/src/test/java/com/hedera/node/app/workflows/standalone/TransactionExecutorsTest.java index ed8a6b62f4ed..71d92ab1d01c 100644 --- a/hedera-node/hedera-app/src/test/java/com/hedera/node/app/workflows/standalone/TransactionExecutorsTest.java +++ b/hedera-node/hedera-app/src/test/java/com/hedera/node/app/workflows/standalone/TransactionExecutorsTest.java @@ -2,10 +2,10 @@ package com.hedera.node.app.workflows.standalone; import static com.hedera.node.app.fixtures.AppTestBase.DEFAULT_CONFIG; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.records.schemas.V0490BlockRecordSchema.BLOCK_INFO_STATE_KEY; import static com.hedera.node.app.spi.AppContext.Gossip.UNAVAILABLE_GOSSIP; import static com.hedera.node.app.spi.fees.NoopFeeCharging.NOOP_FEE_CHARGING; -import static com.hedera.node.app.spi.key.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.util.FileUtilities.createFileID; import static com.hedera.node.app.workflows.standalone.TransactionExecutors.MAX_SIGNED_TXN_SIZE_PROPERTY; import static com.hedera.node.app.workflows.standalone.TransactionExecutors.TRANSACTION_EXECUTORS; diff --git a/hedera-node/hedera-consensus-service-impl/src/main/java/com/hedera/node/app/service/consensus/impl/handlers/ConsensusGetTopicInfoHandler.java b/hedera-node/hedera-consensus-service-impl/src/main/java/com/hedera/node/app/service/consensus/impl/handlers/ConsensusGetTopicInfoHandler.java index 6b3f0742ad26..2bbb99a9c4e4 100644 --- a/hedera-node/hedera-consensus-service-impl/src/main/java/com/hedera/node/app/service/consensus/impl/handlers/ConsensusGetTopicInfoHandler.java +++ b/hedera-node/hedera-consensus-service-impl/src/main/java/com/hedera/node/app/service/consensus/impl/handlers/ConsensusGetTopicInfoHandler.java @@ -14,8 +14,8 @@ import static com.hedera.node.app.hapi.utils.fee.FeeBuilder.TX_HASH_SIZE; import static com.hedera.node.app.hapi.utils.fee.FeeBuilder.getQueryFeeDataMatrices; import static com.hedera.node.app.hapi.utils.fee.FeeBuilder.getStateProofSize; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.isEmpty; import static com.hedera.node.app.spi.fees.Fees.CONSTANT_FEE_DATA; -import static com.hedera.node.app.spi.key.KeyUtils.isEmpty; import static com.hedera.node.app.spi.validation.Validations.mustExist; import static java.util.Objects.requireNonNull; diff --git a/hedera-node/hedera-consensus-service-impl/src/main/java/com/hedera/node/app/service/consensus/impl/handlers/ConsensusUpdateTopicHandler.java b/hedera-node/hedera-consensus-service-impl/src/main/java/com/hedera/node/app/service/consensus/impl/handlers/ConsensusUpdateTopicHandler.java index e2094e713b31..a216425704a1 100644 --- a/hedera-node/hedera-consensus-service-impl/src/main/java/com/hedera/node/app/service/consensus/impl/handlers/ConsensusUpdateTopicHandler.java +++ b/hedera-node/hedera-consensus-service-impl/src/main/java/com/hedera/node/app/service/consensus/impl/handlers/ConsensusUpdateTopicHandler.java @@ -16,7 +16,7 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.UNAUTHORIZED; import static com.hedera.node.app.hapi.utils.fee.ConsensusServiceFeeBuilder.getConsensusUpdateTopicFee; import static com.hedera.node.app.hapi.utils.fee.ConsensusServiceFeeBuilder.getUpdateTopicRbsIncrease; -import static com.hedera.node.app.spi.key.KeyUtils.isEmpty; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.isEmpty; import static com.hedera.node.app.spi.validation.AttributeValidator.isImmutableKey; import static com.hedera.node.app.spi.validation.AttributeValidator.isKeyRemoval; import static com.hedera.node.app.spi.validation.ExpiryMeta.NA; diff --git a/hedera-node/hedera-schedule-service-impl/src/main/java/com/hedera/node/app/service/schedule/impl/handlers/AbstractScheduleHandler.java b/hedera-node/hedera-schedule-service-impl/src/main/java/com/hedera/node/app/service/schedule/impl/handlers/AbstractScheduleHandler.java index 1a9f48ce1e48..5ae6ccceecd0 100644 --- a/hedera-node/hedera-schedule-service-impl/src/main/java/com/hedera/node/app/service/schedule/impl/handlers/AbstractScheduleHandler.java +++ b/hedera-node/hedera-schedule-service-impl/src/main/java/com/hedera/node/app/service/schedule/impl/handlers/AbstractScheduleHandler.java @@ -24,11 +24,11 @@ import com.hedera.hapi.node.base.ScheduleID; import com.hedera.hapi.node.state.schedule.Schedule; import com.hedera.hapi.node.transaction.TransactionBody; +import com.hedera.node.app.hapi.utils.keys.KeyComparator; import com.hedera.node.app.service.schedule.ReadableScheduleStore; import com.hedera.node.app.service.schedule.ScheduleStreamBuilder; import com.hedera.node.app.service.token.ReadableAccountStore; import com.hedera.node.app.spi.fees.FeeCharging; -import com.hedera.node.app.spi.key.KeyComparator; import com.hedera.node.app.spi.signatures.VerificationAssistant; import com.hedera.node.app.spi.workflows.DispatchOptions; import com.hedera.node.app.spi.workflows.DispatchOptions.PropagateFeeChargingStrategy; diff --git a/hedera-node/hedera-schedule-service-impl/src/test/java/com/hedera/node/app/service/schedule/impl/handlers/ScheduleCreateHandlerTest.java b/hedera-node/hedera-schedule-service-impl/src/test/java/com/hedera/node/app/service/schedule/impl/handlers/ScheduleCreateHandlerTest.java index 45bda9f1f28a..732fba95faa8 100644 --- a/hedera-node/hedera-schedule-service-impl/src/test/java/com/hedera/node/app/service/schedule/impl/handlers/ScheduleCreateHandlerTest.java +++ b/hedera-node/hedera-schedule-service-impl/src/test/java/com/hedera/node/app/service/schedule/impl/handlers/ScheduleCreateHandlerTest.java @@ -21,12 +21,12 @@ import com.hedera.hapi.node.state.schedule.Schedule; import com.hedera.hapi.node.state.throttles.ThrottleUsageSnapshots; import com.hedera.hapi.node.transaction.TransactionBody; +import com.hedera.node.app.hapi.utils.keys.KeyComparator; import com.hedera.node.app.service.schedule.WritableScheduleStore; import com.hedera.node.app.service.schedule.impl.ScheduledTransactionFactory; import com.hedera.node.app.signature.impl.SignatureVerificationImpl; import com.hedera.node.app.spi.fixtures.Assertions; import com.hedera.node.app.spi.ids.EntityNumGenerator; -import com.hedera.node.app.spi.key.KeyComparator; import com.hedera.node.app.spi.signatures.VerificationAssistant; import com.hedera.node.app.spi.throttle.Throttle; import com.hedera.node.app.spi.workflows.HandleException; diff --git a/hedera-node/hedera-schedule-service-impl/src/test/java/com/hedera/node/app/service/schedule/impl/handlers/ScheduleSignHandlerTest.java b/hedera-node/hedera-schedule-service-impl/src/test/java/com/hedera/node/app/service/schedule/impl/handlers/ScheduleSignHandlerTest.java index 32c3a550bef9..d2941ed068da 100644 --- a/hedera-node/hedera-schedule-service-impl/src/test/java/com/hedera/node/app/service/schedule/impl/handlers/ScheduleSignHandlerTest.java +++ b/hedera-node/hedera-schedule-service-impl/src/test/java/com/hedera/node/app/service/schedule/impl/handlers/ScheduleSignHandlerTest.java @@ -11,8 +11,8 @@ import com.hedera.hapi.node.scheduled.ScheduleSignTransactionBody; import com.hedera.hapi.node.state.schedule.Schedule; import com.hedera.hapi.node.transaction.TransactionBody; +import com.hedera.node.app.hapi.utils.keys.KeyComparator; import com.hedera.node.app.spi.fixtures.Assertions; -import com.hedera.node.app.spi.key.KeyComparator; import com.hedera.node.app.spi.signatures.VerificationAssistant; import com.hedera.node.app.spi.workflows.HandleException; import com.hedera.node.app.spi.workflows.PreCheckException; diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/scope/HandleHederaOperations.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/scope/HandleHederaOperations.java index 38778c500bb9..b5c05ffbf1b1 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/scope/HandleHederaOperations.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/scope/HandleHederaOperations.java @@ -3,6 +3,7 @@ import static com.hedera.hapi.node.base.HederaFunctionality.CONTRACT_CREATE; import static com.hedera.hapi.node.base.ResponseCodeEnum.SUCCESS; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.service.contract.impl.utils.ConversionUtils.FEE_SCHEDULE_UNITS_PER_TINYCENT; import static com.hedera.node.app.service.contract.impl.utils.ConversionUtils.selfManagedCustomizedCreation; import static com.hedera.node.app.service.contract.impl.utils.ConversionUtils.tuweniToPbjBytes; @@ -10,7 +11,6 @@ import static com.hedera.node.app.service.contract.impl.utils.SynthTxnUtils.synthAccountCreationFromHapi; import static com.hedera.node.app.service.contract.impl.utils.SynthTxnUtils.synthContractCreationForExternalization; import static com.hedera.node.app.service.contract.impl.utils.SynthTxnUtils.synthContractCreationFromParent; -import static com.hedera.node.app.spi.key.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.spi.workflows.DispatchOptions.stepDispatch; import static com.hedera.node.app.spi.workflows.record.StreamBuilder.TransactionCustomizer.SUPPRESSING_TRANSACTION_CUSTOMIZER; import static com.hedera.node.app.spi.workflows.record.StreamBuilder.transactionWith; diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/update/UpdateCommonDecoder.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/update/UpdateCommonDecoder.java index 46bbcd38d7fd..b19c5791f063 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/update/UpdateCommonDecoder.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/update/UpdateCommonDecoder.java @@ -5,8 +5,8 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_SIGNATURE; import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_TREASURY_ACCOUNT_FOR_TOKEN; import static com.hedera.hapi.node.base.ResponseCodeEnum.TOKEN_IS_IMMUTABLE; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.service.contract.impl.utils.ConversionUtils.asNumericContractId; -import static com.hedera.node.app.spi.key.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import com.esaulpaugh.headlong.abi.Tuple; import com.hedera.hapi.node.base.Duration; diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/handlers/ContractUpdateHandler.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/handlers/ContractUpdateHandler.java index 879b3073eedd..c03e874cd0ea 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/handlers/ContractUpdateHandler.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/handlers/ContractUpdateHandler.java @@ -29,12 +29,12 @@ import com.hedera.hapi.node.state.token.Account; import com.hedera.node.app.hapi.utils.fee.SigValueObj; import com.hedera.node.app.hapi.utils.fee.SmartContractFeeBuilder; +import com.hedera.node.app.hapi.utils.keys.KeyUtils; import com.hedera.node.app.service.contract.impl.records.ContractUpdateStreamBuilder; import com.hedera.node.app.service.token.ReadableAccountStore; import com.hedera.node.app.service.token.api.TokenServiceApi; import com.hedera.node.app.spi.fees.FeeContext; import com.hedera.node.app.spi.fees.Fees; -import com.hedera.node.app.spi.key.KeyUtils; import com.hedera.node.app.spi.validation.ExpiryMeta; import com.hedera.node.app.spi.workflows.HandleContext; import com.hedera.node.app.spi.workflows.HandleException; diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/infra/HevmTransactionFactory.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/infra/HevmTransactionFactory.java index 6dce128d7cf4..3c44e3f878f4 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/infra/HevmTransactionFactory.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/infra/HevmTransactionFactory.java @@ -19,12 +19,12 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.REQUESTED_NUM_AUTOMATIC_ASSOCIATIONS_EXCEEDS_ASSOCIATION_LIMIT; import static com.hedera.hapi.node.base.ResponseCodeEnum.SERIALIZATION_FAILED; import static com.hedera.hapi.node.base.ResponseCodeEnum.WRONG_CHAIN_ID; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.isEmpty; import static com.hedera.node.app.service.contract.impl.handlers.ContractUpdateHandler.UNLIMITED_AUTOMATIC_ASSOCIATIONS; import static com.hedera.node.app.service.contract.impl.hevm.HederaEvmTransaction.NOT_APPLICABLE; import static com.hedera.node.app.service.contract.impl.utils.ConversionUtils.asPriorityId; import static com.hedera.node.app.service.contract.impl.utils.ConversionUtils.removeIfAnyLeading0x; import static com.hedera.node.app.service.contract.impl.utils.SynthTxnUtils.synthEthTxCreation; -import static com.hedera.node.app.spi.key.KeyUtils.isEmpty; import static com.hedera.node.app.spi.validation.ExpiryMeta.NA; import static com.hedera.node.app.spi.workflows.HandleException.validateFalse; import static com.hedera.node.app.spi.workflows.HandleException.validateTrue; diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/utils/SynthTxnUtils.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/utils/SynthTxnUtils.java index ff15d3a04018..b4dd360b2602 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/utils/SynthTxnUtils.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/utils/SynthTxnUtils.java @@ -1,13 +1,13 @@ // SPDX-License-Identifier: Apache-2.0 package com.hedera.node.app.service.contract.impl.utils; -import static com.hedera.node.app.spi.key.KeyUtils.isEmpty; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.IMMUTABILITY_SENTINEL_KEY; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.isEmpty; import static java.util.Objects.requireNonNull; import com.hedera.hapi.node.base.ContractID; import com.hedera.hapi.node.base.Duration; import com.hedera.hapi.node.base.Key; -import com.hedera.hapi.node.base.KeyList; import com.hedera.hapi.node.contract.ContractCreateTransactionBody; import com.hedera.hapi.node.state.token.Account; import com.hedera.hapi.node.token.CryptoCreateTransactionBody; @@ -20,9 +20,6 @@ * Some utilities related to synthetic transaction bodies. */ public class SynthTxnUtils { - public static final Key IMMUTABILITY_SENTINEL_KEY = - Key.newBuilder().keyList(KeyList.DEFAULT).build(); - public static final long THREE_MONTHS_IN_SECONDS = 7776000L; public static final Duration DEFAULT_AUTO_RENEW_PERIOD = Duration.newBuilder().seconds(THREE_MONTHS_IN_SECONDS).build(); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/TestHelpers.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/TestHelpers.java index 63b5882ffcb0..5924537d9901 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/TestHelpers.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/TestHelpers.java @@ -1,6 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 package com.hedera.node.app.service.contract.impl.test; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.service.contract.impl.exec.failure.CustomExceptionalHaltReason.INVALID_SIGNATURE; import static com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.ReturnTypes.ZERO_TOKEN_ID; import static com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.TokenTupleUtils.typedKeyTupleFor; @@ -77,7 +78,6 @@ import com.hedera.node.app.service.contract.impl.state.StorageAccess; import com.hedera.node.app.service.contract.impl.state.StorageAccesses; import com.hedera.node.app.spi.fixtures.ids.FakeEntityIdFactoryImpl; -import com.hedera.node.app.spi.key.KeyUtils; import com.hedera.node.app.spi.workflows.HandleException; import com.hedera.node.app.spi.workflows.ResourceExhaustedException; import com.hedera.node.config.data.AccountsConfig; @@ -253,10 +253,8 @@ public class TestHelpers { .tokenType(TokenType.FUNGIBLE_COMMON) .build(); - public static final Token EXPLICITLY_IMMUTABLE_FUNGIBLE_TOKEN = FUNGIBLE_TOKEN - .copyBuilder() - .adminKey(KeyUtils.IMMUTABILITY_SENTINEL_KEY) - .build(); + public static final Token EXPLICITLY_IMMUTABLE_FUNGIBLE_TOKEN = + FUNGIBLE_TOKEN.copyBuilder().adminKey(IMMUTABILITY_SENTINEL_KEY).build(); public static final Token MUTABLE_FUNGIBLE_TOKEN = FUNGIBLE_TOKEN.copyBuilder().adminKey(AN_ED25519_KEY).build(); public static final CustomFee FIXED_HBAR_FEES = CustomFee.newBuilder() diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/utils/SynthTxnUtilsTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/utils/SynthTxnUtilsTest.java index b8aaa18702c3..8d0067943275 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/utils/SynthTxnUtilsTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/utils/SynthTxnUtilsTest.java @@ -1,6 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 package com.hedera.node.app.service.contract.impl.test.utils; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.service.contract.impl.test.TestHelpers.AN_ED25519_KEY; import static com.hedera.node.app.service.contract.impl.test.TestHelpers.A_NEW_ACCOUNT_ID; import static com.hedera.node.app.service.contract.impl.test.TestHelpers.CALLED_CONTRACT_ID; @@ -11,7 +12,6 @@ import static com.hedera.node.app.service.contract.impl.test.TestHelpers.SOME_MEMO; import static com.hedera.node.app.service.contract.impl.utils.ConversionUtils.tuweniToPbjBytes; import static com.hedera.node.app.service.contract.impl.utils.SynthTxnUtils.DEFAULT_AUTO_RENEW_PERIOD; -import static com.hedera.node.app.service.contract.impl.utils.SynthTxnUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.service.contract.impl.utils.SynthTxnUtils.synthAccountCreationFromHapi; import static com.hedera.node.app.service.contract.impl.utils.SynthTxnUtils.synthContractCreationForExternalization; import static com.hedera.node.app.service.contract.impl.utils.SynthTxnUtils.synthContractCreationFromParent; diff --git a/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/api/TokenServiceApiImpl.java b/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/api/TokenServiceApiImpl.java index fd2b1e04642c..145cf8d9488d 100644 --- a/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/api/TokenServiceApiImpl.java +++ b/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/api/TokenServiceApiImpl.java @@ -9,8 +9,8 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_ACCOUNT_ID; import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_TRANSFER_ACCOUNT_ID; import static com.hedera.hapi.node.base.ResponseCodeEnum.TRANSACTION_REQUIRES_ZERO_TOKEN_BALANCES; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.service.token.api.TokenServiceApi.FreeAliasOnDeletion.YES; -import static com.hedera.node.app.spi.key.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.spi.workflows.HandleException.validateFalse; import static com.hedera.node.app.spi.workflows.HandleException.validateTrue; import static java.util.Objects.requireNonNull; diff --git a/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/CryptoCreateHandler.java b/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/CryptoCreateHandler.java index 4e7f669f69ee..bda9b555b35c 100644 --- a/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/CryptoCreateHandler.java +++ b/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/CryptoCreateHandler.java @@ -26,6 +26,9 @@ import static com.hedera.node.app.hapi.utils.fee.FeeBuilder.INT_SIZE; import static com.hedera.node.app.hapi.utils.fee.FeeBuilder.LONG_SIZE; import static com.hedera.node.app.hapi.utils.fee.FeeBuilder.getAccountKeyStorageSize; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.IMMUTABILITY_SENTINEL_KEY; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.isEmpty; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.isValid; import static com.hedera.node.app.service.token.AliasUtils.asKeyFromAlias; import static com.hedera.node.app.service.token.AliasUtils.asKeyFromAliasPreCheck; import static com.hedera.node.app.service.token.AliasUtils.extractEvmAddress; @@ -36,9 +39,6 @@ import static com.hedera.node.app.service.token.impl.handlers.staking.StakingUtilities.NOT_REWARDED_SINCE_LAST_STAKING_META_CHANGE; import static com.hedera.node.app.service.token.impl.handlers.staking.StakingUtilities.NO_STAKE_PERIOD_START; import static com.hedera.node.app.service.token.impl.util.TokenHandlerHelper.getIfUsable; -import static com.hedera.node.app.spi.key.KeyUtils.IMMUTABILITY_SENTINEL_KEY; -import static com.hedera.node.app.spi.key.KeyUtils.isEmpty; -import static com.hedera.node.app.spi.key.KeyUtils.isValid; import static com.hedera.node.app.spi.workflows.HandleException.validateFalse; import static com.hedera.node.app.spi.workflows.HandleException.validateTrue; import static com.hedera.node.app.spi.workflows.PreCheckException.validateFalsePreCheck; diff --git a/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/TokenGetInfoHandler.java b/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/TokenGetInfoHandler.java index 350c9f645e45..3419d2aca9ef 100644 --- a/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/TokenGetInfoHandler.java +++ b/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/TokenGetInfoHandler.java @@ -13,8 +13,8 @@ import static com.hedera.hapi.node.base.TokenPauseStatus.PAUSED; import static com.hedera.hapi.node.base.TokenPauseStatus.PAUSE_NOT_APPLICABLE; import static com.hedera.hapi.node.base.TokenPauseStatus.UNPAUSED; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.isEmpty; import static com.hedera.node.app.spi.fees.Fees.CONSTANT_FEE_DATA; -import static com.hedera.node.app.spi.key.KeyUtils.isEmpty; import static com.hedera.node.app.spi.workflows.PreCheckException.validateFalsePreCheck; import static com.hedera.node.app.spi.workflows.PreCheckException.validateTruePreCheck; import static java.util.Objects.requireNonNull; diff --git a/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/TokenRejectHandler.java b/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/TokenRejectHandler.java index 006f3fb29709..dcf4bbdbc545 100644 --- a/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/TokenRejectHandler.java +++ b/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/TokenRejectHandler.java @@ -19,12 +19,12 @@ import static com.hedera.hapi.node.base.SubType.TOKEN_NON_FUNGIBLE_UNIQUE; import static com.hedera.node.app.hapi.fees.usage.SingletonUsageProperties.USAGE_PROPERTIES; import static com.hedera.node.app.hapi.fees.usage.token.entities.TokenEntitySizes.TOKEN_ENTITY_SIZES; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.isValid; import static com.hedera.node.app.service.token.impl.util.CryptoTransferHelper.createFungibleTransfer; import static com.hedera.node.app.service.token.impl.util.CryptoTransferHelper.createNftTransfer; import static com.hedera.node.app.service.token.impl.util.CryptoTransferHelper.nftTransfer; import static com.hedera.node.app.service.token.impl.util.TokenHandlerHelper.getIfUsable; import static com.hedera.node.app.service.token.impl.util.TokenHandlerHelper.getIfUsableForAliasedId; -import static com.hedera.node.app.spi.key.KeyUtils.isValid; import static com.hedera.node.app.spi.validation.Validations.validateAccountID; import static com.hedera.node.app.spi.workflows.HandleException.validateTrue; import static com.hedera.node.app.spi.workflows.PreCheckException.validateFalsePreCheck; diff --git a/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/TokenUpdateHandler.java b/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/TokenUpdateHandler.java index ea01b46f0bfa..30e1e609cfce 100644 --- a/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/TokenUpdateHandler.java +++ b/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/TokenUpdateHandler.java @@ -15,10 +15,10 @@ import static com.hedera.hapi.node.base.TokenType.NON_FUNGIBLE_UNIQUE; import static com.hedera.node.app.hapi.fees.usage.SingletonEstimatorUtils.ESTIMATOR_UTILS; import static com.hedera.node.app.hapi.fees.usage.crypto.CryptoOpsUsage.txnEstimateFactory; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.isValid; import static com.hedera.node.app.service.token.impl.util.TokenHandlerHelper.getIfUsable; import static com.hedera.node.app.service.token.impl.util.TokenKey.METADATA_KEY; import static com.hedera.node.app.spi.fees.Fees.CONSTANT_FEE_DATA; -import static com.hedera.node.app.spi.key.KeyUtils.isValid; import static com.hedera.node.app.spi.validation.AttributeValidator.isKeyRemoval; import static com.hedera.node.app.spi.validation.Validations.mustExist; import static com.hedera.node.app.spi.workflows.HandleException.validateTrue; diff --git a/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/transfer/AutoAccountCreator.java b/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/transfer/AutoAccountCreator.java index 45b7df1b4757..0d18d489e9a1 100644 --- a/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/transfer/AutoAccountCreator.java +++ b/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/handlers/transfer/AutoAccountCreator.java @@ -3,11 +3,11 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.FAIL_INVALID; import static com.hedera.hapi.node.base.ResponseCodeEnum.SUCCESS; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.service.token.AliasUtils.asKeyFromAlias; import static com.hedera.node.app.service.token.AliasUtils.isOfEvmAddressSize; import static com.hedera.node.app.service.token.impl.TokenServiceImpl.THREE_MONTHS_IN_SECONDS; import static com.hedera.node.app.service.token.impl.handlers.BaseTokenHandler.UNLIMITED_AUTOMATIC_ASSOCIATIONS; -import static com.hedera.node.app.spi.key.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.spi.workflows.DispatchOptions.setupDispatch; import static com.hedera.node.app.spi.workflows.HandleContext.DispatchMetadata.Type.CUSTOM_FEE_CHARGING; import static com.hedera.node.app.spi.workflows.HandleException.validateTrue; diff --git a/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/util/CryptoTransferValidationHelper.java b/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/util/CryptoTransferValidationHelper.java index cff1747da0ce..96ce053c103f 100644 --- a/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/util/CryptoTransferValidationHelper.java +++ b/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/util/CryptoTransferValidationHelper.java @@ -6,10 +6,10 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_TRANSFER_ACCOUNT_ID; import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_TREASURY_ACCOUNT_FOR_TOKEN; import static com.hedera.hapi.util.HapiUtils.isHollow; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.isValid; import static com.hedera.node.app.service.token.AliasUtils.isAlias; import static com.hedera.node.app.service.token.impl.handlers.BaseCryptoHandler.isStakingAccount; import static com.hedera.node.app.service.token.impl.handlers.transfer.TransferExecutor.OptionalKeyCheck.RECEIVER_KEY_IS_OPTIONAL; -import static com.hedera.node.app.spi.key.KeyUtils.isValid; import com.hedera.hapi.node.base.AccountID; import com.hedera.hapi.node.base.NftTransfer; diff --git a/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/validators/CryptoCreateValidator.java b/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/validators/CryptoCreateValidator.java index d119d2851b6e..843fba3e6478 100644 --- a/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/validators/CryptoCreateValidator.java +++ b/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/validators/CryptoCreateValidator.java @@ -3,13 +3,13 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_ADMIN_KEY; import static com.hedera.hapi.node.base.ResponseCodeEnum.KEY_REQUIRED; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.IMMUTABILITY_SENTINEL_KEY; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.isValid; import static com.hedera.node.app.service.token.impl.handlers.BaseTokenHandler.UNLIMITED_AUTOMATIC_ASSOCIATIONS; -import static com.hedera.node.app.spi.key.KeyUtils.IMMUTABILITY_SENTINEL_KEY; -import static com.hedera.node.app.spi.key.KeyUtils.isValid; import com.hedera.hapi.node.base.Key; import com.hedera.hapi.node.base.ResponseCodeEnum; -import com.hedera.node.app.spi.key.KeyUtils; +import com.hedera.node.app.hapi.utils.keys.KeyUtils; import com.hedera.node.app.spi.validation.AttributeValidator; import com.hedera.node.app.spi.workflows.HandleException; import com.hedera.node.config.data.EntitiesConfig; diff --git a/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/validators/TokenAttributesValidator.java b/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/validators/TokenAttributesValidator.java index 7e88a4541e2c..30635e71da75 100644 --- a/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/validators/TokenAttributesValidator.java +++ b/hedera-node/hedera-token-service-impl/src/main/java/com/hedera/node/app/service/token/impl/validators/TokenAttributesValidator.java @@ -15,7 +15,7 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.MISSING_TOKEN_SYMBOL; import static com.hedera.hapi.node.base.ResponseCodeEnum.TOKEN_NAME_TOO_LONG; import static com.hedera.hapi.node.base.ResponseCodeEnum.TOKEN_SYMBOL_TOO_LONG; -import static com.hedera.node.app.spi.key.KeyUtils.isValid; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.isValid; import static com.hedera.node.app.spi.validation.AttributeValidator.isKeyRemoval; import static com.hedera.node.app.spi.workflows.HandleException.validateTrue; diff --git a/hedera-node/hedera-token-service-impl/src/test/java/com/hedera/node/app/service/token/impl/test/api/TokenServiceApiImplTest.java b/hedera-node/hedera-token-service-impl/src/test/java/com/hedera/node/app/service/token/impl/test/api/TokenServiceApiImplTest.java index c804960663e3..f54dd9a0493a 100644 --- a/hedera-node/hedera-token-service-impl/src/test/java/com/hedera/node/app/service/token/impl/test/api/TokenServiceApiImplTest.java +++ b/hedera-node/hedera-token-service-impl/src/test/java/com/hedera/node/app/service/token/impl/test/api/TokenServiceApiImplTest.java @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 package com.hedera.node.app.service.token.impl.test.api; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.ids.schemas.V0490EntityIdSchema.ENTITY_ID_STATE_KEY; import static com.hedera.node.app.ids.schemas.V0590EntityIdSchema.ENTITY_COUNTS_KEY; -import static com.hedera.node.app.spi.key.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static java.util.Objects.requireNonNull; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; diff --git a/hedera-node/hedera-token-service-impl/src/test/java/com/hedera/node/app/service/token/impl/test/handlers/TokenCreateHandlerTest.java b/hedera-node/hedera-token-service-impl/src/test/java/com/hedera/node/app/service/token/impl/test/handlers/TokenCreateHandlerTest.java index 6d3df43b8385..fee8681e6754 100644 --- a/hedera-node/hedera-token-service-impl/src/test/java/com/hedera/node/app/service/token/impl/test/handlers/TokenCreateHandlerTest.java +++ b/hedera-node/hedera-token-service-impl/src/test/java/com/hedera/node/app/service/token/impl/test/handlers/TokenCreateHandlerTest.java @@ -26,10 +26,10 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.TOKEN_HAS_NO_SUPPLY_KEY; import static com.hedera.hapi.node.base.ResponseCodeEnum.TOKEN_NAME_TOO_LONG; import static com.hedera.hapi.node.base.ResponseCodeEnum.TOKEN_SYMBOL_TOO_LONG; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.service.token.impl.TokenServiceImpl.THREE_MONTHS_IN_SECONDS; import static com.hedera.node.app.service.token.impl.test.handlers.util.CryptoHandlerTestBase.A_COMPLEX_KEY; import static com.hedera.node.app.spi.fixtures.workflows.ExceptionConditions.responseCode; -import static com.hedera.node.app.spi.key.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.spi.workflows.HandleContext.TransactionCategory.USER; import static com.hedera.node.app.spi.workflows.record.StreamBuilder.ReversingBehavior.REVERSIBLE; import static com.hedera.node.app.spi.workflows.record.StreamBuilder.TransactionCustomizer.NOOP_TRANSACTION_CUSTOMIZER; diff --git a/hedera-node/hedera-token-service-impl/src/test/java/com/hedera/node/app/service/token/impl/test/util/SigReqAdapterUtils.java b/hedera-node/hedera-token-service-impl/src/test/java/com/hedera/node/app/service/token/impl/test/util/SigReqAdapterUtils.java index 6b8e85e4cef7..481c7a6d8523 100644 --- a/hedera-node/hedera-token-service-impl/src/test/java/com/hedera/node/app/service/token/impl/test/util/SigReqAdapterUtils.java +++ b/hedera-node/hedera-token-service-impl/src/test/java/com/hedera/node/app/service/token/impl/test/util/SigReqAdapterUtils.java @@ -2,6 +2,7 @@ package com.hedera.node.app.service.token.impl.test.util; import static com.hedera.node.app.hapi.utils.CommonPbjConverters.toPbj; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static com.hedera.node.app.service.token.impl.schemas.V0490TokenSchema.ALIASES_KEY; import static com.hedera.node.app.service.token.impl.schemas.V0490TokenSchema.TOKEN_RELS_KEY; import static com.hedera.node.app.service.token.impl.test.handlers.util.AdapterUtils.mockStates; @@ -59,7 +60,6 @@ import static com.hedera.node.app.service.token.impl.test.keys.KeysAndIds.TOKEN_TREASURY_KT; import static com.hedera.node.app.service.token.impl.test.keys.KeysAndIds.TOKEN_WIPE_KT; import static com.hedera.node.app.service.token.impl.test.keys.KeysAndIds.TREASURY_PAYER; -import static com.hedera.node.app.spi.key.KeyUtils.IMMUTABILITY_SENTINEL_KEY; import static org.mockito.Mockito.mock; import com.hedera.hapi.node.base.AccountID; diff --git a/hedera-node/hedera-token-service/src/main/java/com/hedera/node/app/service/token/AliasUtils.java b/hedera-node/hedera-token-service/src/main/java/com/hedera/node/app/service/token/AliasUtils.java index ab1dcdde892e..09727323be0a 100644 --- a/hedera-node/hedera-token-service/src/main/java/com/hedera/node/app/service/token/AliasUtils.java +++ b/hedera-node/hedera-token-service/src/main/java/com/hedera/node/app/service/token/AliasUtils.java @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 package com.hedera.node.app.service.token; -import static com.hedera.node.app.spi.key.KeyUtils.isValid; +import static com.hedera.node.app.hapi.utils.keys.KeyUtils.isValid; import static java.lang.System.arraycopy; import static java.util.Objects.requireNonNull; diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomERC20TransferLazyCreate.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomERC20TransferLazyCreate.java index df6b10ed4033..3600dad85596 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomERC20TransferLazyCreate.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomERC20TransferLazyCreate.java @@ -11,7 +11,7 @@ import static com.hedera.services.bdd.suites.contract.Utils.asAddress; import static com.hedera.services.bdd.suites.crypto.AutoCreateUtils.updateSpecFor; import static com.hedera.services.bdd.suites.regression.factories.IdFuzzingProviderFactory.*; -import static com.hedera.services.bdd.suites.utils.ECDSAKeysUtils.getEvmAddressFromString; +import static com.hedera.services.bdd.suites.utils.EvmAddressUtils.getEvmAddressFromString; import static com.hederahashgraph.api.proto.java.ResponseCodeEnum.SUCCESS; import com.hedera.services.bdd.spec.HapiSpecOperation; diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomERC721TransferLazyCreate.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomERC721TransferLazyCreate.java index 90e7dfe4a850..2de2fef88529 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomERC721TransferLazyCreate.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomERC721TransferLazyCreate.java @@ -5,7 +5,7 @@ import static com.hedera.services.bdd.spec.transactions.TxnVerbs.contractCall; import static com.hedera.services.bdd.suites.contract.Utils.asAddress; import static com.hedera.services.bdd.suites.regression.factories.IdFuzzingProviderFactory.*; -import static com.hedera.services.bdd.suites.utils.ECDSAKeysUtils.getEvmAddressFromString; +import static com.hedera.services.bdd.suites.utils.EvmAddressUtils.getEvmAddressFromString; import static com.hederahashgraph.api.proto.java.ResponseCodeEnum.*; import com.hedera.services.bdd.spec.HapiSpecOperation; diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomFungibleTransferLazyCreate.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomFungibleTransferLazyCreate.java index f24227fb7dee..cbeb7d26a352 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomFungibleTransferLazyCreate.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomFungibleTransferLazyCreate.java @@ -12,7 +12,7 @@ import static com.hedera.services.bdd.suites.contract.Utils.asAddress; import static com.hedera.services.bdd.suites.crypto.AutoCreateUtils.updateSpecFor; import static com.hedera.services.bdd.suites.regression.factories.IdFuzzingProviderFactory.*; -import static com.hedera.services.bdd.suites.utils.ECDSAKeysUtils.getEvmAddressFromString; +import static com.hedera.services.bdd.suites.utils.EvmAddressUtils.getEvmAddressFromString; import static com.hederahashgraph.api.proto.java.ResponseCodeEnum.*; import com.hedera.services.bdd.spec.HapiSpecOperation; diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomHbarTransferLazyCreate.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomHbarTransferLazyCreate.java index 7d9b4b40cba5..a221358a362a 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomHbarTransferLazyCreate.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomHbarTransferLazyCreate.java @@ -6,7 +6,7 @@ import static com.hedera.services.bdd.spec.utilops.UtilVerbs.accountAmount; import static com.hedera.services.bdd.spec.utilops.UtilVerbs.transferList; import static com.hedera.services.bdd.suites.regression.factories.IdFuzzingProviderFactory.*; -import static com.hedera.services.bdd.suites.utils.ECDSAKeysUtils.getEvmAddressFromString; +import static com.hedera.services.bdd.suites.utils.EvmAddressUtils.getEvmAddressFromString; import com.esaulpaugh.headlong.abi.Tuple; import com.hedera.services.bdd.spec.HapiSpecOperation; diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomNonFungibleTransferLazyCreate.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomNonFungibleTransferLazyCreate.java index dd6857cf5c87..56ee3f486610 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomNonFungibleTransferLazyCreate.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/infrastructure/providers/ops/precompile/RandomNonFungibleTransferLazyCreate.java @@ -5,7 +5,7 @@ import static com.hedera.services.bdd.spec.transactions.TxnVerbs.contractCall; import static com.hedera.services.bdd.suites.contract.Utils.asAddress; import static com.hedera.services.bdd.suites.regression.factories.IdFuzzingProviderFactory.*; -import static com.hedera.services.bdd.suites.utils.ECDSAKeysUtils.getEvmAddressFromString; +import static com.hedera.services.bdd.suites.utils.EvmAddressUtils.getEvmAddressFromString; import static com.hederahashgraph.api.proto.java.ResponseCodeEnum.SUCCESS; import com.hedera.services.bdd.spec.HapiSpecOperation; diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/hapi/ContractCallSuite.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/hapi/ContractCallSuite.java index d860fac57c3a..12941885822b 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/hapi/ContractCallSuite.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/hapi/ContractCallSuite.java @@ -86,7 +86,7 @@ import static com.hedera.services.bdd.suites.contract.precompile.CreatePrecompileSuite.ECDSA_KEY; import static com.hedera.services.bdd.suites.crypto.AutoAccountCreationSuite.LAZY_MEMO; import static com.hedera.services.bdd.suites.regression.factories.HollowAccountCompletedFuzzingFactory.CONTRACT; -import static com.hedera.services.bdd.suites.utils.ECDSAKeysUtils.randomHeadlongAddress; +import static com.hedera.services.bdd.suites.utils.EvmAddressUtils.randomHeadlongAddress; import static com.hedera.services.bdd.suites.utils.contracts.SimpleBytesResult.bigIntResult; import static com.hederahashgraph.api.proto.java.ResponseCodeEnum.CONTRACT_REVERT_EXECUTED; import static com.hederahashgraph.api.proto.java.ResponseCodeEnum.INSUFFICIENT_GAS; diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/utils/ECDSAKeysUtils.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/utils/EvmAddressUtils.java similarity index 70% rename from hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/utils/ECDSAKeysUtils.java rename to hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/utils/EvmAddressUtils.java index 8597fc1a8a85..36ce2b3b4c14 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/utils/ECDSAKeysUtils.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/utils/EvmAddressUtils.java @@ -4,14 +4,16 @@ import static com.hedera.services.bdd.suites.utils.MiscEETUtils.genRandomBytes; import com.esaulpaugh.headlong.abi.Address; +import com.hedera.node.app.hapi.utils.keys.Secp256k1Utils; import com.hedera.services.bdd.spec.infrastructure.HapiSpecRegistry; import java.math.BigInteger; -public class ECDSAKeysUtils { - private ECDSAKeysUtils() {} +public class EvmAddressUtils { + private EvmAddressUtils() {} public static byte[] getEvmAddressFromString(HapiSpecRegistry registry, String keyName) { - return registry.getKey(keyName).getECDSASecp256K1().toByteArray(); + final var key = registry.getKey(keyName); + return Secp256k1Utils.getEvmAddressFromString(key); } public static Address randomHeadlongAddress() {