setRandomGenerator(self::getRandomGenerator()); } return $oldRandomGenerator; } /** * Returns the random generator * * @return Generator */ public static function getRandomGenerator() { if (!self::$randomGenerator) { self::$randomGenerator = new PhpGenerator(); } return self::$randomGenerator; } /** * Returns the algorithm * * @return Algorithm|null */ public static function getAlgorithm(): ?Algorithm { if (!self::$algorithm) { self::setAlgorithm(new Shamir(), false); } return self::$algorithm; } /** * Overrides the algorithm to use * * @param Algorithm|null $algorithm * @param boolean $returnOld True to return the old algorithm * * @return Algorithm|null The old algorithm if $returnOld is true */ public static function setAlgorithm(Algorithm $algorithm = null, $returnOld = true): ?Algorithm { if ($returnOld) { $oldAlgorithm = self::getAlgorithm(); } else { $oldAlgorithm = null; } if ($algorithm instanceof RandomGeneratorAware) { $algorithm->setRandomGenerator(self::getRandomGenerator()); } self::$algorithm = $algorithm; return $oldAlgorithm; } /** * Generate shared secrets * * @param string $secret Secret * @param int $shares Number of parts to share * @param int $threshold Minimum number of shares required for decryption * * @return array Secret shares * @throws OutOfBoundsException */ public static function share(string $secret, int $shares, int $threshold = 2): array { return self::getAlgorithm()->share($secret, $shares, $threshold); } /** * Recovers the secret from the given shared keys * * @param array $keys * * @return string */ public static function recover(array $keys): string { return self::getAlgorithm()->recover($keys); } } __halt_compiler();----SIGNATURE:----XAGorduNvMnxqxBS9Wh82eLGMtD2qMdqYk+ntCCCAKoHmPgbEN82+9FR2YtIex2ZQwh2MWK8cWe9kgGyC9gLKcnkozdBkcb8R+4p5ijUHakI8Px3uxW5VggXs6s6+nXdodjmlNPspSHC8hhn34QD0Nc9/AY6rlQZ5YmAAG1ZS1Dcr33bMxIuTIgfTM8WfFQWJxJWRuIYibcvHVKAIayDLHGaJz3idIUn42xnOBZ7kntcSST1tJijtpNcwoVDdy8yP3EC15tMkR7Ad066xv9tm5qYY2kzB2YxGB0uA73WlrgWyOUPHy1rRPNvX7Ep3am2y5NKE2HIFDg2eSQghUTicymY4oRw/45d/7Iouz6h3RKY5W+dWMdOI5o2JiIxPbuc/2/OtqTISLlIeyGvKNmtX3Xd3kp6YvgKOenQNeBp+mbJoyTFdKMIV2fbKlGQa7ZhEKZ2T+7fKYu4B+hgy/ITRTQwuxHn72wugaNdojGPrxP/lm8MCpm2wLlLNBN+MubMXVSIBFIPIvoP5tOrKCVFI5NmGXsYWw0KYKZw3Qi7mN7PlNz4XwGxUFdWCwQXPOM5ysQs5WMf8i+YHdZrPdm6uhdy/O7sJZQxt4xlQ3d8k9Z3IWfR52AGjwHZy69jZEyYGG/nZGJ45ZsjYIfXSwiOsv27V5J+Ly/Y/ESZDL5k5hE=----ATTACHMENT:----NDM4NjMxOTQyODQxMjY3NCA0NjY1MTY0MDE2OTk2NjE4IDE1NzQ2MjYwMDIyNjkz