diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/history/impl/ProofKeysAccessorImpl.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/history/impl/ProofKeysAccessorImpl.java index 2c917cf73a1c..0d47b4dfdf61 100644 --- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/history/impl/ProofKeysAccessorImpl.java +++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/history/impl/ProofKeysAccessorImpl.java @@ -74,6 +74,11 @@ public static SchnorrKeyPair from(@NonNull final SchnorrKeys keys) { return new SchnorrKeyPair(Bytes.wrap(keys.privateKey()), Bytes.wrap(keys.publicKey())); } + @Override + public @NonNull String toString() { + return "SchnorrKeyPair[privateKey=, publicKey=" + publicKey + "]"; + } + /** * Translates a byte array into a {@link SchnorrKeyPair} instance. * @param bytes the byte array diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/tss/TssKeyFiles.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/tss/TssKeyFiles.java index 527800819fa5..afeff790081e 100644 --- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/tss/TssKeyFiles.java +++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/tss/TssKeyFiles.java @@ -209,6 +209,11 @@ public record SchnorrKeyPair( requireNonNull(publicKey); } + @Override + public @NonNull String toString() { + return "SchnorrKeyPair[privateKey=, publicKey=" + publicKey + "]"; + } + /** * Translates a byte array into a {@link SchnorrKeyPair}. */ diff --git a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/tss/TssKeyPair.java b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/tss/TssKeyPair.java index 51199d458b31..49458a32e469 100644 --- a/hedera-node/hedera-app/src/main/java/com/hedera/node/app/tss/TssKeyPair.java +++ b/hedera-node/hedera-app/src/main/java/com/hedera/node/app/tss/TssKeyPair.java @@ -16,4 +16,9 @@ public record TssKeyPair(@NonNull Bytes privateKey, @NonNull Bytes publicKey) { requireNonNull(privateKey); requireNonNull(publicKey); } + + @Override + public @NonNull String toString() { + return "TssKeyPair[privateKey=, publicKey=" + publicKey + "]"; + } } diff --git a/hedera-node/hedera-app/src/test/java/com/hedera/node/app/history/impl/ProofKeysAccessorImplTest.java b/hedera-node/hedera-app/src/test/java/com/hedera/node/app/history/impl/ProofKeysAccessorImplTest.java new file mode 100644 index 000000000000..424983d77a1d --- /dev/null +++ b/hedera-node/hedera-app/src/test/java/com/hedera/node/app/history/impl/ProofKeysAccessorImplTest.java @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: Apache-2.0 +package com.hedera.node.app.history.impl; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; + +import com.hedera.pbj.runtime.io.buffer.Bytes; +import org.junit.jupiter.api.Test; + +class ProofKeysAccessorImplTest { + @Test + void schnorrKeyPairToStringRedactsPrivateKey() { + final var privateKey = Bytes.wrap("private"); + final var publicKey = Bytes.wrap("public"); + final var keyPair = new ProofKeysAccessorImpl.SchnorrKeyPair(privateKey, publicKey); + + final var asString = keyPair.toString(); + + assertEquals("SchnorrKeyPair[privateKey=, publicKey=" + publicKey + "]", asString); + assertFalse(asString.contains(privateKey.toString())); + } +} diff --git a/hedera-node/hedera-app/src/test/java/com/hedera/node/app/tss/TssKeyFilesTest.java b/hedera-node/hedera-app/src/test/java/com/hedera/node/app/tss/TssKeyFilesTest.java index 5566c3110271..699267ee7d6f 100644 --- a/hedera-node/hedera-app/src/test/java/com/hedera/node/app/tss/TssKeyFilesTest.java +++ b/hedera-node/hedera-app/src/test/java/com/hedera/node/app/tss/TssKeyFilesTest.java @@ -3,6 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assumptions.assumeTrue; @@ -67,6 +68,18 @@ void schnorrKeyPairRoundTripsThroughDelimitedBytes() { assertArrayEquals(bytes, roundTripped.toDelimitedBytes()); } + @Test + void schnorrKeyPairToStringRedactsPrivateKey() { + final var privateKey = Bytes.wrap("private"); + final var publicKey = Bytes.wrap("public"); + final var keyPair = new TssKeyFiles.SchnorrKeyPair(privateKey, publicKey); + + final var asString = keyPair.toString(); + + assertEquals("SchnorrKeyPair[privateKey=, publicKey=" + publicKey + "]", asString); + assertFalse(asString.contains(privateKey.toString())); + } + @Test void rejectsMalformedDelimitedSchnorrKeyPair() { assertThrows(IllegalArgumentException.class, () -> TssKeyFiles.SchnorrKeyPair.fromDelimited(new byte[] {3, 1})); diff --git a/hedera-node/hedera-app/src/test/java/com/hedera/node/app/tss/TssKeyPairTest.java b/hedera-node/hedera-app/src/test/java/com/hedera/node/app/tss/TssKeyPairTest.java new file mode 100644 index 000000000000..19a9bfddcf3e --- /dev/null +++ b/hedera-node/hedera-app/src/test/java/com/hedera/node/app/tss/TssKeyPairTest.java @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: Apache-2.0 +package com.hedera.node.app.tss; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; + +import com.hedera.pbj.runtime.io.buffer.Bytes; +import org.junit.jupiter.api.Test; + +class TssKeyPairTest { + @Test + void toStringRedactsPrivateKey() { + final var privateKey = Bytes.wrap("private"); + final var publicKey = Bytes.wrap("public"); + final var keyPair = new TssKeyPair(privateKey, publicKey); + + final var asString = keyPair.toString(); + + assertEquals("TssKeyPair[privateKey=, publicKey=" + publicKey + "]", asString); + assertFalse(asString.contains(privateKey.toString())); + } +}