mirror of
https://github.com/sparrowwallet/drongo.git
synced 2024-12-26 01:56:44 +00:00
improve handling of invalid bip322 signatures
This commit is contained in:
parent
38b04b8e0b
commit
e15eb7c7f3
1 changed files with 18 additions and 1 deletions
|
@ -44,6 +44,10 @@ public class Bip322 {
|
||||||
public static boolean verifyMessageBip322(ScriptType scriptType, Address address, String message, String signatureBase64) throws SignatureException {
|
public static boolean verifyMessageBip322(ScriptType scriptType, Address address, String message, String signatureBase64) throws SignatureException {
|
||||||
checkScriptType(scriptType);
|
checkScriptType(scriptType);
|
||||||
|
|
||||||
|
if(signatureBase64.trim().isEmpty()) {
|
||||||
|
throw new SignatureException("Provided signature is empty.");
|
||||||
|
}
|
||||||
|
|
||||||
byte[] signatureEncoded;
|
byte[] signatureEncoded;
|
||||||
try {
|
try {
|
||||||
signatureEncoded = Base64.getDecoder().decode(signatureBase64);
|
signatureEncoded = Base64.getDecoder().decode(signatureBase64);
|
||||||
|
@ -51,7 +55,13 @@ public class Bip322 {
|
||||||
throw new SignatureException("Could not decode base64 signature", e);
|
throw new SignatureException("Could not decode base64 signature", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
TransactionWitness witness = new TransactionWitness(null, signatureEncoded, 0);
|
TransactionWitness witness;
|
||||||
|
try {
|
||||||
|
witness = new TransactionWitness(null, signatureEncoded, 0);
|
||||||
|
} catch(Exception e) {
|
||||||
|
throw new SignatureException("Provided signature is not a BIP322 simple signature.", e);
|
||||||
|
}
|
||||||
|
|
||||||
TransactionSignature signature;
|
TransactionSignature signature;
|
||||||
ECKey pubKey;
|
ECKey pubKey;
|
||||||
|
|
||||||
|
@ -59,8 +69,15 @@ public class Bip322 {
|
||||||
throw new IllegalArgumentException("Multisig signatures are not supported.");
|
throw new IllegalArgumentException("Multisig signatures are not supported.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(witness.getSignatures().isEmpty()) {
|
||||||
|
throw new SignatureException("BIP322 simple signature contains no transaction signatures.");
|
||||||
|
}
|
||||||
|
|
||||||
if(scriptType == ScriptType.P2WPKH) {
|
if(scriptType == ScriptType.P2WPKH) {
|
||||||
signature = witness.getSignatures().get(0);
|
signature = witness.getSignatures().get(0);
|
||||||
|
if(witness.getPushes().size() <= 1) {
|
||||||
|
throw new SignatureException("BIP322 simple signature for P2WPKH script type does not contain a pubkey.");
|
||||||
|
}
|
||||||
pubKey = ECKey.fromPublicOnly(witness.getPushes().get(1));
|
pubKey = ECKey.fromPublicOnly(witness.getPushes().get(1));
|
||||||
|
|
||||||
if(!address.equals(scriptType.getAddress(pubKey))) {
|
if(!address.equals(scriptType.getAddress(pubKey))) {
|
||||||
|
|
Loading…
Reference in a new issue