-
Notifications
You must be signed in to change notification settings - Fork 52
Open
Description
If you talking about [this](https://eklitzke.org/bitcoin-transaction-malleability) and forcing to use smaller s value in signature, we do not have it, because our lib is strict elliptic math, without implementation focused on bitcoin/blockchain or something. But if you need that, you can check this
<?php
require_once("vendor/autoload.php");
use Elliptic\EC;
use Elliptic\EC\Signature;
function getNegativeSignature($ec, $sig) {
$res = new Signature($sig);
$res->s = $res->s->neg()->add($ec->n);
return $res;
}
$ec = new EC('secp256k1');
$key = $ec->genKeyPair();
$msg = 'ab4c3451';
$signature = $key->sign($msg);
$negativeSignature = getNegativeSignature($ec, $signature);
echo "Normal signature: " . $signature->toDER('hex') . "\n";
echo "Negative signature: " . $negativeSignature->toDER('hex') . "\n";
echo "Verify normal: " . (($key->verify($msg, $signature) == TRUE) ? "true" : "false") . "\n";
echo "Verify negative: " . (($key->verify($msg, $negativeSignature) == TRUE) ? "true" : "false") . "\n";
if ($signature->s->cmp($negativeSignature->s) < 0) {
echo "Normal is canonical\n";
}
else {
echo "Negative is canonical\n";
}
Originally posted by @ldudzsim in #22 (comment)
I use this code to get a smaller s value. But how to recalculate "recoveryParam"?
Metadata
Metadata
Assignees
Labels
No labels