mirror of
https://github.com/sparrowwallet/drongo.git
synced 2025-11-05 11:56:38 +00:00
add public key negation support
This commit is contained in:
parent
6c7662ca09
commit
1623f923b3
2 changed files with 8 additions and 4 deletions
|
|
@ -348,6 +348,11 @@ public class ECKey {
|
||||||
return ECKey.fromPublicOnly(point, compressed);
|
return ECKey.fromPublicOnly(point, compressed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Negate the provided public key */
|
||||||
|
public ECKey negate() {
|
||||||
|
return ECKey.fromPublicOnly(getPubKeyPoint().negate().normalize(), isCompressed());
|
||||||
|
}
|
||||||
|
|
||||||
/** Add to the private key by the provided private key using modular arithmetic */
|
/** Add to the private key by the provided private key using modular arithmetic */
|
||||||
public ECKey addPrivate(ECKey privKey) {
|
public ECKey addPrivate(ECKey privKey) {
|
||||||
if(this.priv == null || privKey.priv == null) {
|
if(this.priv == null || privKey.priv == null) {
|
||||||
|
|
@ -358,7 +363,7 @@ public class ECKey {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Negate the provided private key */
|
/** Negate the provided private key */
|
||||||
public ECKey negate() {
|
public ECKey negatePrivate() {
|
||||||
if(priv == null) {
|
if(priv == null) {
|
||||||
throw new IllegalStateException("Key did not contain a private key");
|
throw new IllegalStateException("Key did not contain a private key");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -241,7 +241,7 @@ public class SilentPaymentUtils {
|
||||||
try {
|
try {
|
||||||
ECKey privateKey = walletNode.getWallet().getKeystores().getFirst().getKey(walletNode);
|
ECKey privateKey = walletNode.getWallet().getKeystores().getFirst().getKey(walletNode);
|
||||||
if(walletNode.getWallet().getScriptType() == P2TR && !privateKey.getPubKeyPoint().getYCoord().toBigInteger().mod(BigInteger.TWO).equals(BigInteger.ZERO)) {
|
if(walletNode.getWallet().getScriptType() == P2TR && !privateKey.getPubKeyPoint().getYCoord().toBigInteger().mod(BigInteger.TWO).equals(BigInteger.ZERO)) {
|
||||||
privateKey = privateKey.negate();
|
privateKey = privateKey.negatePrivate();
|
||||||
}
|
}
|
||||||
if(summedPrivateKey == null) {
|
if(summedPrivateKey == null) {
|
||||||
summedPrivateKey = privateKey;
|
summedPrivateKey = privateKey;
|
||||||
|
|
@ -266,8 +266,7 @@ public class SilentPaymentUtils {
|
||||||
|
|
||||||
public static byte[] getSmallestOutpoint(Set<BlockTransactionHashIndex> outpoints) {
|
public static byte[] getSmallestOutpoint(Set<BlockTransactionHashIndex> outpoints) {
|
||||||
return outpoints.stream().map(outpoint -> new TransactionOutPoint(outpoint.getHash(), outpoint.getIndex())).map(TransactionOutPoint::bitcoinSerialize)
|
return outpoints.stream().map(outpoint -> new TransactionOutPoint(outpoint.getHash(), outpoint.getIndex())).map(TransactionOutPoint::bitcoinSerialize)
|
||||||
.sorted(new Utils.LexicographicByteArrayComparator())
|
.min(new Utils.LexicographicByteArrayComparator()).orElseThrow(() -> new IllegalArgumentException("No inputs provided to calculate silent payments input hash"));
|
||||||
.findFirst().orElseThrow(() -> new IllegalArgumentException("No inputs provided to calculate silent payments input hash"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ECKey getLabelledSpendKey(ECKey scanPrivateKey, ECKey spendPublicKey, int labelIndex) {
|
public static ECKey getLabelledSpendKey(ECKey scanPrivateKey, ECKey spendPublicKey, int labelIndex) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue