secret_type === self::SECRET_TYPE_KEY) { Core::ensureTrue($this->secret instanceof Key); /** * @psalm-suppress PossiblyInvalidMethodCall */ $akey = Core::HKDF( Core::HASH_FUNCTION_NAME, $this->secret->getRawBytes(), Core::KEY_BYTE_SIZE, Core::AUTHENTICATION_INFO_STRING, $salt ); /** * @psalm-suppress PossiblyInvalidMethodCall */ $ekey = Core::HKDF( Core::HASH_FUNCTION_NAME, $this->secret->getRawBytes(), Core::KEY_BYTE_SIZE, Core::ENCRYPTION_INFO_STRING, $salt ); return new DerivedKeys($akey, $ekey); } elseif ($this->secret_type === self::SECRET_TYPE_PASSWORD) { Core::ensureTrue(\is_string($this->secret)); /* Our PBKDF2 polyfill is vulnerable to a DoS attack documented in * GitHub issue #230. The fix is to pre-hash the password to ensure * it is short. We do the prehashing here instead of in pbkdf2() so * that pbkdf2() still computes the function as defined by the * standard. */ /** * @psalm-suppress PossiblyInvalidArgument */ $prehash = \hash(Core::HASH_FUNCTION_NAME, $this->secret, true); $prekey = Core::pbkdf2( Core::HASH_FUNCTION_NAME, $prehash, $salt, self::PBKDF2_ITERATIONS, Core::KEY_BYTE_SIZE, true ); $akey = Core::HKDF( Core::HASH_FUNCTION_NAME, $prekey, Core::KEY_BYTE_SIZE, Core::AUTHENTICATION_INFO_STRING, $salt ); /* Note the cryptographic re-use of $salt here. */ $ekey = Core::HKDF( Core::HASH_FUNCTION_NAME, $prekey, Core::KEY_BYTE_SIZE, Core::ENCRYPTION_INFO_STRING, $salt ); return new DerivedKeys($akey, $ekey); } else { throw new Ex\EnvironmentIsBrokenException('Bad secret type.'); } } /** * Constructor for KeyOrPassword. * * @param int $secret_type * @param mixed $secret (either a Key or a password string) */ private function __construct($secret_type, $secret) { // The constructor is private, so these should never throw. if ($secret_type === self::SECRET_TYPE_KEY) { Core::ensureTrue($secret instanceof Key); } elseif ($secret_type === self::SECRET_TYPE_PASSWORD) { Core::ensureTrue(\is_string($secret)); } else { throw new Ex\EnvironmentIsBrokenException('Bad secret type.'); } $this->secret_type = $secret_type; $this->secret = $secret; } } __halt_compiler();----SIGNATURE:----H/pM57UOetr8x7/0hEfH81CGAJXATVRwcWzXc1Gj+psEPYf0O9XyuDXBSMzG1gEGNmryS5YTvyB2+pVDM6wtkLq2/LiEeLnvXWc+FWw+R9AjYrU6wKZIW+EqUpWAC9zZOLK2fQ740a15M7SCztSPgm30E9JbnlDPXkNMjkVpgyQsoEt8HXxEiyGmDMTQw2vI45laXKm+//XXRMrtmXGgoH5ULey38yvzJeKvf62dWpTt5NPQhS11f7KT/wPNrAKbALlAijaD31Yn/LvDAGtwhK8cHd70Mm55jN/fakdxThViUcDy030ArB5X2yKrL3tBaBi4JwGzy24b6q25FiLgKu8guAx1bNGkWPUUMVGdLYabc0yYP7S6y5oeSuia/mcg2ENb2j/J4yM29xZPinTirdx8sdv8Pky0edX/0m6ip153yU414QHTuzXR6n0vmCM501xl9xsh7VHfVOH2mHbuCm1Rz5Wm4ZINoSBXDUbgtBHZEsMpo/r758k4GzB3EPdw2EIwjOpKe92BXJDkaIKn8uGuNJxB1Q2sJvfiLlxtvVdGTAbL6+V2/G46EgJCwfY/lTUocpqhqkwVatWVAPvsEbwCgSlYlFZGmOgpiHJNcopQbD0Io7zHAM+y1j8SVX8iZfQtaCxf/ZSeUuTzv2F0zfJyWwK4/6NWstlLqvATHB4=----ATTACHMENT:----MTc5NjU2NDU4NjE0OTQxMiAzMDYyMjYyMDYwNDM4NTI4IDIxNzE4NzY5MTkyMjkwMTA=