Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions lib/private/Security/Signature/Rfc9421/Algorithm.php
Original file line number Diff line number Diff line change
Expand Up @@ -87,13 +87,16 @@ public static function verify(string $signatureBase, string $signature, Key $key
throw new SignatureException('verifying Ed25519 signatures requires ext-sodium');
}
if (strlen($signature) !== SODIUM_CRYPTO_SIGN_BYTES) {
echo __LINE__ . " return false\n";
return false;
}
// parseKey hands OKP material as plain base64 of the 32 raw bytes.
$rawPublic = base64_decode((string)$material, true);
if ($rawPublic === false || strlen($rawPublic) !== SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES) {
echo __LINE__ . " return false\n";
return false;
}
echo __LINE__ . " return ?\n";
return sodium_crypto_sign_verify_detached($signature, $signatureBase, $rawPublic);
}

Expand All @@ -102,10 +105,12 @@ public static function verify(string $signatureBase, string $signature, Key $key
if ($encoding === 'ecdsa') {
$signature = self::ecdsaRawToDer($signature, self::ecdsaCoordinateSize($resolved));
if ($signature === null) {
echo __LINE__ . " return false\n";
return false;
}
}

echo __LINE__ . ' return ' . openssl_verify($signatureBase, $signature, $material, $opensslAlgo) . "\n";
return openssl_verify($signatureBase, $signature, $material, $opensslAlgo) === 1;
}

Expand Down
5 changes: 5 additions & 0 deletions tests/lib/Security/Signature/Rfc9421/AlgorithmTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,9 @@ public function testRsaPkcs1RoundTrip(): void {
public function testEcdsaP256RoundTrip(): void {
[$priv, $key] = $this->ecKeyPair('prime256v1', 'P-256', 'ES256');
$sig = Algorithm::sign('payload', $priv, 'ecdsa-p256-sha256');
echo "sig:$sig\n";
// echo "key:$key\n";
echo 'key:' . serialize($key) . "\n";
$this->assertSame(64, strlen($sig));
$this->assertTrue(Algorithm::verify('payload', $sig, $key, 'ecdsa-p256-sha256'));
$this->assertTrue(Algorithm::verify('payload', $sig, $key, 'ES256'));
Expand All @@ -96,6 +99,8 @@ public function testEcdsaP256RoundTrip(): void {
public function testEcdsaP384RoundTrip(): void {
[$priv, $key] = $this->ecKeyPair('secp384r1', 'P-384', 'ES384');
$sig = Algorithm::sign('payload', $priv, 'ecdsa-p384-sha384');
echo "sig:$sig\n";
echo 'key:' . serialize($key) . "\n";
$this->assertSame(96, strlen($sig));
$this->assertTrue(Algorithm::verify('payload', $sig, $key, 'ecdsa-p384-sha384'));
}
Expand Down
Loading