protected function verifyMasterSignature(array $supplierData, array $keyData, array $nodeData) : bool
{
$masterData = \json_decode($nodeData['master'], true);
if ($masterData === false) {
return false;
}
foreach ($supplierData['signing_keys'] as $key) {
if ($key['type'] !== 'master') {
continue;
}
if (\hash_equals($keyData['public_key'], $masterData['public_key'])) {
$publicKey = new SignaturePublicKey(\Sodium\hex2bin($masterData['public_key']));
$message = \json_encode($keyData);
// If the signature is valid, we return true.
return AsymmetricCrypto::verify($message, $publicKey, $masterData['signature']);
}
}
// Fail closed.
return false;
}