Browse Source

Move some private key methods to Crypto class

reduce-reward-shares
catbref 2 years ago
parent
commit
51930d3ccf
  1. 14
      src/main/java/org/qortal/account/PrivateKeyAccount.java
  2. 2
      src/main/java/org/qortal/controller/tradebot/TradeBot.java
  3. 15
      src/main/java/org/qortal/crypto/Crypto.java
  4. 3
      src/main/java/org/qortal/repository/hsqldb/HSQLDBRepository.java
  5. 3
      src/test/java/org/qortal/test/apps/RewardShareKeys.java
  6. 3
      src/test/java/org/qortal/test/common/AccountUtils.java

14
src/main/java/org/qortal/account/PrivateKeyAccount.java

@ -11,15 +11,15 @@ public class PrivateKeyAccount extends PublicKeyAccount {
private final Ed25519PrivateKeyParameters edPrivateKeyParams; private final Ed25519PrivateKeyParameters edPrivateKeyParams;
/** /**
* Create PrivateKeyAccount using byte[32] seed. * Create PrivateKeyAccount using byte[32] private key.
* *
* @param seed * @param privateKey
* byte[32] used to create private/public key pair * byte[32] used to create private/public key pair
* @throws IllegalArgumentException * @throws IllegalArgumentException
* if passed invalid seed * if passed invalid privateKey
*/ */
public PrivateKeyAccount(Repository repository, byte[] seed) { public PrivateKeyAccount(Repository repository, byte[] privateKey) {
this(repository, new Ed25519PrivateKeyParameters(seed, 0)); this(repository, new Ed25519PrivateKeyParameters(privateKey, 0));
} }
private PrivateKeyAccount(Repository repository, Ed25519PrivateKeyParameters edPrivateKeyParams) { private PrivateKeyAccount(Repository repository, Ed25519PrivateKeyParameters edPrivateKeyParams) {
@ -37,10 +37,6 @@ public class PrivateKeyAccount extends PublicKeyAccount {
return this.privateKey; return this.privateKey;
} }
public static byte[] toPublicKey(byte[] seed) {
return new Ed25519PrivateKeyParameters(seed, 0).generatePublicKey().getEncoded();
}
public byte[] sign(byte[] message) { public byte[] sign(byte[] message) {
return Crypto.sign(this.edPrivateKeyParams, message); return Crypto.sign(this.edPrivateKeyParams, message);
} }

2
src/main/java/org/qortal/controller/tradebot/TradeBot.java

@ -292,7 +292,7 @@ public class TradeBot implements Listener {
} }
public static byte[] deriveTradeNativePublicKey(byte[] privateKey) { public static byte[] deriveTradeNativePublicKey(byte[] privateKey) {
return PrivateKeyAccount.toPublicKey(privateKey); return Crypto.toPublicKey(privateKey);
} }
public static byte[] deriveTradeForeignPublicKey(byte[] privateKey) { public static byte[] deriveTradeForeignPublicKey(byte[] privateKey) {

15
src/main/java/org/qortal/crypto/Crypto.java

@ -253,6 +253,10 @@ public abstract class Crypto {
return false; return false;
} }
public static byte[] toPublicKey(byte[] privateKey) {
return new Ed25519PrivateKeyParameters(privateKey, 0).generatePublicKey().getEncoded();
}
public static boolean verify(byte[] publicKey, byte[] signature, byte[] message) { public static boolean verify(byte[] publicKey, byte[] signature, byte[] message) {
try { try {
return Ed25519.verify(signature, 0, publicKey, 0, message, 0, message.length); return Ed25519.verify(signature, 0, publicKey, 0, message, 0, message.length);
@ -264,7 +268,15 @@ public abstract class Crypto {
public static byte[] sign(Ed25519PrivateKeyParameters edPrivateKeyParams, byte[] message) { public static byte[] sign(Ed25519PrivateKeyParameters edPrivateKeyParams, byte[] message) {
byte[] signature = new byte[SIGNATURE_LENGTH]; byte[] signature = new byte[SIGNATURE_LENGTH];
edPrivateKeyParams.sign(Ed25519.Algorithm.Ed25519, edPrivateKeyParams.generatePublicKey(), null, message, 0, message.length, signature, 0); edPrivateKeyParams.sign(Ed25519.Algorithm.Ed25519,null, message, 0, message.length, signature, 0);
return signature;
}
public static byte[] sign(byte[] privateKey, byte[] message) {
byte[] signature = new byte[SIGNATURE_LENGTH];
new Ed25519PrivateKeyParameters(privateKey, 0).sign(Ed25519.Algorithm.Ed25519,null, message, 0, message.length, signature, 0);
return signature; return signature;
} }
@ -281,5 +293,4 @@ public abstract class Crypto {
return sharedSecret; return sharedSecret;
} }
} }

3
src/main/java/org/qortal/repository/hsqldb/HSQLDBRepository.java

@ -23,7 +23,6 @@ import java.util.stream.Stream;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.qortal.account.PrivateKeyAccount;
import org.qortal.crypto.Crypto; import org.qortal.crypto.Crypto;
import org.qortal.globalization.Translator; import org.qortal.globalization.Translator;
import org.qortal.gui.SysTray; import org.qortal.gui.SysTray;
@ -1003,7 +1002,7 @@ public class HSQLDBRepository implements Repository {
if (privateKey == null) if (privateKey == null)
return null; return null;
return PrivateKeyAccount.toPublicKey(privateKey); return Crypto.toPublicKey(privateKey);
} }
public static String ed25519PublicKeyToAddress(byte[] publicKey) { public static String ed25519PublicKeyToAddress(byte[] publicKey) {

3
src/test/java/org/qortal/test/apps/RewardShareKeys.java

@ -6,6 +6,7 @@ import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.jsse.provider.BouncyCastleJsseProvider; import org.bouncycastle.jsse.provider.BouncyCastleJsseProvider;
import org.qortal.account.PrivateKeyAccount; import org.qortal.account.PrivateKeyAccount;
import org.qortal.account.PublicKeyAccount; import org.qortal.account.PublicKeyAccount;
import org.qortal.crypto.Crypto;
import org.qortal.utils.Base58; import org.qortal.utils.Base58;
public class RewardShareKeys { public class RewardShareKeys {
@ -28,7 +29,7 @@ public class RewardShareKeys {
PublicKeyAccount recipientAccount = new PublicKeyAccount(null, args.length > 1 ? Base58.decode(args[1]) : minterAccount.getPublicKey()); PublicKeyAccount recipientAccount = new PublicKeyAccount(null, args.length > 1 ? Base58.decode(args[1]) : minterAccount.getPublicKey());
byte[] rewardSharePrivateKey = minterAccount.getRewardSharePrivateKey(recipientAccount.getPublicKey()); byte[] rewardSharePrivateKey = minterAccount.getRewardSharePrivateKey(recipientAccount.getPublicKey());
byte[] rewardSharePublicKey = PrivateKeyAccount.toPublicKey(rewardSharePrivateKey); byte[] rewardSharePublicKey = Crypto.toPublicKey(rewardSharePrivateKey);
System.out.println(String.format("Minter account: %s", minterAccount.getAddress())); System.out.println(String.format("Minter account: %s", minterAccount.getAddress()));
System.out.println(String.format("Minter's public key: %s", Base58.encode(minterAccount.getPublicKey()))); System.out.println(String.format("Minter's public key: %s", Base58.encode(minterAccount.getPublicKey())));

3
src/test/java/org/qortal/test/common/AccountUtils.java

@ -6,6 +6,7 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.qortal.account.PrivateKeyAccount; import org.qortal.account.PrivateKeyAccount;
import org.qortal.crypto.Crypto;
import org.qortal.data.transaction.BaseTransactionData; import org.qortal.data.transaction.BaseTransactionData;
import org.qortal.data.transaction.PaymentTransactionData; import org.qortal.data.transaction.PaymentTransactionData;
import org.qortal.data.transaction.RewardShareTransactionData; import org.qortal.data.transaction.RewardShareTransactionData;
@ -45,7 +46,7 @@ public class AccountUtils {
long timestamp = repository.getTransactionRepository().fromSignature(reference).getTimestamp() + 1; long timestamp = repository.getTransactionRepository().fromSignature(reference).getTimestamp() + 1;
byte[] rewardSharePrivateKey = mintingAccount.getRewardSharePrivateKey(recipientAccount.getPublicKey()); byte[] rewardSharePrivateKey = mintingAccount.getRewardSharePrivateKey(recipientAccount.getPublicKey());
byte[] rewardSharePublicKey = PrivateKeyAccount.toPublicKey(rewardSharePrivateKey); byte[] rewardSharePublicKey = Crypto.toPublicKey(rewardSharePrivateKey);
BaseTransactionData baseTransactionData = new BaseTransactionData(timestamp, txGroupId, reference, mintingAccount.getPublicKey(), fee, null); BaseTransactionData baseTransactionData = new BaseTransactionData(timestamp, txGroupId, reference, mintingAccount.getPublicKey(), fee, null);
TransactionData transactionData = new RewardShareTransactionData(baseTransactionData, recipientAccount.getAddress(), rewardSharePublicKey, sharePercent); TransactionData transactionData = new RewardShareTransactionData(baseTransactionData, recipientAccount.getAddress(), rewardSharePublicKey, sharePercent);

Loading…
Cancel
Save