public static function ristretto255_is_valid_point($p,
$dontFallback = false
) { if (self::
useNewSodiumAPI() && !
$dontFallback) { return sodium_crypto_core_ristretto255_is_valid_point($p);
} try { $r = ParagonIE_Sodium_Core_Ristretto255::
ristretto255_frombytes($p);
return $r['res'
] === 0 &&
ParagonIE_Sodium_Core_Ristretto255::
ristretto255_point_is_canonical($p) === 1;
} catch (SodiumException
$ex) { if ($ex->
getMessage() === 'S is not canonical'
) { return false;
} throw $ex;
} } /**
* @param string $p
* @param string $q
* @param bool $dontFallback
* @return string
* @throws SodiumException
*/