Skip to content

Commit aa36848

Browse files
Add test to ensure the same signature is used in both cases.
1 parent c6c7964 commit aa36848

File tree

2 files changed

+18
-9
lines changed

2 files changed

+18
-9
lines changed

src/Crypto/Signature/SchnorrSigner.php

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,18 +65,26 @@ public function verifyWithKey(
6565
): bool {
6666
$ptX = gmp_strval($key->getPoint()->getX(), 16);
6767
$x = str_pad($ptX, 64, '0', STR_PAD_LEFT);
68+
$serialized = $this->formatSignature($key, $signature);
69+
return $this->verify($x, $serialized, $message);
70+
}
6871

72+
/**
73+
* Format a Signature object as expected by verify()
74+
*
75+
* @param PublicKeyInterface $publicKey
76+
* @param SignatureInterface $signature
77+
* @return string
78+
*/
79+
public function formatSignature(PublicKeyInterface $publicKey, SignatureInterface $signature): string
80+
{
6981
// Bit-size >> 2 == number of hex characters
70-
$l = $key->getCurve()->getSize() >> 2;
82+
$l = $publicKey->getCurve()->getSize() >> 2;
7183

7284
// Encode as R || S, as hex strings:
7385
$r = str_pad(gmp_strval($signature->getR(), 16), $l, '0', STR_PAD_LEFT);
7486
$s = str_pad(gmp_strval($signature->getS(), 16), $l, '0', STR_PAD_LEFT);
75-
$serialized = $r . $s;
76-
77-
// var_dump($l, $serialized, $r, $s); exit;
78-
79-
return $this->verify($x, $serialized, $message);
87+
return $r . $s;
8088
}
8189

8290
/**

tests/unit/Crypto/Signature/SchnorrSignatureTest.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,18 +86,19 @@ public function testSchnorrVerificationAndSigning(
8686

8787
// -- // New in v2.5.0 // -- //
8888

89+
$signer = (new SchnorrSigner());
8990
// Create objects for the same key pair:
9091
$generator = SecureCurveFactory::getGeneratorByName('secp256k1');
9192
$skObject = new PrivateKey(new ConstantTimeMath(), $generator, gmp_init($privateKey, 16));
9293
$pkObject = $skObject->getPublicKey();
9394

9495
// Ensure the same Schnorr signature is created:
95-
$signResult2 = (new SchnorrSigner())->signWithKey($skObject, $message, $auxRand);
96-
$verifyResult2 = (new SchnorrSigner())->verifyWithKey($pkObject, $signResult2, $message);
96+
$signResult2 = $signer->signWithKey($skObject, $message, $auxRand);
97+
$verifyResult2 = $signer->verifyWithKey($pkObject, $signResult2, $message);
9798
self::assertSame($expectedResult, $verifyResult2);
9899

99-
// self::assertSame(strtolower($signature), $signResult2['signature']);
100100
// Ensure the same verification result occurs:
101+
self::assertSame($signer->formatSignature($pkObject, $signResult2), $signResult['signature']);
101102
}
102103

103104
/**

0 commit comments

Comments
 (0)